summaryrefslogtreecommitdiffstats
path: root/chrome/browser/download/download_service.cc
diff options
context:
space:
mode:
authorjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-06 14:55:57 +0000
committerjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-06 14:55:57 +0000
commitb441a849460cc2fca0ce9a18fe8e255cadc0656c (patch)
tree83610aa4039deac864b88cbc1c3df02b92e004f0 /chrome/browser/download/download_service.cc
parent7a2dbfbf3cfea03bca0cfa79c639e0683dc11569 (diff)
downloadchromium_src-b441a849460cc2fca0ce9a18fe8e255cadc0656c.zip
chromium_src-b441a849460cc2fca0ce9a18fe8e255cadc0656c.tar.gz
chromium_src-b441a849460cc2fca0ce9a18fe8e255cadc0656c.tar.bz2
Move creation and ownership of DownloadManager from the embedder to content. This matches all the other objects that content depends on.
In a followup change, I'll make content support NULL DownloadManagerDelegates to match the rest of the delegate interfaces. BUG=98716 Review URL: https://chromiumcodereview.appspot.com/10535026 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@140761 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/download/download_service.cc')
-rw-r--r--chrome/browser/download/download_service.cc79
1 files changed, 36 insertions, 43 deletions
diff --git a/chrome/browser/download/download_service.cc b/chrome/browser/download/download_service.cc
index 1fd1908..278fac4 100644
--- a/chrome/browser/download/download_service.cc
+++ b/chrome/browser/download/download_service.cc
@@ -14,7 +14,9 @@
#include "chrome/browser/profiles/profile_manager.h"
#include "content/public/browser/download_manager.h"
+using content::BrowserContext;
using content::DownloadManager;
+using content::DownloadManagerDelegate;
DownloadService::DownloadService(Profile* profile)
: download_manager_created_(false),
@@ -25,37 +27,39 @@ DownloadService::~DownloadService() {}
void DownloadService::OnManagerCreated(
const DownloadService::OnManagerCreatedCallback& cb) {
+ DownloadManager* dm = BrowserContext::GetDownloadManager(profile_);
if (download_manager_created_) {
- cb.Run(manager_.get());
+ cb.Run(dm);
} else {
on_manager_created_callbacks_.push_back(cb);
}
}
-DownloadManager* DownloadService::GetDownloadManager() {
- if (!download_manager_created_) {
- // In case the delegate has already been set by
- // SetDownloadManagerDelegateForTesting.
- if (!manager_delegate_.get())
- manager_delegate_ = new ChromeDownloadManagerDelegate(profile_);
- manager_ = DownloadManager::Create(manager_delegate_.get(),
- g_browser_process->net_log());
- manager_->Init(profile_);
- manager_delegate_->SetDownloadManager(manager_);
-
- // Include this download manager in the set monitored by the
- // global status updater.
- g_browser_process->download_status_updater()->AddManager(manager_);
-
- download_manager_created_ = true;
- for (std::vector<OnManagerCreatedCallback>::iterator cb
- = on_manager_created_callbacks_.begin();
- cb != on_manager_created_callbacks_.end(); ++cb) {
- cb->Run(manager_.get());
- }
- on_manager_created_callbacks_.clear();
+DownloadManagerDelegate* DownloadService::GetDownloadManagerDelegate() {
+ DCHECK(!download_manager_created_);
+ download_manager_created_ = true;
+
+ // In case the delegate has already been set by
+ // SetDownloadManagerDelegateForTesting.
+ if (!manager_delegate_.get())
+ manager_delegate_ = new ChromeDownloadManagerDelegate(profile_);
+
+ DownloadManager* dm = BrowserContext::GetDownloadManager(profile_);
+ manager_delegate_->SetDownloadManager(dm);
+
+ // Include this download manager in the set monitored by the
+ // global status updater.
+ g_browser_process->download_status_updater()->AddManager(dm);
+
+ download_manager_created_ = true;
+ for (std::vector<OnManagerCreatedCallback>::iterator cb
+ = on_manager_created_callbacks_.begin();
+ cb != on_manager_created_callbacks_.end(); ++cb) {
+ cb->Run(dm);
}
- return manager_.get();
+ on_manager_created_callbacks_.clear();
+
+ return manager_delegate_.get();
}
bool DownloadService::HasCreatedDownloadManager() {
@@ -63,7 +67,8 @@ bool DownloadService::HasCreatedDownloadManager() {
}
int DownloadService::DownloadCount() const {
- return download_manager_created_ ? manager_->InProgressCount() : 0;
+ DownloadManager* dm = BrowserContext::GetDownloadManager(profile_);
+ return download_manager_created_ ? dm->InProgressCount() : 0;
}
// static
@@ -86,27 +91,15 @@ int DownloadService::DownloadCountAllProfiles() {
void DownloadService::SetDownloadManagerDelegateForTesting(
ChromeDownloadManagerDelegate* new_delegate) {
// Guarantee everything is properly initialized.
- GetDownloadManager();
-
- manager_->SetDownloadManagerDelegate(new_delegate);
- new_delegate->SetDownloadManager(manager_);
+ DownloadManager* dm = BrowserContext::GetDownloadManager(profile_);
+ dm->SetDownloadManagerDelegate(new_delegate);
+ new_delegate->SetDownloadManager(dm);
manager_delegate_ = new_delegate;
}
void DownloadService::Shutdown() {
- if (manager_.get()) {
- manager_->Shutdown();
-
- // The manager reference can be released any time after shutdown;
- // it will be destroyed when the last reference is released on the
- // FILE thread.
- // Resetting here will guarantee that any attempts to get the
- // DownloadManager after shutdown will return null.
- //
- // TODO(rdsmith): Figure out how to guarantee when the last reference
- // will be released and make DownloadManager not RefCountedThreadSafe<>.
- manager_.release();
- }
- if (manager_delegate_.get())
+ if (manager_delegate_.get()) {
+ manager_delegate_->ProfileShutdown();
manager_delegate_.release();
+ }
}