diff options
Diffstat (limited to 'content/browser/download/drag_download_file.cc')
-rw-r--r-- | content/browser/download/drag_download_file.cc | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/content/browser/download/drag_download_file.cc b/content/browser/download/drag_download_file.cc index 38f0df0..2d76e6f 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) |