Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_ITEM_IMPL_H_ | 5 #ifndef CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_ITEM_IMPL_H_ |
| 6 #define CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_ITEM_IMPL_H_ | 6 #define CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_ITEM_IMPL_H_ |
| 7 | 7 |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 21 #include "content/public/browser/download_item.h" | 21 #include "content/public/browser/download_item.h" |
| 22 #include "googleurl/src/gurl.h" | 22 #include "googleurl/src/gurl.h" |
| 23 #include "net/base/net_errors.h" | 23 #include "net/base/net_errors.h" |
| 24 #include "net/base/net_log.h" | 24 #include "net/base/net_log.h" |
| 25 | 25 |
| 26 class DownloadItemImplDelegate; | 26 class DownloadItemImplDelegate; |
| 27 | 27 |
| 28 // See download_item.h for usage. | 28 // See download_item.h for usage. |
| 29 class CONTENT_EXPORT DownloadItemImpl : public content::DownloadItem { | 29 class CONTENT_EXPORT DownloadItemImpl : public content::DownloadItem { |
| 30 public: | 30 public: |
| 31 // The maximum number of attempts we will make to resume automatically. | |
| 32 static const int kMaxAutoResumeAttempts; | |
| 33 | |
| 31 // Note that it is the responsibility of the caller to ensure that a | 34 // Note that it is the responsibility of the caller to ensure that a |
| 32 // DownloadItemImplDelegate passed to a DownloadItemImpl constructor | 35 // DownloadItemImplDelegate passed to a DownloadItemImpl constructor |
| 33 // outlives the DownloadItemImpl. | 36 // outlives the DownloadItemImpl. |
| 34 | 37 |
| 35 // Constructing from persistent store: | 38 // Constructing from persistent store: |
| 36 // |bound_net_log| is constructed externally for our use. | 39 // |bound_net_log| is constructed externally for our use. |
| 37 DownloadItemImpl(DownloadItemImplDelegate* delegate, | 40 DownloadItemImpl(DownloadItemImplDelegate* delegate, |
| 38 content::DownloadId download_id, | 41 content::DownloadId download_id, |
| 39 const content::DownloadPersistentStoreInfo& info, | 42 const content::DownloadPersistentStoreInfo& info, |
| 40 const net::BoundNetLog& bound_net_log); | 43 const net::BoundNetLog& bound_net_log); |
| 41 | 44 |
| 42 // Constructing for a regular download. | 45 // Constructing for a regular download. |
| 43 // |bound_net_log| is constructed externally for our use. | 46 // |bound_net_log| is constructed externally for our use. |
| 44 DownloadItemImpl(DownloadItemImplDelegate* delegate, | 47 DownloadItemImpl(DownloadItemImplDelegate* delegate, |
| 45 const DownloadCreateInfo& info, | 48 const DownloadCreateInfo& info, |
| 46 scoped_ptr<DownloadRequestHandleInterface> request_handle, | |
|
Randy Smith (Not in Mondays)
2012/10/15 00:36:08
Why? (This question applies to DownloadItemFactor
| |
| 47 const net::BoundNetLog& bound_net_log); | 49 const net::BoundNetLog& bound_net_log); |
| 48 | 50 |
| 49 // Constructing for the "Save Page As..." feature: | 51 // Constructing for the "Save Page As..." feature: |
| 50 // |bound_net_log| is constructed externally for our use. | 52 // |bound_net_log| is constructed externally for our use. |
| 51 DownloadItemImpl(DownloadItemImplDelegate* delegate, | 53 DownloadItemImpl(DownloadItemImplDelegate* delegate, |
| 52 const FilePath& path, | 54 const FilePath& path, |
| 53 const GURL& url, | 55 const GURL& url, |
| 54 content::DownloadId download_id, | 56 content::DownloadId download_id, |
| 55 const std::string& mime_type, | 57 const std::string& mime_type, |
| 56 const net::BoundNetLog& bound_net_log); | 58 const net::BoundNetLog& bound_net_log); |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 67 virtual void Delete(DeleteReason reason) OVERRIDE; | 69 virtual void Delete(DeleteReason reason) OVERRIDE; |
| 68 virtual void Remove() OVERRIDE; | 70 virtual void Remove() OVERRIDE; |
| 69 virtual void OpenDownload() OVERRIDE; | 71 virtual void OpenDownload() OVERRIDE; |
| 70 virtual void ShowDownloadInShell() OVERRIDE; | 72 virtual void ShowDownloadInShell() OVERRIDE; |
| 71 virtual int32 GetId() const OVERRIDE; | 73 virtual int32 GetId() const OVERRIDE; |
| 72 virtual content::DownloadId GetGlobalId() const OVERRIDE; | 74 virtual content::DownloadId GetGlobalId() const OVERRIDE; |
| 73 virtual int64 GetDbHandle() const OVERRIDE; | 75 virtual int64 GetDbHandle() const OVERRIDE; |
| 74 virtual DownloadState GetState() const OVERRIDE; | 76 virtual DownloadState GetState() const OVERRIDE; |
| 75 virtual content::DownloadInterruptReason GetLastReason() const OVERRIDE; | 77 virtual content::DownloadInterruptReason GetLastReason() const OVERRIDE; |
| 76 virtual bool IsPaused() const OVERRIDE; | 78 virtual bool IsPaused() const OVERRIDE; |
| 79 virtual ResumeMode CanResumeInterrupted() const OVERRIDE; | |
| 77 virtual bool IsTemporary() const OVERRIDE; | 80 virtual bool IsTemporary() const OVERRIDE; |
| 78 virtual bool IsPersisted() const OVERRIDE; | 81 virtual bool IsPersisted() const OVERRIDE; |
| 79 virtual bool IsPartialDownload() const OVERRIDE; | 82 virtual bool IsPartialDownload() const OVERRIDE; |
| 80 virtual bool IsInProgress() const OVERRIDE; | 83 virtual bool IsInProgress() const OVERRIDE; |
| 81 virtual bool IsCancelled() const OVERRIDE; | 84 virtual bool IsCancelled() const OVERRIDE; |
| 82 virtual bool IsInterrupted() const OVERRIDE; | 85 virtual bool IsInterrupted() const OVERRIDE; |
| 83 virtual bool IsComplete() const OVERRIDE; | 86 virtual bool IsComplete() const OVERRIDE; |
| 84 virtual const GURL& GetURL() const OVERRIDE; | 87 virtual const GURL& GetURL() const OVERRIDE; |
| 85 virtual const std::vector<GURL>& GetUrlChain() const OVERRIDE; | 88 virtual const std::vector<GURL>& GetUrlChain() const OVERRIDE; |
| 86 virtual const GURL& GetOriginalUrl() const OVERRIDE; | 89 virtual const GURL& GetOriginalUrl() const OVERRIDE; |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 110 virtual bool TimeRemaining(base::TimeDelta* remaining) const OVERRIDE; | 113 virtual bool TimeRemaining(base::TimeDelta* remaining) const OVERRIDE; |
| 111 virtual int64 CurrentSpeed() const OVERRIDE; | 114 virtual int64 CurrentSpeed() const OVERRIDE; |
| 112 virtual int PercentComplete() const OVERRIDE; | 115 virtual int PercentComplete() const OVERRIDE; |
| 113 virtual bool AllDataSaved() const OVERRIDE; | 116 virtual bool AllDataSaved() const OVERRIDE; |
| 114 virtual int64 GetTotalBytes() const OVERRIDE; | 117 virtual int64 GetTotalBytes() const OVERRIDE; |
| 115 virtual int64 GetReceivedBytes() const OVERRIDE; | 118 virtual int64 GetReceivedBytes() const OVERRIDE; |
| 116 virtual base::Time GetStartTime() const OVERRIDE; | 119 virtual base::Time GetStartTime() const OVERRIDE; |
| 117 virtual base::Time GetEndTime() const OVERRIDE; | 120 virtual base::Time GetEndTime() const OVERRIDE; |
| 118 virtual bool CanShowInFolder() OVERRIDE; | 121 virtual bool CanShowInFolder() OVERRIDE; |
| 119 virtual bool CanOpenDownload() OVERRIDE; | 122 virtual bool CanOpenDownload() OVERRIDE; |
| 123 virtual bool CanResumeDownload() const OVERRIDE; | |
| 120 virtual bool ShouldOpenFileBasedOnExtension() OVERRIDE; | 124 virtual bool ShouldOpenFileBasedOnExtension() OVERRIDE; |
| 121 virtual bool GetOpenWhenComplete() const OVERRIDE; | 125 virtual bool GetOpenWhenComplete() const OVERRIDE; |
| 122 virtual bool GetAutoOpened() OVERRIDE; | 126 virtual bool GetAutoOpened() OVERRIDE; |
| 123 virtual bool GetOpened() const OVERRIDE; | 127 virtual bool GetOpened() const OVERRIDE; |
| 124 virtual content::DownloadPersistentStoreInfo | 128 virtual content::DownloadPersistentStoreInfo |
| 125 GetPersistentStoreInfo() const OVERRIDE; | 129 GetPersistentStoreInfo() const OVERRIDE; |
| 126 virtual content::BrowserContext* GetBrowserContext() const OVERRIDE; | 130 virtual content::BrowserContext* GetBrowserContext() const OVERRIDE; |
| 127 virtual content::WebContents* GetWebContents() const OVERRIDE; | 131 virtual content::WebContents* GetWebContents() const OVERRIDE; |
| 128 virtual void DelayedDownloadOpened(bool auto_opened) OVERRIDE; | 132 virtual void DelayedDownloadOpened(bool auto_opened) OVERRIDE; |
| 129 virtual void OnContentCheckCompleted( | 133 virtual void OnContentCheckCompleted( |
| 130 content::DownloadDangerType danger_type) OVERRIDE; | 134 content::DownloadDangerType danger_type) OVERRIDE; |
| 131 virtual void SetOpenWhenComplete(bool open) OVERRIDE; | 135 virtual void SetOpenWhenComplete(bool open) OVERRIDE; |
| 132 virtual void SetIsTemporary(bool temporary) OVERRIDE; | 136 virtual void SetIsTemporary(bool temporary) OVERRIDE; |
| 133 virtual void SetOpened(bool opened) OVERRIDE; | 137 virtual void SetOpened(bool opened) OVERRIDE; |
| 134 virtual void SetDisplayName(const FilePath& name) OVERRIDE; | 138 virtual void SetDisplayName(const FilePath& name) OVERRIDE; |
| 135 virtual std::string DebugString(bool verbose) const OVERRIDE; | 139 virtual std::string DebugString(bool verbose) const OVERRIDE; |
| 136 virtual void MockDownloadOpenForTesting() OVERRIDE; | 140 virtual void MockDownloadOpenForTesting() OVERRIDE; |
| 141 virtual const net::BoundNetLog& GetBoundNetLog() const OVERRIDE; | |
| 142 | |
| 143 void SetRequest(scoped_ptr<DownloadRequestHandleInterface> request_handle); | |
| 144 bool IsResuming() const; | |
|
Randy Smith (Not in Mondays)
2012/10/15 00:36:08
This (including the underlying state variable) doe
| |
| 137 | 145 |
| 138 // All remaining public interfaces virtual to allow for DownloadItemImpl | 146 // All remaining public interfaces virtual to allow for DownloadItemImpl |
| 139 // mocks. | 147 // mocks. |
| 140 | 148 |
| 141 // Main entry points for regular downloads, in order ------------------------- | 149 // Main entry points for regular downloads, in order ------------------------- |
| 142 | 150 |
| 143 // TODO(rdsmith): Fold the process that uses these fully into | 151 // TODO(rdsmith): Fold the process that uses these fully into |
| 144 // DownloadItemImpl and pass callbacks to the delegate so that all of | 152 // DownloadItemImpl and pass callbacks to the delegate so that all of |
| 145 // these can be made private | 153 // these can be made private |
| 146 | 154 |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 172 | 180 |
| 173 // Cancels the off-thread aspects of the download (such as | 181 // Cancels the off-thread aspects of the download (such as |
| 174 // the corresponding URLRequest). | 182 // the corresponding URLRequest). |
| 175 // TODO(rdsmith): This should be private and only called from | 183 // TODO(rdsmith): This should be private and only called from |
| 176 // DownloadItem::Cancel/Interrupt; it isn't now because we can't | 184 // DownloadItem::Cancel/Interrupt; it isn't now because we can't |
| 177 // call those functions from | 185 // call those functions from |
| 178 // DownloadManager::FileSelectionCancelled() without doing some | 186 // DownloadManager::FileSelectionCancelled() without doing some |
| 179 // rewrites of the DownloadManager queues. | 187 // rewrites of the DownloadManager queues. |
| 180 virtual void OffThreadCancel(); | 188 virtual void OffThreadCancel(); |
| 181 | 189 |
| 190 // Completes the off-thread aspects of the download interruption. | |
| 191 virtual void OffThreadInterrupt(); | |
| 192 | |
| 182 // Indicate that an error has occurred on the download. | 193 // Indicate that an error has occurred on the download. |
| 183 virtual void Interrupt(content::DownloadInterruptReason reason); | 194 virtual void Interrupt(content::DownloadInterruptReason reason); |
| 184 | 195 |
| 196 // User has resumed a download after an interruption. | |
| 197 // |req_handle| is the new request handle associated with the download. | |
| 198 virtual void Resume(scoped_ptr<DownloadRequestHandleInterface> req_handle); | |
| 199 | |
| 185 // DownloadItemImpl routines only needed by SavePackage ---------------------- | 200 // DownloadItemImpl routines only needed by SavePackage ---------------------- |
| 186 | 201 |
| 187 // Called by SavePackage to set the total number of bytes on the item. | 202 // Called by SavePackage to set the total number of bytes on the item. |
| 188 virtual void SetTotalBytes(int64 total_bytes); | 203 virtual void SetTotalBytes(int64 total_bytes); |
| 189 | 204 |
| 190 // Indicate progress in saving data to its destination. | 205 // Indicate progress in saving data to its destination. |
| 191 // |bytes_so_far| is the number of bytes received so far. | 206 // |bytes_so_far| is the number of bytes received so far. |
| 192 // |hash_state| is the current hash state. | 207 // |hash_state| is the current hash state. |
| 193 virtual void UpdateProgress(int64 bytes_so_far, | 208 virtual void UpdateProgress(int64 bytes_so_far, |
| 194 int64 bytes_per_sec, | 209 int64 bytes_per_sec, |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 279 const std::string& final_hash); | 294 const std::string& final_hash); |
| 280 | 295 |
| 281 // Call to transition state; all state transitions should go through this. | 296 // Call to transition state; all state transitions should go through this. |
| 282 void TransitionTo(DownloadInternalState new_state); | 297 void TransitionTo(DownloadInternalState new_state); |
| 283 | 298 |
| 284 // Set the |danger_type_| and invoke obserers if necessary. | 299 // Set the |danger_type_| and invoke obserers if necessary. |
| 285 void SetDangerType(content::DownloadDangerType danger_type); | 300 void SetDangerType(content::DownloadDangerType danger_type); |
| 286 | 301 |
| 287 void SetFullPath(const FilePath& new_path); | 302 void SetFullPath(const FilePath& new_path); |
| 288 | 303 |
| 289 // Mapping between internal and external states. | 304 void AutoResumeIfValid(); |
| 305 | |
| 290 static DownloadState InternalToExternalState( | 306 static DownloadState InternalToExternalState( |
| 291 DownloadInternalState internal_state); | 307 DownloadInternalState internal_state); |
| 292 static DownloadInternalState ExternalToInternalState( | 308 static DownloadInternalState ExternalToInternalState( |
| 293 DownloadState external_state); | 309 DownloadState external_state); |
| 294 | 310 |
| 295 // Debugging routines -------------------------------------------------------- | 311 // Debugging routines -------------------------------------------------------- |
| 296 static const char* DebugDownloadStateString(DownloadInternalState state); | 312 static const char* DebugDownloadStateString(DownloadInternalState state); |
| 313 static const char* DebugResumeModeString(DownloadItem::ResumeMode mode); | |
| 297 | 314 |
| 298 // The handle to the request information. Used for operations outside the | 315 // The handle to the request information. Used for operations outside the |
| 299 // download system. | 316 // download system. |
| 300 scoped_ptr<DownloadRequestHandleInterface> request_handle_; | 317 scoped_ptr<DownloadRequestHandleInterface> request_handle_; |
| 301 | 318 |
| 302 // Download ID assigned by DownloadResourceHandler. | 319 // Download ID assigned by DownloadResourceHandler. |
| 303 content::DownloadId download_id_; | 320 content::DownloadId download_id_; |
| 304 | 321 |
| 305 // Display name for the download. If this is empty, then the display name is | 322 // Display name for the download. If this is empty, then the display name is |
| 306 // considered to be |target_path_.BaseName()|. | 323 // considered to be |target_path_.BaseName()|. |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 408 | 425 |
| 409 // Our persistent store handle. | 426 // Our persistent store handle. |
| 410 int64 db_handle_; | 427 int64 db_handle_; |
| 411 | 428 |
| 412 // Our delegate. | 429 // Our delegate. |
| 413 DownloadItemImplDelegate* delegate_; | 430 DownloadItemImplDelegate* delegate_; |
| 414 | 431 |
| 415 // In progress downloads may be paused by the user, we note it here. | 432 // In progress downloads may be paused by the user, we note it here. |
| 416 bool is_paused_; | 433 bool is_paused_; |
| 417 | 434 |
| 435 // A download has been resumed. | |
| 436 bool is_resuming_; | |
| 437 | |
| 438 // The number of times this download has been resumed automatically. | |
| 439 int auto_resume_count_; | |
| 440 | |
| 418 // A flag for indicating if the download should be opened at completion. | 441 // A flag for indicating if the download should be opened at completion. |
| 419 bool open_when_complete_; | 442 bool open_when_complete_; |
| 420 | 443 |
| 421 // A flag for indicating if the downloaded file is externally removed. | 444 // A flag for indicating if the downloaded file is externally removed. |
| 422 bool file_externally_removed_; | 445 bool file_externally_removed_; |
| 423 | 446 |
| 424 // Indicates if the download is considered potentially safe or dangerous | 447 // Indicates if the download is considered potentially safe or dangerous |
| 425 // (executable files are typically considered dangerous). | 448 // (executable files are typically considered dangerous). |
| 426 SafetyState safety_state_; | 449 SafetyState safety_state_; |
| 427 | 450 |
| 428 // True if the download was auto-opened. We set this rather than using | 451 // True if the download was auto-opened. We set this rather than using |
| 429 // an observer as it's frequently possible for the download to be auto opened | 452 // an observer as it's frequently possible for the download to be auto opened |
| 430 // before the observer is added. | 453 // before the observer is added. |
| 431 bool auto_opened_; | 454 bool auto_opened_; |
| 432 | 455 |
| 456 // The download has been added to the history DB. | |
| 433 bool is_persisted_; | 457 bool is_persisted_; |
| 434 | 458 |
| 435 // True if the item was downloaded temporarily. | 459 // True if the item was downloaded temporarily. |
| 436 bool is_temporary_; | 460 bool is_temporary_; |
| 437 | 461 |
| 438 // True if we've saved all the data for the download. | 462 // True if we've saved all the data for the download. |
| 439 bool all_data_saved_; | 463 bool all_data_saved_; |
| 440 | 464 |
| 441 // Did the user open the item either directly or indirectly (such as by | 465 // Did the user open the item either directly or indirectly (such as by |
| 442 // setting always open files of this type)? The shelf also sets this field | 466 // setting always open files of this type)? The shelf also sets this field |
| 443 // when the user closes the shelf before the item has been opened but should | 467 // when the user closes the shelf before the item has been opened but should |
| 444 // be treated as though the user opened it. | 468 // be treated as though the user opened it. |
| 445 bool opened_; | 469 bool opened_; |
| 446 | 470 |
| 447 // Do we actually open downloads when requested? For testing purposes only. | 471 // Do we actually open downloads when requested? For testing purposes only. |
| 448 bool open_enabled_; | 472 bool open_enabled_; |
| 449 | 473 |
| 450 // Did the delegate delay calling Complete on this download? | 474 // Did the delegate delay calling Complete on this download? |
| 451 bool delegate_delayed_complete_; | 475 bool delegate_delayed_complete_; |
| 452 | 476 |
| 453 // Net log to use for this download. | 477 // Net log to use for this download. |
| 454 const net::BoundNetLog bound_net_log_; | 478 const net::BoundNetLog bound_net_log_; |
| 455 | 479 |
| 456 base::WeakPtrFactory<DownloadItemImpl> weak_ptr_factory_; | 480 base::WeakPtrFactory<DownloadItemImpl> weak_ptr_factory_; |
| 457 | 481 |
| 458 DISALLOW_COPY_AND_ASSIGN(DownloadItemImpl); | 482 DISALLOW_COPY_AND_ASSIGN(DownloadItemImpl); |
| 459 }; | 483 }; |
| 460 | 484 |
| 461 #endif // CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_ITEM_IMPL_H_ | 485 #endif // CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_ITEM_IMPL_H_ |
| OLD | NEW |