Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(280)

Side by Side Diff: chrome/browser/download/download_manager.h

Issue 7277073: Support for adding save page download items into downloads history. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/download/download_item.cc ('k') | chrome/browser/download/download_manager.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 86
87 // Called immediately after the DownloadManager puts up a select file 87 // Called immediately after the DownloadManager puts up a select file
88 // dialog. 88 // dialog.
89 // |id| indicates which download opened the dialog. 89 // |id| indicates which download opened the dialog.
90 virtual void SelectFileDialogDisplayed(int32 id) {} 90 virtual void SelectFileDialogDisplayed(int32 id) {}
91 91
92 protected: 92 protected:
93 virtual ~Observer() {} 93 virtual ~Observer() {}
94 }; 94 };
95 95
96 typedef std::vector<DownloadItem*> DownloadVector;
97
96 // Return all temporary downloads that reside in the specified directory. 98 // Return all temporary downloads that reside in the specified directory.
97 void GetTemporaryDownloads(const FilePath& dir_path, 99 void GetTemporaryDownloads(const FilePath& dir_path, DownloadVector* result);
98 std::vector<DownloadItem*>* result);
99 100
100 // Return all non-temporary downloads in the specified directory that are 101 // Return all non-temporary downloads in the specified directory that are
101 // are in progress or have completed. 102 // are in progress or have completed.
102 void GetAllDownloads(const FilePath& dir_path, 103 void GetAllDownloads(const FilePath& dir_path, DownloadVector* result);
103 std::vector<DownloadItem*>* result);
104 104
105 // Return all non-temporary downloads in the specified directory that are 105 // Return all non-temporary downloads in the specified directory that are
106 // in-progress (including dangerous downloads waiting for user confirmation). 106 // in-progress (including dangerous downloads waiting for user confirmation).
107 void GetCurrentDownloads(const FilePath& dir_path, 107 void GetCurrentDownloads(const FilePath& dir_path, DownloadVector* result);
108 std::vector<DownloadItem*>* result);
109 108
110 // Returns all non-temporary downloads matching |query|. Empty query matches 109 // Returns all non-temporary downloads matching |query|. Empty query matches
111 // everything. 110 // everything.
112 void SearchDownloads(const string16& query, 111 void SearchDownloads(const string16& query, DownloadVector* result);
113 std::vector<DownloadItem*>* result);
114 112
115 // Returns true if initialized properly. 113 // Returns true if initialized properly.
116 bool Init(Profile* profile); 114 bool Init(Profile* profile);
117 115
118 // Notifications sent from the download thread to the UI thread 116 // Notifications sent from the download thread to the UI thread
119 void StartDownload(int32 id); 117 void StartDownload(int32 id);
120 void UpdateDownload(int32 download_id, int64 size); 118 void UpdateDownload(int32 download_id, int64 size);
121 // |hash| is sha256 hash for the downloaded file. It is empty when the hash 119 // |hash| is sha256 hash for the downloaded file. It is empty when the hash
122 // is not available. 120 // is not available.
123 void OnResponseCompleted(int32 download_id, int64 size, int os_error, 121 void OnResponseCompleted(int32 download_id, int64 size, int os_error,
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 int RemoveDownloads(const base::Time remove_begin); 155 int RemoveDownloads(const base::Time remove_begin);
158 156
159 // Remove all downloads will delete all downloads. The number of downloads 157 // Remove all downloads will delete all downloads. The number of downloads
160 // deleted is returned back to the caller. 158 // deleted is returned back to the caller.
161 int RemoveAllDownloads(); 159 int RemoveAllDownloads();
162 160
163 // Final download manager transition for download: Update the download 161 // Final download manager transition for download: Update the download
164 // history and remove the download from |active_downloads_|. 162 // history and remove the download from |active_downloads_|.
165 void DownloadCompleted(int32 download_id); 163 void DownloadCompleted(int32 download_id);
166 164
167 // Called when a Save Page As download is started. Transfers ownership
168 // of |download_item| to the DownloadManager.
169 void SavePageAsDownloadStarted(DownloadItem* download_item);
170
171 // Download the object at the URL. Used in cases such as "Save Link As..." 165 // Download the object at the URL. Used in cases such as "Save Link As..."
172 void DownloadUrl(const GURL& url, 166 void DownloadUrl(const GURL& url,
173 const GURL& referrer, 167 const GURL& referrer,
174 const std::string& referrer_encoding, 168 const std::string& referrer_encoding,
175 TabContents* tab_contents); 169 TabContents* tab_contents);
176 170
177 // Download the object at the URL and save it to the specified path. The 171 // Download the object at the URL and save it to the specified path. The
178 // download is treated as the temporary download and thus will not appear 172 // download is treated as the temporary download and thus will not appear
179 // in the download history. Used in cases such as drag and drop. 173 // in the download history. Used in cases such as drag and drop.
180 void DownloadUrlToFile(const GURL& url, 174 void DownloadUrlToFile(const GURL& url,
(...skipping 18 matching lines...) Expand all
199 193
200 // The number of in progress (including paused) downloads. 194 // The number of in progress (including paused) downloads.
201 int in_progress_count() const { 195 int in_progress_count() const {
202 return static_cast<int>(in_progress_.size()); 196 return static_cast<int>(in_progress_.size());
203 } 197 }
204 198
205 Profile* profile() { return profile_; } 199 Profile* profile() { return profile_; }
206 200
207 DownloadPrefs* download_prefs() { return download_prefs_.get(); } 201 DownloadPrefs* download_prefs() { return download_prefs_.get(); }
208 202
203 #if defined(UNIT_TEST)
204 DownloadHistory* download_history() { return download_history_.get(); }
205 #endif
206
209 // Creates the download item. Must be called on the UI thread. 207 // Creates the download item. Must be called on the UI thread.
210 void CreateDownloadItem(DownloadCreateInfo* info); 208 void CreateDownloadItem(DownloadCreateInfo* info);
211 209
212 // Clears the last download path, used to initialize "save as" dialogs. 210 // Clears the last download path, used to initialize "save as" dialogs.
213 void ClearLastDownloadPath(); 211 void ClearLastDownloadPath();
214 212
215 // Tests if a file type should be opened automatically. 213 // Tests if a file type should be opened automatically.
216 bool ShouldOpenFileBasedOnExtension(const FilePath& path) const; 214 bool ShouldOpenFileBasedOnExtension(const FilePath& path) const;
217 215
218 // Overridden from DownloadStatusUpdaterDelegate: 216 // Overridden from DownloadStatusUpdaterDelegate:
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 void CheckDownloadHashDone(int32 download_id, bool is_dangerous_hash); 254 void CheckDownloadHashDone(int32 download_id, bool is_dangerous_hash);
257 255
258 // Assert the named download item is on the correct queues 256 // Assert the named download item is on the correct queues
259 // in the DownloadManager. For debugging. 257 // in the DownloadManager. For debugging.
260 void AssertQueueStateConsistent(DownloadItem* download); 258 void AssertQueueStateConsistent(DownloadItem* download);
261 259
262 // Get the download item from the history map. Useful after the item has 260 // Get the download item from the history map. Useful after the item has
263 // been removed from the active map, or was retrieved from the history DB. 261 // been removed from the active map, or was retrieved from the history DB.
264 DownloadItem* GetDownloadItem(int id); 262 DownloadItem* GetDownloadItem(int id);
265 263
264 // Called when Save Page download starts. Transfers ownership of |download|
265 // to the DownloadManager.
266 void SavePageDownloadStarted(DownloadItem* download);
267
268 // Callback when Save Page As entry is commited to the history system.
269 void OnSavePageDownloadEntryAdded(int32 download_id, int64 db_handle);
270
271 // Called when Save Page download is done.
272 void SavePageDownloadFinished(DownloadItem* download);
273
274 // Download Id for next Save Page.
275 int32 GetNextSavePageId();
276
266 DownloadManagerDelegate* delegate() const { return delegate_; } 277 DownloadManagerDelegate* delegate() const { return delegate_; }
267 278
268 private: 279 private:
280 typedef std::set<DownloadItem*> DownloadSet;
281 typedef base::hash_map<int64, DownloadItem*> DownloadMap;
282
269 // For testing. 283 // For testing.
270 friend class DownloadManagerTest; 284 friend class DownloadManagerTest;
271 friend class MockDownloadManager; 285 friend class MockDownloadManager;
272 286
273 // This class is used to let an incognito DownloadManager observe changes to 287 // This class is used to let an incognito DownloadManager observe changes to
274 // a normal DownloadManager, to propagate ModelChanged() calls from the parent 288 // a normal DownloadManager, to propagate ModelChanged() calls from the parent
275 // DownloadManager to the observers of the incognito DownloadManager. 289 // DownloadManager to the observers of the incognito DownloadManager.
276 class OtherDownloadManagerObserver : public Observer { 290 class OtherDownloadManagerObserver : public Observer {
277 public: 291 public:
278 explicit OtherDownloadManagerObserver( 292 explicit OtherDownloadManagerObserver(
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 // yet in the history map. 359 // yet in the history map.
346 DownloadItem* GetActiveDownloadItem(int id); 360 DownloadItem* GetActiveDownloadItem(int id);
347 361
348 // Debugging routine to confirm relationship between below 362 // Debugging routine to confirm relationship between below
349 // containers; no-op if NDEBUG. 363 // containers; no-op if NDEBUG.
350 void AssertContainersConsistent() const; 364 void AssertContainersConsistent() const;
351 365
352 // Add a DownloadItem to history_downloads_. 366 // Add a DownloadItem to history_downloads_.
353 void AddDownloadItemToHistory(DownloadItem* item, int64 db_handle); 367 void AddDownloadItemToHistory(DownloadItem* item, int64 db_handle);
354 368
369 // Remove from internal maps.
370 int RemoveDownloadItems(const DownloadVector& pending_deletes);
371
355 // |downloads_| is the owning set for all downloads known to the 372 // |downloads_| is the owning set for all downloads known to the
356 // DownloadManager. This includes downloads started by the user in 373 // DownloadManager. This includes downloads started by the user in
357 // this session, downloads initialized from the history system, and 374 // this session, downloads initialized from the history system, and
358 // "save page as" downloads. All other DownloadItem containers in 375 // "save page as" downloads. All other DownloadItem containers in
359 // the DownloadManager are maps; they do not own the DownloadItems. 376 // the DownloadManager are maps; they do not own the DownloadItems.
360 // Note that this is the only place (with any functional implications; 377 // Note that this is the only place (with any functional implications;
361 // see save_page_as_downloads_ below) that "save page as" downloads are 378 // see save_page_as_downloads_ below) that "save page as" downloads are
362 // kept, as the DownloadManager's only job is to hold onto those 379 // kept, as the DownloadManager's only job is to hold onto those
363 // until destruction. 380 // until destruction.
364 // 381 //
(...skipping 16 matching lines...) Expand all
381 // When a download is created through a user action, the corresponding 398 // When a download is created through a user action, the corresponding
382 // DownloadItem* is placed in |active_downloads_| and remains there until the 399 // DownloadItem* is placed in |active_downloads_| and remains there until the
383 // download is in a terminal state (COMPLETE or CANCELLED). It is also 400 // download is in a terminal state (COMPLETE or CANCELLED). It is also
384 // placed in |in_progress_| and remains there until it has received a 401 // placed in |in_progress_| and remains there until it has received a
385 // valid handle from the history system. Once it has a valid handle, the 402 // valid handle from the history system. Once it has a valid handle, the
386 // DownloadItem* is placed in the |history_downloads_| map. When the 403 // DownloadItem* is placed in the |history_downloads_| map. When the
387 // download reaches a terminal state, it is removed from |in_progress_|. 404 // download reaches a terminal state, it is removed from |in_progress_|.
388 // Downloads from past sessions read from a persisted state from the 405 // Downloads from past sessions read from a persisted state from the
389 // history system are placed directly into |history_downloads_| since 406 // history system are placed directly into |history_downloads_| since
390 // they have valid handles in the history system. 407 // they have valid handles in the history system.
391 typedef std::set<DownloadItem*> DownloadSet;
392 typedef base::hash_map<int64, DownloadItem*> DownloadMap;
393 408
394 DownloadSet downloads_; 409 DownloadSet downloads_;
395 DownloadMap history_downloads_; 410 DownloadMap history_downloads_;
396 DownloadMap in_progress_; 411 DownloadMap in_progress_;
397 DownloadMap active_downloads_; 412 DownloadMap active_downloads_;
398 #if !defined(NDEBUG) 413 DownloadMap save_page_downloads_;
399 DownloadSet save_page_as_downloads_;
400 #endif
401 414
402 // True if the download manager has been initialized and requires a shutdown. 415 // True if the download manager has been initialized and requires a shutdown.
403 bool shutdown_needed_; 416 bool shutdown_needed_;
404 417
405 // Observers that want to be notified of changes to the set of downloads. 418 // Observers that want to be notified of changes to the set of downloads.
406 ObserverList<Observer> observers_; 419 ObserverList<Observer> observers_;
407 420
408 // The current active profile. 421 // The current active profile.
409 Profile* profile_; 422 Profile* profile_;
410 423
411 scoped_ptr<DownloadHistory> download_history_; 424 scoped_ptr<DownloadHistory> download_history_;
412 425
413 scoped_ptr<DownloadPrefs> download_prefs_; 426 scoped_ptr<DownloadPrefs> download_prefs_;
414 427
415 // Non-owning pointer for handling file writing on the download_thread_. 428 // Non-owning pointer for handling file writing on the download_thread_.
416 DownloadFileManager* file_manager_; 429 DownloadFileManager* file_manager_;
417 430
418 // Non-owning pointer for updating the download status. 431 // Non-owning pointer for updating the download status.
419 base::WeakPtr<DownloadStatusUpdater> status_updater_; 432 base::WeakPtr<DownloadStatusUpdater> status_updater_;
420 433
421 // The user's last choice for download directory. This is only used when the 434 // The user's last choice for download directory. This is only used when the
422 // user wants us to prompt for a save location for each download. 435 // user wants us to prompt for a save location for each download.
423 FilePath last_download_path_; 436 FilePath last_download_path_;
424 437
438 // Download Id for next Save Page.
439 int32 next_save_page_id_;
440
425 scoped_ptr<OtherDownloadManagerObserver> other_download_manager_observer_; 441 scoped_ptr<OtherDownloadManagerObserver> other_download_manager_observer_;
426 442
427 // Allows an embedder to control behavior. Guaranteed to outlive this object. 443 // Allows an embedder to control behavior. Guaranteed to outlive this object.
428 DownloadManagerDelegate* delegate_; 444 DownloadManagerDelegate* delegate_;
429 445
430 DISALLOW_COPY_AND_ASSIGN(DownloadManager); 446 DISALLOW_COPY_AND_ASSIGN(DownloadManager);
431 }; 447 };
432 448
433 #endif // CHROME_BROWSER_DOWNLOAD_DOWNLOAD_MANAGER_H_ 449 #endif // CHROME_BROWSER_DOWNLOAD_DOWNLOAD_MANAGER_H_
OLDNEW
« no previous file with comments | « chrome/browser/download/download_item.cc ('k') | chrome/browser/download/download_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698