Home | History | Annotate | Download | only in download
      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 
     15 class FilePath;
     16 class GURL;
     17 namespace net {
     18 class FileStream;
     19 }
     20 
     21 namespace 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
     32 bool 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.
     40 net::FileStream* CreateFileStreamForDrop(FilePath* file_path);
     41 
     42 // Implementation of DownloadFileObserver to finalize the download process.
     43 class 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