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

Unified Diff: chrome/browser/download/download_item.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: Fixed various problems surfaced by trybots. Created 9 years, 5 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_item.h
diff --git a/chrome/browser/download/download_item.h b/chrome/browser/download/download_item.h
index c22a5bf47a64edfc1b9018259bbbf7c46d5e23a2..01b858f1c6a0cc4441e2ede1b416499183d715f2 100644
--- a/chrome/browser/download/download_item.h
+++ b/chrome/browser/download/download_item.h
@@ -163,16 +163,11 @@ class DownloadItem : public NotificationObserver {
// Received a new chunk of data
void Update(int64 bytes_so_far);
- // Cancel the download operation. We need to distinguish between cancels at
- // exit (DownloadManager destructor) from user interface initiated cancels
- // because at exit, the history system may not exist, and any updates to it
- // require AddRef'ing the DownloadManager in the destructor which results in
- // a DCHECK failure. Set 'update_history' to false when canceling from at
- // exit to prevent this crash. This may result in a difference between the
- // downloaded file's size on disk, and what the history system's last record
- // of it is. At worst, we'll end up re-downloading a small portion of the file
- // when resuming a download (assuming the server supports byte ranges).
- void Cancel(bool update_history);
+ // Cancel the download operation. This may be called at any time; if
+ // it is called before all download attributes have been finalized and
+ // the download entered into the history, it will remove the download from
+ // the system.
+ void Cancel();
// Called by external code (SavePackage) using the DownloadItem interface
// to display progress when the DownloadItem should be considered complete.
@@ -184,10 +179,14 @@ class DownloadItem : public NotificationObserver {
// Called when the downloaded file is removed.
void OnDownloadedFileRemoved();
- // Download operation had an error.
+ // Download operation had an error; call to interrupt the processing.
+ // Note that if the download attributes haven't yet been finalized and
+ // the download entered into the history (which implies that it hasn't
+ // yet been made visible in the UI), this call will remove the
+ // download from the system.
// |size| is the amount of data received so far, and |os_error| is the error
// code that the operation received.
- void Interrupted(int64 size, int os_error);
+ void Interrupt(int64 size, int os_error);
// Deletes the file from disk and removes the download from the views and
// history. |user| should be true if this is the result of the user clicking
@@ -353,6 +352,10 @@ class DownloadItem : public NotificationObserver {
// Internal helper for maintaining consistent received and total sizes.
void UpdateSize(int64 size);
+ // Internal function to do the main work of cancelling or
+ // interrupting a download.
+ void StopInternal(DownloadState target_state);
+
// Called when the entire download operation (including renaming etc)
// is completed.
void Completed();

Powered by Google App Engine
This is Rietveld 408576698