summaryrefslogtreecommitdiffstats
path: root/chrome/browser/download
diff options
context:
space:
mode:
authorphajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-13 22:25:01 +0000
committerphajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-13 22:25:01 +0000
commita67276686e5149796a96347accb1eba97d63b204 (patch)
tree6b010432976b6f8f77b7a60439c4976423bb3fe7 /chrome/browser/download
parent96a564be16954f1779eee2904a85266d678145c4 (diff)
downloadchromium_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.cc5
-rw-r--r--chrome/browser/download/download_file.h2
-rw-r--r--chrome/browser/download/download_file_manager.cc14
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;
}
}