Chromium Code Reviews| Index: chrome/browser/download/download_prefs.cc |
| diff --git a/chrome/browser/download/download_prefs.cc b/chrome/browser/download/download_prefs.cc |
| index e9e0b7681d696fe9685943a79cbe45a17994d675..9cd1406d2a7cf16807daca8bcefc45b2d248c389 100644 |
| --- a/chrome/browser/download/download_prefs.cc |
| +++ b/chrome/browser/download/download_prefs.cc |
| @@ -60,18 +60,18 @@ void DownloadPrefs::RegisterUserPrefs(PrefService* prefs) { |
| SavePackage::SAVE_AS_COMPLETE_HTML, |
| PrefService::UNSYNCABLE_PREF); |
| - // The default download path is userprofile\download. |
| - const FilePath& default_download_path = |
| - download_util::GetDefaultDownloadDirectory(); |
| + // The user's default "Downloads" folder. |
| + FilePath default_download_dir = |
| + download_util::GetDefaultDownloadDirectoryFromPathService(); |
| prefs->RegisterFilePathPref(prefs::kDownloadDefaultDirectory, |
| - default_download_path, |
| + default_download_dir, |
| PrefService::UNSYNCABLE_PREF); |
| #if defined(OS_CHROMEOS) |
| // Ensure that the download directory specified in the preferences exists. |
| BrowserThread::PostTask( |
| BrowserThread::FILE, FROM_HERE, |
| - NewRunnableFunction(&file_util::CreateDirectory, default_download_path)); |
| + NewRunnableFunction(&file_util::CreateDirectory, default_download_dir)); |
| #endif // defined(OS_CHROMEOS) |
| // If the download path is dangerous we forcefully reset it. But if we do |
| @@ -82,7 +82,7 @@ void DownloadPrefs::RegisterUserPrefs(PrefService* prefs) { |
| prefs::kDownloadDefaultDirectory); |
| if (download_util::DownloadPathIsDangerous(current_download_dir)) { |
| prefs->SetFilePath(prefs::kDownloadDefaultDirectory, |
| - default_download_path); |
| + default_download_dir); |
| } |
| prefs->SetBoolean(prefs::kDownloadDirUpgraded, true); |
| } |
| @@ -135,6 +135,12 @@ void DownloadPrefs::ResetAutoOpen() { |
| SaveAutoOpenState(); |
| } |
| +FilePath DownloadPrefs::GetDefaultDownloadDirectory() { |
| + if (!override_default_download_dir_.empty()) |
| + return override_default_download_dir_; |
| + return download_util::GetDefaultDownloadDirectoryFromPathService(); |
| +} |
| + |
| void DownloadPrefs::SaveAutoOpenState() { |
| std::string extensions; |
| for (AutoOpenSet::iterator it = auto_open_.begin(); |
| @@ -153,6 +159,27 @@ void DownloadPrefs::SaveAutoOpenState() { |
| prefs_->SetString(prefs::kDownloadExtensionsToOpen, extensions); |
| } |
| +void DownloadPrefs::OverrideDefaultDownloadDirectory( |
|
Randy Smith (Not in Mondays)
2011/06/15 19:48:59
I wince a bit at the behavior of these functions w
Paweł Hajdan Jr.
2011/06/16 17:41:32
A linked list/stack just for this is obviously an
haraken1
2011/06/22 18:01:58
I documented "Duplicate overriding is not allowed.
|
| + const FilePath& override_default_download_dir) { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| + |
| + FilePath default_download_dir = GetDefaultDownloadDirectory(); |
| + if (*download_path_ == default_download_dir) |
| + download_path_.SetValue(override_default_download_dir); |
| + |
| + override_default_download_dir_ = override_default_download_dir; |
| +} |
| + |
| +void DownloadPrefs::UnOverrideDefaultDownloadDirectory() { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| + |
| + DCHECK(!override_default_download_dir_.empty()); |
| + override_default_download_dir_.clear(); |
| + |
| + FilePath default_download_dir = GetDefaultDownloadDirectory(); |
| + download_path_.SetValue(default_download_dir); |
| +} |
| + |
| bool DownloadPrefs::AutoOpenCompareFunctor::operator()( |
| const FilePath::StringType& a, |
| const FilePath::StringType& b) const { |