| 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..ff08c0f4cf01e4949bd47040c03d4bb1ff39e449 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,14 @@ void DownloadPrefs::ResetAutoOpen() {
|
| SaveAutoOpenState();
|
| }
|
|
|
| +FilePath DownloadPrefs::GetDefaultDownloadDirectory() {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| +
|
| + 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 +161,30 @@ void DownloadPrefs::SaveAutoOpenState() {
|
| prefs_->SetString(prefs::kDownloadExtensionsToOpen, extensions);
|
| }
|
|
|
| +void DownloadPrefs::OverrideDefaultDownloadDirectory(
|
| + const FilePath& override_default_download_dir) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| +
|
| + // Duplicate overriding is not allowed.
|
| + DCHECK(override_default_download_dir_.empty());
|
| +
|
| + 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 {
|
|
|