summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-19 23:42:01 +0000
committerjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-19 23:42:01 +0000
commite7557f174361a743cad821e0828e8df77d9ac199 (patch)
tree33af40724a4492a1ac1c3b95701a079c1c724662
parent2ccf45c50fad0f2c3c20d95eef6d0040b565b291 (diff)
downloadchromium_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.cc6
-rw-r--r--chrome/browser/download/chrome_download_manager_delegate.cc18
-rw-r--r--chrome/browser/download/chrome_download_manager_delegate.h10
-rw-r--r--chrome/browser/download/download_browsertest.cc9
-rw-r--r--chrome/browser/download/download_manager_unittest.cc8
-rw-r--r--chrome/browser/download/download_prefs.cc10
-rw-r--r--chrome/browser/download/download_prefs.h4
-rw-r--r--chrome/browser/download/download_shelf_context_menu.cc4
-rw-r--r--chrome/browser/download/save_package_file_picker.cc5
-rw-r--r--chrome/browser/download/save_package_file_picker.h4
-rw-r--r--chrome/browser/profiles/profile.cc2
-rw-r--r--chrome/browser/profiles/profile_impl.cc2
-rw-r--r--chrome/browser/ui/webui/downloads_dom_handler.cc3
-rw-r--r--chrome/browser/ui/webui/options/advanced_options_handler.cc5
-rw-r--r--content/browser/download/download_manager.cc6
-rw-r--r--content/browser/download/download_manager.h5
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_;