diff options
Diffstat (limited to 'chrome/browser/download/download_manager.cc')
-rw-r--r-- | chrome/browser/download/download_manager.cc | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/chrome/browser/download/download_manager.cc b/chrome/browser/download/download_manager.cc index ad9b604..5d503dd 100644 --- a/chrome/browser/download/download_manager.cc +++ b/chrome/browser/download/download_manager.cc @@ -65,18 +65,22 @@ DownloadManager::DownloadManager() } DownloadManager::~DownloadManager() { - FOR_EACH_OBSERVER(Observer, observers_, ManagerGoingDown()); - - if (shutdown_needed_) - Shutdown(); + DCHECK(!shutdown_needed_); } void DownloadManager::Shutdown() { - DCHECK(shutdown_needed_) << "Shutdown called when not needed."; + if (!shutdown_needed_) + return; + shutdown_needed_ = false; - // Stop receiving download updates - if (file_manager_) - file_manager_->RemoveDownloadManager(this); + FOR_EACH_OBSERVER(Observer, observers_, ManagerGoingDown()); + + if (file_manager_) { + ChromeThread::PostTask(ChromeThread::FILE, FROM_HERE, + NewRunnableMethod(file_manager_, + &DownloadFileManager::OnDownloadManagerShutdown, + this)); + } // 'in_progress_' may contain DownloadItems that have not finished the start // complete (from the history service) and thus aren't in downloads_. @@ -662,8 +666,6 @@ void DownloadManager::DownloadCancelledInternal(int download_id, render_process_id, request_id)); - // Tell the file manager to cancel the download. - file_manager_->RemoveDownload(download_id, this); // On the UI thread ChromeThread::PostTask( ChromeThread::FILE, FROM_HERE, NewRunnableMethod( |