Index: content/browser/download/drag_download_file.cc |
diff --git a/content/browser/download/drag_download_file.cc b/content/browser/download/drag_download_file.cc |
index 38f0df006494221d4ad5a7df9bfbdb6eecf11a12..2d76e6fb6d517a797c188758ecc507b877e37255 100644 |
--- a/content/browser/download/drag_download_file.cc |
+++ b/content/browser/download/drag_download_file.cc |
@@ -196,8 +196,7 @@ void DragDownloadFile::ModelChanged(DownloadManager* manager) { |
void DragDownloadFile::OnDownloadUpdated(content::DownloadItem* download) { |
AssertCurrentlyOnUIThread(); |
- if (download->IsCancelled() || |
- (download->GetState() == DownloadItem::REMOVING)) { |
+ if (download->IsCancelled()) { |
RemoveObservers(); |
DownloadCompleted(false); |
} else if (download->IsComplete()) { |
@@ -207,6 +206,17 @@ void DragDownloadFile::OnDownloadUpdated(content::DownloadItem* download) { |
// Ignore other states. |
} |
+// If the download completes or is cancelled, then OnDownloadUpdated() will |
+// handle it and RemoveObserver() so that OnDownloadDestroyed is never called. |
+// OnDownloadDestroyed is only called if OnDownloadUpdated() does not detect |
+// completion or cancellation (in which cases it removes this observer). |
+// TODO(benjhayden): Try to change this to NOTREACHED()? |
+void DragDownloadFile::OnDownloadDestroyed(content::DownloadItem* download) { |
+ AssertCurrentlyOnUIThread(); |
+ RemoveObservers(); |
+ DownloadCompleted(false); |
+} |
+ |
void DragDownloadFile::AssertCurrentlyOnDragThread() { |
// Only do the check on Windows where two threads are involved. |
#if defined(OS_WIN) |