diff options
author | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-06 14:55:57 +0000 |
---|---|---|
committer | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-06 14:55:57 +0000 |
commit | b441a849460cc2fca0ce9a18fe8e255cadc0656c (patch) | |
tree | 83610aa4039deac864b88cbc1c3df02b92e004f0 /chrome/browser/download/download_service.cc | |
parent | 7a2dbfbf3cfea03bca0cfa79c639e0683dc11569 (diff) | |
download | chromium_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.cc | 79 |
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(); + } } |