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

Unified Diff: chrome/browser/download/download_manager.h

Issue 7294013: Modified cancel and interrupt processing to avoid race with history. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/download/download_manager.h
diff --git a/chrome/browser/download/download_manager.h b/chrome/browser/download/download_manager.h
index a9ddefa878834a0c1b4715e01354c48ff33712f7..b673925e4c61ddb64c7eaae6ab82da9cbe971a77 100644
--- a/chrome/browser/download/download_manager.h
+++ b/chrome/browser/download/download_manager.h
@@ -122,9 +122,19 @@ class DownloadManager
void OnResponseCompleted(int32 download_id, int64 size, int os_error,
const std::string& hash);
- // Called from a view when a user clicks a UI button or link.
- void DownloadCancelled(int32 download_id);
- void RemoveDownload(int64 download_handle);
+ // Called to initiate download cancel on behalf of an off-thread portion
+ // of the download system; redirects to DownloadItem.
+ void CancelDownload(int32 download_handle);
+
+ // This routine is called from the DownloadItem when a
+ // request is cancelled or interrupted. It removes the download
+ // from all internal queues, and takes care of the off-thread aspects
Randy Smith (Not in Mondays) 2011/06/30 23:05:13 Not all internal queues, just the ones representin
Randy Smith (Not in Mondays) 2011/07/05 20:28:44 Done.
+ // of the cancel (stopping the request, cancelling the download on
+ // the file thread).
+ void DownloadStopped(int32 download_id);
+
+ // Called from DownloadItem when the download is being removed.
Randy Smith (Not in Mondays) 2011/06/30 23:05:13 A bit more detail as to what it does.
Randy Smith (Not in Mondays) 2011/07/05 20:28:44 Done.
+ void RemoveDownload(DownloadItem* download);
// Determine if the download is ready for completion, i.e. has had
// all data saved, and completed the filename determination and
@@ -266,10 +276,6 @@ class DownloadManager
DownloadItem* GetDownloadItem(int id);
private:
- // For testing.
- friend class DownloadManagerTest;
- friend class MockDownloadManager;
-
// This class is used to let an incognito DownloadManager observe changes to
// a normal DownloadManager, to propagate ModelChanged() calls from the parent
// DownloadManager to the observers of the incognito DownloadManager.
@@ -295,6 +301,13 @@ class DownloadManager
friend class DeleteTask<DownloadManager>;
friend class OtherDownloadManagerObserver;
+ // For testing.
+ friend class DownloadManagerTest;
+ friend class MockDownloadManager;
+ FRIEND_TEST_ALL_PREFIXES(DownloadTest, CancelFromFileSelection);
+ FRIEND_TEST_ALL_PREFIXES(DownloadTest, RemoveFromFileSelection);
+ FRIEND_TEST_ALL_PREFIXES(DownloadTest, InterruptFromFileSelection);
+
virtual ~DownloadManager();
// Called on the FILE thread to check the existence of a downloaded file.
@@ -323,12 +336,6 @@ class DownloadManager
void ContinueDownloadWithPath(DownloadItem* download,
const FilePath& chosen_file);
- // Download cancel helper function.
- // |request_handle| is passed by value because it is ultimately passed to
- // other threads, and this way we don't have to worry about object lifetimes.
- void DownloadCancelledInternal(int download_id,
- DownloadRequestHandle request_handle);
-
// All data has been downloaded.
// |hash| is sha256 hash for the downloaded file. It is empty when the hash
// is not available.
@@ -343,6 +350,12 @@ class DownloadManager
// Inform observers that the model has changed.
void NotifyModelChanged();
+ // Return all in progress downloads. This includes downloads that
+ // have not yet been entered into the history (all other accessors
+ // only return downloads that have been entered into the history).
+ // This is intended to be used for testing only.
+ void GetInProgressDownloads(std::vector<DownloadItem*>* result);
+
// Get the download item from the active map. Useful when the item is not
// yet in the history map.
DownloadItem* GetActiveDownloadItem(int id);

Powered by Google App Engine
This is Rietveld 408576698