| 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)
|
|
|