1// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_DOWNLOAD_DRAG_DOWNLOAD_UTIL_H_ 6#define CHROME_BROWSER_DOWNLOAD_DRAG_DOWNLOAD_UTIL_H_ 7#pragma once 8 9#include "base/basictypes.h" 10#include "base/memory/ref_counted.h" 11#include "base/string16.h" 12#include "chrome/browser/download/drag_download_file.h" 13#include "ui/base/dragdrop/download_file_interface.h" 14 15class FilePath; 16class GURL; 17namespace net { 18class FileStream; 19} 20 21namespace drag_download_util { 22 23// Parse the download metadata set in DataTransfer.setData. The metadata 24// consists of a set of the following values separated by ":" 25// * MIME type 26// * File name 27// * URL 28// If the file name contains special characters, they need to be escaped 29// appropriately. 30// For example, we can have 31// text/plain:example.txt:http://example.com/example.txt 32bool ParseDownloadMetadata(const string16& metadata, 33 string16* mime_type, 34 FilePath* file_name, 35 GURL* url); 36 37// Create a new file at the specified path. If the file already exists, try to 38// insert the sequential unifier to produce a new file, like foo-01.txt. 39// Return a FileStream if successful. 40net::FileStream* CreateFileStreamForDrop(FilePath* file_path); 41 42// Implementation of DownloadFileObserver to finalize the download process. 43class PromiseFileFinalizer : public ui::DownloadFileObserver { 44 public: 45 explicit PromiseFileFinalizer(DragDownloadFile* drag_file_downloader); 46 virtual ~PromiseFileFinalizer(); 47 48 // DownloadFileObserver methods. 49 virtual void OnDownloadCompleted(const FilePath& file_path); 50 virtual void OnDownloadAborted(); 51 52 private: 53 void Cleanup(); 54 55 scoped_refptr<DragDownloadFile> drag_file_downloader_; 56 57 DISALLOW_COPY_AND_ASSIGN(PromiseFileFinalizer); 58}; 59 60} // namespace drag_download_util 61 62#endif // CHROME_BROWSER_DOWNLOAD_DRAG_DOWNLOAD_UTIL_H_ 63