Chromium Code Reviews| Index: content/browser/download/download_item_impl.h |
| diff --git a/content/browser/download/download_item_impl.h b/content/browser/download/download_item_impl.h |
| index 5c5a0c348bf567b514530c5213fdc52cf23e3f34..49fe0c949e34147ce3f38c854b07f50dbb75e1d7 100644 |
| --- a/content/browser/download/download_item_impl.h |
| +++ b/content/browser/download/download_item_impl.h |
| @@ -17,6 +17,7 @@ |
| #include "content/browser/download/download_net_log_parameters.h" |
| #include "content/browser/download/download_request_handle.h" |
| #include "content/common/content_export.h" |
| +#include "content/public/browser/download_destination_observer.h" |
| #include "content/public/browser/download_id.h" |
| #include "content/public/browser/download_item.h" |
| #include "googleurl/src/gurl.h" |
| @@ -25,8 +26,14 @@ |
| class DownloadItemImplDelegate; |
| +namespace content { |
| +class DownloadFile; |
| +} |
| + |
| // See download_item.h for usage. |
| -class CONTENT_EXPORT DownloadItemImpl : public content::DownloadItem { |
| +class CONTENT_EXPORT DownloadItemImpl |
| + : public content::DownloadItem, |
| + public content::DownloadDestinationObserver { |
| public: |
| // Note that it is the responsibility of the caller to ensure that a |
| // DownloadItemImplDelegate passed to a DownloadItemImpl constructor |
| @@ -146,6 +153,9 @@ class CONTENT_EXPORT DownloadItemImpl : public content::DownloadItem { |
| // DownloadItemImpl and pass callbacks to the delegate so that all of |
| // these can be made private |
| + // Start the download |
| + virtual void Start(scoped_ptr<content::DownloadFile> download_file); |
| + |
| // Called when the target path has been determined. |target_path| is the |
| // suggested target path. |disposition| indicates how the target path should |
| // be used (see TargetDisposition). |danger_type| is the danger level of |
| @@ -172,18 +182,17 @@ class CONTENT_EXPORT DownloadItemImpl : public content::DownloadItem { |
| virtual void OnDownloadedFileRemoved(); |
| - // Cancels the off-thread aspects of the download (such as |
| - // the corresponding URLRequest). |
| - // TODO(rdsmith): This should be private and only called from |
| - // DownloadItem::Cancel/Interrupt; it isn't now because we can't |
| - // call those functions from |
| - // DownloadManager::FileSelectionCancelled() without doing some |
| - // rewrites of the DownloadManager queues. |
| - virtual void OffThreadCancel(); |
| - |
| // Indicate that an error has occurred on the download. |
| virtual void Interrupt(content::DownloadInterruptReason reason); |
| + // Provide a weak pointer reference to a DownloadDestinationObserver |
| + // for use by download destinations. |
| + base::WeakPtr<content::DownloadDestinationObserver> |
| + DestinationObserverAsWeakPtr(); |
| + |
| + // For dispatching on whether we're dealing with a SavePackage download. |
| + virtual bool IsSavePackageDownload() const; |
| + |
| // DownloadItemImpl routines only needed by SavePackage ---------------------- |
| // Called by SavePackage to set the total number of bytes on the item. |
| @@ -196,7 +205,7 @@ class CONTENT_EXPORT DownloadItemImpl : public content::DownloadItem { |
| int64 bytes_per_sec, |
| const std::string& hash_state); |
| - virtual void OnAllDataSaved(int64 size, const std::string& final_hash); |
| + virtual void OnAllDataSaved(const std::string& final_hash); |
| // Called by SavePackage to display progress when the DownloadItem |
| // should be considered complete. |
| @@ -209,6 +218,17 @@ class CONTENT_EXPORT DownloadItemImpl : public content::DownloadItem { |
| virtual void SetDbHandle(int64 handle); |
| private: |
| + // For weak pointer downcasting. |
|
benjhayden
2012/09/12 21:01:01
Can you explain this a bit more? Who downcasts wha
Randy Smith (Not in Mondays)
2012/09/13 20:15:12
Whoops, no longer needed; removed.
It was origina
|
| + friend class base::WeakPtr<content::DownloadDestinationObserver>; |
| + |
| + // DownloadDestinationObserver |
| + virtual void DestinationUpdate(int64 bytes_so_far, |
| + int64 bytes_per_sec, |
| + const std::string& hash_state) OVERRIDE; |
| + virtual void DestinationError( |
| + content::DownloadInterruptReason reason) OVERRIDE; |
| + virtual void DestinationCompleted(const std::string& final_hash) OVERRIDE; |
| + |
| // Normal progression of a download ------------------------------------------ |
| // These are listed in approximately chronological order. There are also |
| @@ -221,6 +241,10 @@ class CONTENT_EXPORT DownloadItemImpl : public content::DownloadItem { |
| // this is. |
| void Init(bool active, download_net_logs::DownloadType download_type); |
| + // Callback from file thread when we initialize the DownloadFile. |
| + void OnDownloadFileInitialized( |
| + content::DownloadInterruptReason result); |
| + |
| void OnDownloadRenamedToIntermediateName( |
| content::DownloadInterruptReason reason, const FilePath& full_path); |
| @@ -232,6 +256,8 @@ class CONTENT_EXPORT DownloadItemImpl : public content::DownloadItem { |
| void OnDownloadRenamedToFinalName(content::DownloadInterruptReason reason, |
| const FilePath& full_path); |
| + void ReleaseDownloadFile(); |
| + |
| void OnDownloadFileReleased(); |
| // Called when the entire download operation (including renaming etc) |
| @@ -244,12 +270,6 @@ class CONTENT_EXPORT DownloadItemImpl : public content::DownloadItem { |
| // GetTargetFilePath(). |
| bool NeedsRename() const; |
| - // Internal helper for maintaining consistent received and total sizes, and |
| - // setting the final hash. |
| - // Should only be called from |OnAllDataSaved|. |
| - void ProgressComplete(int64 bytes_so_far, |
| - const std::string& final_hash); |
| - |
| // Call to transition state; all state transitions should go through this. |
| void TransitionTo(DownloadState new_state); |
| @@ -258,6 +278,10 @@ class CONTENT_EXPORT DownloadItemImpl : public content::DownloadItem { |
| void SetFullPath(const FilePath& new_path); |
| + // Will be false for save package downloads retrieved from the history. |
| + // TODO(rdsmith): Replace with a generalized enum for "download source". |
| + const bool is_save_package_download_; |
| + |
| // The handle to the request information. Used for operations outside the |
| // download system. |
| scoped_ptr<DownloadRequestHandleInterface> request_handle_; |
| @@ -413,6 +437,12 @@ class CONTENT_EXPORT DownloadItemImpl : public content::DownloadItem { |
| // Did the delegate delay calling Complete on this download? |
| bool delegate_delayed_complete_; |
| + // DownloadFile associated with this download. Note that this |
| + // pointer may only be used or destroyed on the FILE thread. |
| + // This pointer will be non-null only while the DownloadItem is in |
| + // the IN_PROGRESS state. |
| + scoped_ptr<content::DownloadFile> download_file_; |
| + |
| // Net log to use for this download. |
| const net::BoundNetLog bound_net_log_; |