diff options
author | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-09-13 22:25:01 +0000 |
---|---|---|
committer | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-09-13 22:25:01 +0000 |
commit | a67276686e5149796a96347accb1eba97d63b204 (patch) | |
tree | 6b010432976b6f8f77b7a60439c4976423bb3fe7 /chrome/browser/download | |
parent | 96a564be16954f1779eee2904a85266d678145c4 (diff) | |
download | chromium_src-a67276686e5149796a96347accb1eba97d63b204.zip chromium_src-a67276686e5149796a96347accb1eba97d63b204.tar.gz chromium_src-a67276686e5149796a96347accb1eba97d63b204.tar.bz2 |
Regression fix: cancel all downloads when shutting down DownloadManager.
BUG=54823
TEST=see bug
Review URL: http://codereview.chromium.org/3327024
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@59291 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/download')
-rw-r--r-- | chrome/browser/download/download_file.cc | 5 | ||||
-rw-r--r-- | chrome/browser/download/download_file.h | 2 | ||||
-rw-r--r-- | chrome/browser/download/download_file_manager.cc | 14 |
3 files changed, 12 insertions, 9 deletions
diff --git a/chrome/browser/download/download_file.cc b/chrome/browser/download/download_file.cc index 495228d..6bf41c7 100644 --- a/chrome/browser/download/download_file.cc +++ b/chrome/browser/download/download_file.cc @@ -45,11 +45,6 @@ void DownloadFile::CancelDownloadRequest(ResourceDispatcherHost* rdh) { request_id_)); } -void DownloadFile::OnDownloadManagerShutdown() { - DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE)); - download_manager_ = NULL; -} - DownloadManager* DownloadFile::GetDownloadManager() { DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE)); return download_manager_.get(); diff --git a/chrome/browser/download/download_file.h b/chrome/browser/download/download_file.h index 88c0715..46ba40d 100644 --- a/chrome/browser/download/download_file.h +++ b/chrome/browser/download/download_file.h @@ -32,8 +32,6 @@ class DownloadFile : public BaseFile { // Cancels the download request associated with this file. void CancelDownloadRequest(ResourceDispatcherHost* rdh); - void OnDownloadManagerShutdown(); - int id() const { return id_; } DownloadManager* GetDownloadManager(); diff --git a/chrome/browser/download/download_file_manager.cc b/chrome/browser/download/download_file_manager.cc index bbeb10a..fc94314 100644 --- a/chrome/browser/download/download_file_manager.cc +++ b/chrome/browser/download/download_file_manager.cc @@ -255,11 +255,21 @@ void DownloadFileManager::OnDownloadManagerShutdown(DownloadManager* manager) { DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE)); DCHECK(manager); + std::set<DownloadFile*> to_remove; + for (DownloadFileMap::iterator i = downloads_.begin(); i != downloads_.end(); ++i) { DownloadFile* download_file = i->second; - if (download_file->GetDownloadManager() == manager) - download_file->OnDownloadManagerShutdown(); + if (download_file->GetDownloadManager() == manager) { + download_file->CancelDownloadRequest(resource_dispatcher_host_); + to_remove.insert(download_file); + } + } + + for (std::set<DownloadFile*>::iterator i = to_remove.begin(); + i != to_remove.end(); ++i) { + downloads_.erase((*i)->id()); + delete *i; } } |