diff options
author | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-19 23:42:01 +0000 |
---|---|---|
committer | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-19 23:42:01 +0000 |
commit | e7557f174361a743cad821e0828e8df77d9ac199 (patch) | |
tree | 33af40724a4492a1ac1c3b95701a079c1c724662 | |
parent | 2ccf45c50fad0f2c3c20d95eef6d0040b565b291 (diff) | |
download | chromium_src-e7557f174361a743cad821e0828e8df77d9ac199.zip chromium_src-e7557f174361a743cad821e0828e8df77d9ac199.tar.gz chromium_src-e7557f174361a743cad821e0828e8df77d9ac199.tar.bz2 |
Move DownloadPrefs ownership to chrome layer.
BUG=82782
Review URL: http://codereview.chromium.org/7693003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@97537 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/automation/testing_automation_provider.cc | 6 | ||||
-rw-r--r-- | chrome/browser/download/chrome_download_manager_delegate.cc | 18 | ||||
-rw-r--r-- | chrome/browser/download/chrome_download_manager_delegate.h | 10 | ||||
-rw-r--r-- | chrome/browser/download/download_browsertest.cc | 9 | ||||
-rw-r--r-- | chrome/browser/download/download_manager_unittest.cc | 8 | ||||
-rw-r--r-- | chrome/browser/download/download_prefs.cc | 10 | ||||
-rw-r--r-- | chrome/browser/download/download_prefs.h | 4 | ||||
-rw-r--r-- | chrome/browser/download/download_shelf_context_menu.cc | 4 | ||||
-rw-r--r-- | chrome/browser/download/save_package_file_picker.cc | 5 | ||||
-rw-r--r-- | chrome/browser/download/save_package_file_picker.h | 4 | ||||
-rw-r--r-- | chrome/browser/profiles/profile.cc | 2 | ||||
-rw-r--r-- | chrome/browser/profiles/profile_impl.cc | 2 | ||||
-rw-r--r-- | chrome/browser/ui/webui/downloads_dom_handler.cc | 3 | ||||
-rw-r--r-- | chrome/browser/ui/webui/options/advanced_options_handler.cc | 5 | ||||
-rw-r--r-- | content/browser/download/download_manager.cc | 6 | ||||
-rw-r--r-- | content/browser/download/download_manager.h | 5 |
16 files changed, 61 insertions, 40 deletions
diff --git a/chrome/browser/automation/testing_automation_provider.cc b/chrome/browser/automation/testing_automation_provider.cc index 0c36efc..48cc884 100644 --- a/chrome/browser/automation/testing_automation_provider.cc +++ b/chrome/browser/automation/testing_automation_provider.cc @@ -1349,7 +1349,8 @@ void TestingAutomationProvider::GetDownloadDirectory( if (tab_tracker_->ContainsHandle(handle)) { NavigationController* tab = tab_tracker_->GetResource(handle); DownloadManager* dlm = tab->browser_context()->GetDownloadManager(); - *download_directory = dlm->download_prefs()->download_path(); + *download_directory = + DownloadPrefs::FromDownloadManager(dlm)->download_path(); } } @@ -3019,7 +3020,8 @@ void TestingAutomationProvider::PerformActionOnDownload( this, reply_message, true)); selected_item->OpenDownload(); } else if (action == "toggle_open_files_like_this") { - DownloadPrefs* prefs = selected_item->download_manager()->download_prefs(); + DownloadPrefs* prefs = + DownloadPrefs::FromDownloadManager(selected_item->download_manager()); FilePath path = selected_item->GetUserVerifiedFilePath(); if (!selected_item->ShouldOpenFileBasedOnExtension()) prefs->EnableAutoOpenBasedOnExtension(path); diff --git a/chrome/browser/download/chrome_download_manager_delegate.cc b/chrome/browser/download/chrome_download_manager_delegate.cc index 0ec4677..cc36da4 100644 --- a/chrome/browser/download/chrome_download_manager_delegate.cc +++ b/chrome/browser/download/chrome_download_manager_delegate.cc @@ -34,7 +34,8 @@ #include "grit/generated_resources.h" #include "ui/base/l10n/l10n_util.h" -ChromeDownloadManagerDelegate::ChromeDownloadManagerDelegate() { +ChromeDownloadManagerDelegate::ChromeDownloadManagerDelegate(Profile* profile) + : download_prefs_(new DownloadPrefs(profile->GetPrefs())) { } ChromeDownloadManagerDelegate::~ChromeDownloadManagerDelegate() { @@ -96,8 +97,7 @@ bool ChromeDownloadManagerDelegate::ShouldOpenFileBasedOnExtension( return false; DCHECK(extension[0] == FilePath::kExtensionSeparator); extension.erase(0, 1); - return download_manager_->download_prefs()-> - IsAutoOpenEnabledForExtension(extension); + return download_prefs_->IsAutoOpenEnabledForExtension(extension); } bool ChromeDownloadManagerDelegate::GenerateFileHash() { @@ -141,7 +141,8 @@ void ChromeDownloadManagerDelegate::ChooseSavePath( bool can_save_as_complete) { // Deletes itself. new SavePackageFilePicker( - save_package, suggested_path, can_save_as_complete); + save_package, suggested_path, can_save_as_complete, + download_prefs_.get()); } void ChromeDownloadManagerDelegate::DownloadProgressUpdated() { @@ -205,7 +206,7 @@ void ChromeDownloadManagerDelegate::CheckVisitedReferrerBeforeDone( // Freeze the user's preference for showing a Save As dialog. We're going // to bounce around a bunch of threads and we don't want to worry about race // conditions where the user changes this pref out from under us. - if (download_manager_->download_prefs()->PromptForDownload()) { + if (download_prefs_->PromptForDownload()) { // But ignore the user's preference for the following scenarios: // 1) Extension installation. Note that we only care here about the case // where an extension is installed, not when one is downloaded with @@ -216,7 +217,7 @@ void ChromeDownloadManagerDelegate::CheckVisitedReferrerBeforeDone( !ShouldOpenFileBasedOnExtension(generated_name)) state.prompt_user_for_save_location = true; } - if (download_manager_->download_prefs()->IsDownloadPathManaged()) { + if (download_prefs_->IsDownloadPathManaged()) { state.prompt_user_for_save_location = false; } @@ -227,8 +228,7 @@ void ChromeDownloadManagerDelegate::CheckVisitedReferrerBeforeDone( !download_manager_->last_download_path().empty()) { state.suggested_path = download_manager_->last_download_path(); } else { - state.suggested_path = - download_manager_->download_prefs()->download_path(); + state.suggested_path = download_prefs_->download_path(); } state.suggested_path = state.suggested_path.Append(generated_name); } else { @@ -251,7 +251,7 @@ void ChromeDownloadManagerDelegate::CheckVisitedReferrerBeforeDone( &ChromeDownloadManagerDelegate::CheckIfSuggestedPathExists, download->id(), state, - download_manager_->download_prefs()->download_path())); + download_prefs_->download_path())); } void ChromeDownloadManagerDelegate::CheckIfSuggestedPathExists( diff --git a/chrome/browser/download/chrome_download_manager_delegate.h b/chrome/browser/download/chrome_download_manager_delegate.h index 7e4aeb4..23056b2 100644 --- a/chrome/browser/download/chrome_download_manager_delegate.h +++ b/chrome/browser/download/chrome_download_manager_delegate.h @@ -8,19 +8,22 @@ #include "base/compiler_specific.h" #include "base/memory/ref_counted.h" +#include "base/memory/scoped_ptr.h" #include "base/task.h" #include "content/browser/download/download_manager_delegate.h" class DownloadItem; class DownloadManager; +class DownloadPrefs; +class Profile; struct DownloadStateInfo; -// Browser's download manager: manages all downloads and destination view. +// This is the Chrome side helper for the download system. class ChromeDownloadManagerDelegate : public base::RefCountedThreadSafe<ChromeDownloadManagerDelegate>, public DownloadManagerDelegate { public: - ChromeDownloadManagerDelegate(); + explicit ChromeDownloadManagerDelegate(Profile* profile); virtual bool ShouldStartDownload(int32 download_id) OVERRIDE; virtual void ChooseDownloadPath(TabContents* tab_contents, @@ -39,6 +42,8 @@ class ChromeDownloadManagerDelegate void set_download_manager(DownloadManager* dm) { download_manager_ = dm; } + DownloadPrefs* download_prefs() { return download_prefs_.get(); } + private: friend class base::RefCountedThreadSafe<ChromeDownloadManagerDelegate>; virtual ~ChromeDownloadManagerDelegate(); @@ -72,6 +77,7 @@ class ChromeDownloadManagerDelegate bool visited_referrer_before); scoped_refptr<DownloadManager> download_manager_; + scoped_ptr<DownloadPrefs> download_prefs_; DISALLOW_COPY_AND_ASSIGN(ChromeDownloadManagerDelegate); }; diff --git a/chrome/browser/download/download_browsertest.cc b/chrome/browser/download/download_browsertest.cc index 19e0114..eafe820 100644 --- a/chrome/browser/download/download_browsertest.cc +++ b/chrome/browser/download/download_browsertest.cc @@ -525,7 +525,7 @@ class DownloadTest : public InProcessBrowserTest { prompt_for_download); DownloadManager* manager = browser()->profile()->GetDownloadManager(); - manager->download_prefs()->ResetAutoOpen(); + DownloadPrefs::FromDownloadManager(manager)->ResetAutoOpen(); manager->RemoveAllDownloads(); return true; @@ -567,13 +567,12 @@ class DownloadTest : public InProcessBrowserTest { } DownloadPrefs* GetDownloadPrefs(Browser* browser) { - return browser->profile()->GetDownloadManager()->download_prefs(); + return DownloadPrefs::FromDownloadManager( + browser->profile()->GetDownloadManager()); } FilePath GetDownloadDirectory(Browser* browser) { - DownloadManager* download_mananger = - browser->profile()->GetDownloadManager(); - return download_mananger->download_prefs()->download_path(); + return GetDownloadPrefs(browser)->download_path(); } // Create a DownloadsObserver that will wait for the diff --git a/chrome/browser/download/download_manager_unittest.cc b/chrome/browser/download/download_manager_unittest.cc index 8bcfde1..101db74 100644 --- a/chrome/browser/download/download_manager_unittest.cc +++ b/chrome/browser/download/download_manager_unittest.cc @@ -44,7 +44,8 @@ class DownloadManagerTest : public TestingBrowserProcessTest { DownloadManagerTest() : profile_(new TestingProfile()), - download_manager_delegate_(new ChromeDownloadManagerDelegate()), + download_manager_delegate_(new ChromeDownloadManagerDelegate( + profile_.get())), download_manager_(new MockDownloadManager( download_manager_delegate_, &download_status_updater_)), ui_thread_(BrowserThread::UI, &message_loop_), @@ -58,6 +59,7 @@ class DownloadManagerTest : public TestingBrowserProcessTest { // profile_ must outlive download_manager_, so we explicitly delete // download_manager_ first. download_manager_ = NULL; + download_manager_delegate_ = NULL; profile_.reset(NULL); message_loop_.RunAllPending(); } @@ -300,7 +302,9 @@ TEST_F(DownloadManagerTest, StartDownload) { BrowserThread io_thread(BrowserThread::IO, &message_loop_); PrefService* prefs = profile_->GetPrefs(); prefs->SetFilePath(prefs::kDownloadDefaultDirectory, FilePath()); - download_manager_->download_prefs()->EnableAutoOpenBasedOnExtension( + DownloadPrefs* download_prefs = + DownloadPrefs::FromDownloadManager(download_manager_); + download_prefs->EnableAutoOpenBasedOnExtension( FilePath(FILE_PATH_LITERAL("example.pdf"))); for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kStartDownloadCases); ++i) { diff --git a/chrome/browser/download/download_prefs.cc b/chrome/browser/download/download_prefs.cc index 01202d8..e037012 100644 --- a/chrome/browser/download/download_prefs.cc +++ b/chrome/browser/download/download_prefs.cc @@ -10,11 +10,13 @@ #include "base/string_util.h" #include "base/sys_string_conversions.h" #include "base/utf_string_conversions.h" +#include "chrome/browser/download/chrome_download_manager_delegate.h" #include "chrome/browser/download/download_extensions.h" #include "chrome/browser/download/download_util.h" #include "chrome/browser/prefs/pref_service.h" #include "chrome/common/pref_names.h" #include "content/browser/browser_thread.h" +#include "content/browser/download/download_manager.h" #include "content/browser/download/save_package.h" DownloadPrefs::DownloadPrefs(PrefService* prefs) : prefs_(prefs) { @@ -88,6 +90,14 @@ void DownloadPrefs::RegisterUserPrefs(PrefService* prefs) { } } +// static +DownloadPrefs* DownloadPrefs::FromDownloadManager( + DownloadManager* download_manager) { + ChromeDownloadManagerDelegate* delegate = + static_cast<ChromeDownloadManagerDelegate*>(download_manager->delegate()); + return delegate->download_prefs(); +} + bool DownloadPrefs::PromptForDownload() const { // If the DownloadDirectory policy is set, then |prompt_for_download_| should // always be false. diff --git a/chrome/browser/download/download_prefs.h b/chrome/browser/download/download_prefs.h index cd7bad4..848db7a 100644 --- a/chrome/browser/download/download_prefs.h +++ b/chrome/browser/download/download_prefs.h @@ -11,6 +11,7 @@ #include "base/file_path.h" #include "chrome/browser/prefs/pref_member.h" +class DownloadManager; class PrefService; // Stores all download-related preferences. @@ -21,6 +22,9 @@ class DownloadPrefs { static void RegisterUserPrefs(PrefService* prefs); + // Returns the DownloadPrefs corresponding to the given DownloadManager. + static DownloadPrefs* FromDownloadManager(DownloadManager* download_manager); + FilePath download_path() const { return *download_path_; } int save_file_type() const { return *save_file_type_; } diff --git a/chrome/browser/download/download_shelf_context_menu.cc b/chrome/browser/download/download_shelf_context_menu.cc index f5e50b9..bfdbcf2 100644 --- a/chrome/browser/download/download_shelf_context_menu.cc +++ b/chrome/browser/download/download_shelf_context_menu.cc @@ -61,8 +61,8 @@ void DownloadShelfContextMenu::ExecuteCommand(int command_id) { download_item_->OpenDownload(); break; case ALWAYS_OPEN_TYPE: { - DownloadPrefs* prefs = - download_item_->download_manager()->download_prefs(); + DownloadPrefs* prefs = DownloadPrefs::FromDownloadManager( + download_item_->download_manager()); FilePath path = download_item_->GetUserVerifiedFilePath(); if (!IsCommandIdChecked(ALWAYS_OPEN_TYPE)) prefs->EnableAutoOpenBasedOnExtension(path); diff --git a/chrome/browser/download/save_package_file_picker.cc b/chrome/browser/download/save_package_file_picker.cc index a3df356..a4f41588 100644 --- a/chrome/browser/download/save_package_file_picker.cc +++ b/chrome/browser/download/save_package_file_picker.cc @@ -54,10 +54,9 @@ const int kIndexToIDS[] = { SavePackageFilePicker::SavePackageFilePicker( const base::WeakPtr<SavePackage>& save_package, const FilePath& suggested_path, - bool can_save_as_complete) + bool can_save_as_complete, + DownloadPrefs* download_prefs) : save_package_(save_package) { - DownloadPrefs* download_prefs = save_package->tab_contents()-> - browser_context()->GetDownloadManager()->download_prefs(); int file_type_index = SavePackageTypeToIndex( static_cast<SavePackage::SavePackageType>( download_prefs->save_file_type())); diff --git a/chrome/browser/download/save_package_file_picker.h b/chrome/browser/download/save_package_file_picker.h index aa0c830..e090ed3 100644 --- a/chrome/browser/download/save_package_file_picker.h +++ b/chrome/browser/download/save_package_file_picker.h @@ -10,6 +10,7 @@ #include "base/memory/weak_ptr.h" #include "chrome/browser/ui/shell_dialogs.h" +class DownloadPrefs; class FilePath; class SavePackage; @@ -18,7 +19,8 @@ class SavePackageFilePicker : public SelectFileDialog::Listener { public: SavePackageFilePicker(const base::WeakPtr<SavePackage>& save_package, const FilePath& suggested_path, - bool can_save_as_complete); + bool can_save_as_complete, + DownloadPrefs* download_prefs); virtual ~SavePackageFilePicker(); // Used to disable prompting the user for a directory/filename of the saved diff --git a/chrome/browser/profiles/profile.cc b/chrome/browser/profiles/profile.cc index 6020735..5a03192 100644 --- a/chrome/browser/profiles/profile.cc +++ b/chrome/browser/profiles/profile.cc @@ -464,7 +464,7 @@ class OffTheRecordProfileImpl : public Profile, virtual DownloadManager* GetDownloadManager() { if (!download_manager_.get()) { - download_manager_delegate_ = new ChromeDownloadManagerDelegate(); + download_manager_delegate_ = new ChromeDownloadManagerDelegate(this); scoped_refptr<DownloadManager> dlm( new DownloadManager(download_manager_delegate_, g_browser_process->download_status_updater())); diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc index f838d08..b8b89a8 100644 --- a/chrome/browser/profiles/profile_impl.cc +++ b/chrome/browser/profiles/profile_impl.cc @@ -1251,7 +1251,7 @@ void ProfileImpl::CreatePasswordStore() { DownloadManager* ProfileImpl::GetDownloadManager() { if (!created_download_manager_) { - download_manager_delegate_= new ChromeDownloadManagerDelegate(); + download_manager_delegate_= new ChromeDownloadManagerDelegate(this); scoped_refptr<DownloadManager> dlm( new DownloadManager(download_manager_delegate_, g_browser_process->download_status_updater())); diff --git a/chrome/browser/ui/webui/downloads_dom_handler.cc b/chrome/browser/ui/webui/downloads_dom_handler.cc index a48e818..61ba8b2 100644 --- a/chrome/browser/ui/webui/downloads_dom_handler.cc +++ b/chrome/browser/ui/webui/downloads_dom_handler.cc @@ -232,7 +232,8 @@ void DownloadsDOMHandler::HandleClearAll(const ListValue* args) { } void DownloadsDOMHandler::HandleOpenDownloadsFolder(const ListValue* args) { - FilePath path = download_manager_->download_prefs()->download_path(); + FilePath path = DownloadPrefs::FromDownloadManager(download_manager_)-> + download_path(); #if defined(OS_MACOSX) // Must be called from the UI thread on Mac. diff --git a/chrome/browser/ui/webui/options/advanced_options_handler.cc b/chrome/browser/ui/webui/options/advanced_options_handler.cc index 501df48..780512b 100644 --- a/chrome/browser/ui/webui/options/advanced_options_handler.cc +++ b/chrome/browser/ui/webui/options/advanced_options_handler.cc @@ -384,7 +384,7 @@ void AdvancedOptionsHandler::HandleAutoOpenButton(const ListValue* args) { DownloadManager* manager = web_ui_->tab_contents()->browser_context()->GetDownloadManager(); if (manager) - manager->download_prefs()->ResetAutoOpen(); + DownloadPrefs::FromDownloadManager(manager)->ResetAutoOpen(); } void AdvancedOptionsHandler::HandleMetricsReportingCheckbox( @@ -608,7 +608,8 @@ void AdvancedOptionsHandler::SetupAutoOpenFileTypesDisabledAttribute() { // We enable the button if the user has any auto-open file types registered. DownloadManager* manager = web_ui_->tab_contents()->browser_context()->GetDownloadManager(); - bool disabled = !(manager && manager->download_prefs()->IsAutoOpenUsed()); + bool disabled = !(manager && + DownloadPrefs::FromDownloadManager(manager)->IsAutoOpenUsed()); base::FundamentalValue value(disabled); web_ui_->CallJavascriptFunction( "options.AdvancedOptions.SetAutoOpenFileTypesDisabledAttribute", value); diff --git a/content/browser/download/download_manager.cc b/content/browser/download/download_manager.cc index f84742c..c6e5ea6 100644 --- a/content/browser/download/download_manager.cc +++ b/content/browser/download/download_manager.cc @@ -4,6 +4,8 @@ #include "content/browser/download/download_manager.h" +#include <iterator> + #include "base/callback.h" #include "base/file_util.h" #include "base/i18n/case_conversion.h" @@ -12,7 +14,6 @@ #include "base/task.h" #include "build/build_config.h" #include "chrome/browser/download/download_history.h" -#include "chrome/browser/download/download_prefs.h" #include "chrome/browser/download/download_util.h" #include "chrome/browser/history/download_history_info.h" #include "chrome/browser/profiles/profile.h" @@ -135,7 +136,6 @@ void DownloadManager::Shutdown() { file_manager_ = NULL; download_history_.reset(); - download_prefs_.reset(); shutdown_needed_ = false; } @@ -233,8 +233,6 @@ bool DownloadManager::Init(Profile* profile) { download_history_->Load( NewCallback(this, &DownloadManager::OnQueryDownloadEntriesComplete)); - download_prefs_.reset(new DownloadPrefs(profile_->GetPrefs())); - // In test mode, there may be no ResourceDispatcherHost. In this case it's // safe to avoid setting |file_manager_| because we only call a small set of // functions, none of which need it. diff --git a/content/browser/download/download_manager.h b/content/browser/download/download_manager.h index 7ea1ebe..409d91d 100644 --- a/content/browser/download/download_manager.h +++ b/content/browser/download/download_manager.h @@ -50,7 +50,6 @@ class DownloadFileManager; class DownloadHistory; class DownloadManagerDelegate; -class DownloadPrefs; class DownloadStatusUpdater; class GURL; class Profile; @@ -200,8 +199,6 @@ class DownloadManager DownloadHistory* download_history() { return download_history_.get(); } - DownloadPrefs* download_prefs() { return download_prefs_.get(); } - FilePath last_download_path() { return last_download_path_; } // Creates the download item. Must be called on the UI thread. @@ -392,8 +389,6 @@ class DownloadManager scoped_ptr<DownloadHistory> download_history_; - scoped_ptr<DownloadPrefs> download_prefs_; - // Non-owning pointer for handling file writing on the download_thread_. DownloadFileManager* file_manager_; |