Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 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 // The DownloadManager object manages the process of downloading, including | 5 // The DownloadManager object manages the process of downloading, including |
| 6 // updates to the history system and providing the information for displaying | 6 // updates to the history system and providing the information for displaying |
| 7 // the downloads view in the Destinations tab. There is one DownloadManager per | 7 // the downloads view in the Destinations tab. There is one DownloadManager per |
| 8 // active profile in Chrome. | 8 // active profile in Chrome. |
| 9 // | 9 // |
| 10 // Download observers: | 10 // Download observers: |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 190 | 190 |
| 191 // Display a new download in the appropriate browser UI. | 191 // Display a new download in the appropriate browser UI. |
| 192 void ShowDownloadInBrowser(DownloadItem* download); | 192 void ShowDownloadInBrowser(DownloadItem* download); |
| 193 | 193 |
| 194 // The number of in progress (including paused) downloads. | 194 // The number of in progress (including paused) downloads. |
| 195 int in_progress_count() const { | 195 int in_progress_count() const { |
| 196 return static_cast<int>(in_progress_.size()); | 196 return static_cast<int>(in_progress_.size()); |
| 197 } | 197 } |
| 198 | 198 |
| 199 Profile* profile() { return profile_; } | 199 Profile* profile() { return profile_; } |
| 200 | 200 |
|
Paweł Hajdan Jr.
2011/08/12 22:08:45
nit: I think it'd be slightly better to remove emp
| |
| 201 DownloadHistory* download_history() { return download_history_.get(); } | |
| 202 | |
| 201 DownloadPrefs* download_prefs() { return download_prefs_.get(); } | 203 DownloadPrefs* download_prefs() { return download_prefs_.get(); } |
| 202 | 204 |
| 203 #if defined(UNIT_TEST) | 205 FilePath last_download_path() { return last_download_path_; } |
| 204 DownloadHistory* download_history() { return download_history_.get(); } | |
| 205 #endif | |
| 206 | 206 |
| 207 // Creates the download item. Must be called on the UI thread. | 207 // Creates the download item. Must be called on the UI thread. |
| 208 void CreateDownloadItem(DownloadCreateInfo* info); | 208 void CreateDownloadItem(DownloadCreateInfo* info); |
| 209 | 209 |
| 210 // Clears the last download path, used to initialize "save as" dialogs. | 210 // Clears the last download path, used to initialize "save as" dialogs. |
| 211 void ClearLastDownloadPath(); | 211 void ClearLastDownloadPath(); |
| 212 | 212 |
| 213 // Tests if a file type should be opened automatically. | |
| 214 bool ShouldOpenFileBasedOnExtension(const FilePath& path) const; | |
| 215 | |
| 216 // Overridden from DownloadStatusUpdaterDelegate: | 213 // Overridden from DownloadStatusUpdaterDelegate: |
| 217 virtual bool IsDownloadProgressKnown(); | 214 virtual bool IsDownloadProgressKnown(); |
| 218 virtual int64 GetInProgressDownloadCount(); | 215 virtual int64 GetInProgressDownloadCount(); |
| 219 virtual int64 GetReceivedDownloadBytes(); | 216 virtual int64 GetReceivedDownloadBytes(); |
| 220 virtual int64 GetTotalDownloadBytes(); | 217 virtual int64 GetTotalDownloadBytes(); |
| 221 | 218 |
| 222 // Called by the embedder after the save as dialog is closed. | 219 // Called by the delegate after the save as dialog is closed. |
| 223 void FileSelected(const FilePath& path, void* params); | 220 void FileSelected(const FilePath& path, void* params); |
| 224 void FileSelectionCanceled(void* params); | 221 void FileSelectionCanceled(void* params); |
| 225 | 222 |
| 226 // Returns true if this download should show the "dangerous file" warning. | 223 // Called by the delegate if it delayed the download in |
| 227 // Various factors are considered, such as the type of the file, whether a | 224 // DownloadManagerDelegate::ShouldStartDownload and now is ready. |
| 228 // user action initiated the download, and whether the user has explicitly | 225 void RestartDownload(int32 download_id); |
| 229 // marked the file type as "auto open". | |
| 230 bool IsDangerousFile(const DownloadItem& download, | |
| 231 const DownloadStateInfo& state, | |
| 232 bool visited_referrer_before); | |
| 233 | 226 |
| 234 // Checks whether downloaded files still exist. Updates state of downloads | 227 // Checks whether downloaded files still exist. Updates state of downloads |
| 235 // that refer to removed files. The check runs in the background and may | 228 // that refer to removed files. The check runs in the background and may |
| 236 // finish asynchronously after this method returns. | 229 // finish asynchronously after this method returns. |
| 237 void CheckForHistoryFilesRemoval(); | 230 void CheckForHistoryFilesRemoval(); |
| 238 | 231 |
| 239 // Checks whether a downloaded file still exists and updates the file's state | 232 // Checks whether a downloaded file still exists and updates the file's state |
| 240 // if the file is already removed. The check runs in the background and may | 233 // if the file is already removed. The check runs in the background and may |
| 241 // finish asynchronously after this method returns. | 234 // finish asynchronously after this method returns. |
| 242 void CheckForFileRemoval(DownloadItem* download_item); | 235 void CheckForFileRemoval(DownloadItem* download_item); |
| 243 | 236 |
| 244 // Callback function after url is checked with safebrowsing service. | |
| 245 void CheckDownloadUrlDone(int32 download_id, bool is_dangerous_url); | |
| 246 | |
| 247 // Callback function after we check whether the referrer URL has been visited | |
| 248 // before today. | |
| 249 void CheckVisitedReferrerBeforeDone(int32 download_id, | |
| 250 bool visited_referrer_before); | |
| 251 | |
| 252 // Callback function after download file hash is checked with safebrowsing | |
| 253 // service. | |
| 254 void CheckDownloadHashDone(int32 download_id, bool is_dangerous_hash); | |
| 255 | |
| 256 // Assert the named download item is on the correct queues | 237 // Assert the named download item is on the correct queues |
| 257 // in the DownloadManager. For debugging. | 238 // in the DownloadManager. For debugging. |
| 258 void AssertQueueStateConsistent(DownloadItem* download); | 239 void AssertQueueStateConsistent(DownloadItem* download); |
| 259 | 240 |
| 260 // Get the download item from the history map. Useful after the item has | 241 // Get the download item from the history map. Useful after the item has |
| 261 // been removed from the active map, or was retrieved from the history DB. | 242 // been removed from the active map, or was retrieved from the history DB. |
| 262 DownloadItem* GetDownloadItem(int id); | 243 DownloadItem* GetDownloadItem(int id); |
| 263 | 244 |
| 264 // Called when Save Page download starts. Transfers ownership of |download| | 245 // Called when Save Page download starts. Transfers ownership of |download| |
| 265 // to the DownloadManager. | 246 // to the DownloadManager. |
| 266 void SavePageDownloadStarted(DownloadItem* download); | 247 void SavePageDownloadStarted(DownloadItem* download); |
| 267 | 248 |
| 268 // Callback when Save Page As entry is commited to the history system. | 249 // Callback when Save Page As entry is commited to the history system. |
| 269 void OnSavePageDownloadEntryAdded(int32 download_id, int64 db_handle); | 250 void OnSavePageDownloadEntryAdded(int32 download_id, int64 db_handle); |
| 270 | 251 |
| 271 // Called when Save Page download is done. | 252 // Called when Save Page download is done. |
| 272 void SavePageDownloadFinished(DownloadItem* download); | 253 void SavePageDownloadFinished(DownloadItem* download); |
| 273 | 254 |
| 274 // Download Id for next Save Page. | 255 // Download Id for next Save Page. |
| 275 int32 GetNextSavePageId(); | 256 int32 GetNextSavePageId(); |
| 276 | 257 |
| 258 // Get the download item from the active map. Useful when the item is not | |
| 259 // yet in the history map. | |
| 260 DownloadItem* GetActiveDownloadItem(int id); | |
| 261 | |
| 277 DownloadManagerDelegate* delegate() const { return delegate_; } | 262 DownloadManagerDelegate* delegate() const { return delegate_; } |
| 278 | 263 |
| 279 private: | 264 private: |
| 280 typedef std::set<DownloadItem*> DownloadSet; | 265 typedef std::set<DownloadItem*> DownloadSet; |
| 281 typedef base::hash_map<int64, DownloadItem*> DownloadMap; | 266 typedef base::hash_map<int64, DownloadItem*> DownloadMap; |
| 282 | 267 |
| 283 // For testing. | 268 // For testing. |
| 284 friend class DownloadManagerTest; | 269 friend class DownloadManagerTest; |
| 285 friend class MockDownloadManager; | 270 friend class MockDownloadManager; |
| 286 | 271 |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 312 virtual ~DownloadManager(); | 297 virtual ~DownloadManager(); |
| 313 | 298 |
| 314 // Called on the FILE thread to check the existence of a downloaded file. | 299 // Called on the FILE thread to check the existence of a downloaded file. |
| 315 void CheckForFileRemovalOnFileThread(int64 db_handle, const FilePath& path); | 300 void CheckForFileRemovalOnFileThread(int64 db_handle, const FilePath& path); |
| 316 | 301 |
| 317 // Called on the UI thread if the FILE thread detects the removal of | 302 // Called on the UI thread if the FILE thread detects the removal of |
| 318 // the downloaded file. The UI thread updates the state of the file | 303 // the downloaded file. The UI thread updates the state of the file |
| 319 // and then notifies this update to the file's observer. | 304 // and then notifies this update to the file's observer. |
| 320 void OnFileRemovalDetected(int64 db_handle); | 305 void OnFileRemovalDetected(int64 db_handle); |
| 321 | 306 |
| 322 // Called on the download thread to check whether the suggested file path | |
| 323 // exists. We don't check if the file exists on the UI thread to avoid UI | |
| 324 // stalls from interacting with the file system. | |
| 325 void CheckIfSuggestedPathExists(int32 download_id, | |
| 326 DownloadStateInfo state, | |
| 327 const FilePath& default_path); | |
| 328 | |
| 329 // Called on the UI thread once the DownloadManager has determined whether the | |
| 330 // suggested file path exists. | |
| 331 void OnPathExistenceAvailable(int32 download_id, | |
| 332 const DownloadStateInfo& new_state); | |
| 333 | |
| 334 // Called back after a target path for the file to be downloaded to has been | 307 // Called back after a target path for the file to be downloaded to has been |
| 335 // determined, either automatically based on the suggested file name, or by | 308 // determined, either automatically based on the suggested file name, or by |
| 336 // the user in a Save As dialog box. | 309 // the user in a Save As dialog box. |
| 337 void ContinueDownloadWithPath(DownloadItem* download, | 310 void ContinueDownloadWithPath(DownloadItem* download, |
| 338 const FilePath& chosen_file); | 311 const FilePath& chosen_file); |
| 339 | 312 |
| 340 // Download cancel helper function. | 313 // Download cancel helper function. |
| 341 void DownloadCancelledInternal(int download_id, | 314 void DownloadCancelledInternal(int download_id, |
| 342 const DownloadRequestHandle& request_handle); | 315 const DownloadRequestHandle& request_handle); |
| 343 | 316 |
| 344 // All data has been downloaded. | 317 // All data has been downloaded. |
| 345 // |hash| is sha256 hash for the downloaded file. It is empty when the hash | 318 // |hash| is sha256 hash for the downloaded file. It is empty when the hash |
| 346 // is not available. | 319 // is not available. |
| 347 void OnAllDataSaved(int32 download_id, int64 size, const std::string& hash); | 320 void OnAllDataSaved(int32 download_id, int64 size, const std::string& hash); |
| 348 | 321 |
| 349 // An error occurred in the download. | 322 // An error occurred in the download. |
| 350 void OnDownloadError(int32 download_id, int64 size, int os_error); | 323 void OnDownloadError(int32 download_id, int64 size, int os_error); |
| 351 | 324 |
| 352 // Updates the app icon about the overall download progress. | 325 // Updates the app icon about the overall download progress. |
| 353 void UpdateAppIcon(); | 326 void UpdateAppIcon(); |
| 354 | 327 |
| 355 // Inform observers that the model has changed. | 328 // Inform observers that the model has changed. |
| 356 void NotifyModelChanged(); | 329 void NotifyModelChanged(); |
| 357 | 330 |
| 358 // Get the download item from the active map. Useful when the item is not | |
| 359 // yet in the history map. | |
| 360 DownloadItem* GetActiveDownloadItem(int id); | |
| 361 | |
| 362 // Debugging routine to confirm relationship between below | 331 // Debugging routine to confirm relationship between below |
| 363 // containers; no-op if NDEBUG. | 332 // containers; no-op if NDEBUG. |
| 364 void AssertContainersConsistent() const; | 333 void AssertContainersConsistent() const; |
| 365 | 334 |
| 366 // Add a DownloadItem to history_downloads_. | 335 // Add a DownloadItem to history_downloads_. |
| 367 void AddDownloadItemToHistory(DownloadItem* item, int64 db_handle); | 336 void AddDownloadItemToHistory(DownloadItem* item, int64 db_handle); |
| 368 | 337 |
| 369 // Remove from internal maps. | 338 // Remove from internal maps. |
| 370 int RemoveDownloadItems(const DownloadVector& pending_deletes); | 339 int RemoveDownloadItems(const DownloadVector& pending_deletes); |
| 371 | 340 |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 440 | 409 |
| 441 scoped_ptr<OtherDownloadManagerObserver> other_download_manager_observer_; | 410 scoped_ptr<OtherDownloadManagerObserver> other_download_manager_observer_; |
| 442 | 411 |
| 443 // Allows an embedder to control behavior. Guaranteed to outlive this object. | 412 // Allows an embedder to control behavior. Guaranteed to outlive this object. |
| 444 DownloadManagerDelegate* delegate_; | 413 DownloadManagerDelegate* delegate_; |
| 445 | 414 |
| 446 DISALLOW_COPY_AND_ASSIGN(DownloadManager); | 415 DISALLOW_COPY_AND_ASSIGN(DownloadManager); |
| 447 }; | 416 }; |
| 448 | 417 |
| 449 #endif // CHROME_BROWSER_DOWNLOAD_DOWNLOAD_MANAGER_H_ | 418 #endif // CHROME_BROWSER_DOWNLOAD_DOWNLOAD_MANAGER_H_ |
| OLD | NEW |