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..cc6b794ddb03a54ddb33dda0af6a3b3e7c589e8f 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_path_.empty()) |
+ return override_path_; |
+ return download_util::GetDefaultDownloadDirectoryFromPathService(); |
+} |
+ |
void DownloadPrefs::SaveAutoOpenState() { |
std::string extensions; |
for (AutoOpenSet::iterator it = auto_open_.begin(); |
@@ -153,6 +159,33 @@ void DownloadPrefs::SaveAutoOpenState() { |
prefs_->SetString(prefs::kDownloadExtensionsToOpen, extensions); |
} |
+void DownloadPrefs::OverrideDefaultDownloadDirectory( |
+ const FilePath& override_path) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ |
+ FilePath default_download_path = GetDefaultDownloadDirectory(); |
+ if (*download_path_ == default_download_path) { |
+ download_path_.SetValue(override_path); |
Paweł Hajdan Jr.
2011/06/15 09:31:33
Aren't those two lines (SetValue and SetFilePath)
haraken1
2011/06/15 10:39:45
Done. Just SetValue() is OK.
|
+ prefs_->SetFilePath(prefs::kDownloadDefaultDirectory, override_path); |
+ } |
+ |
+ override_path_ = override_path; |
+} |
+ |
+void DownloadPrefs::UnOverrideDefaultDownloadDirectory() { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ |
+ bool overridden = !override_path_.empty(); |
Paweł Hajdan Jr.
2011/06/15 09:31:33
I think we can always assume (DCHECK if needed) th
haraken1
2011/06/15 10:39:45
Done.
|
+ override_path_.clear(); |
+ |
+ if (overridden) { |
Paweł Hajdan Jr.
2011/06/15 09:31:33
For symmetry, shouldn't we only reset the pref to
haraken1
2011/06/15 10:39:45
Done, although I am not sure if it is the fix you
|
+ FilePath default_download_path = GetDefaultDownloadDirectory(); |
+ download_path_.SetValue(default_download_path); |
+ prefs_->SetFilePath(prefs::kDownloadDefaultDirectory, |
+ default_download_path); |
+ } |
+} |
+ |
bool DownloadPrefs::AutoOpenCompareFunctor::operator()( |
const FilePath::StringType& a, |
const FilePath::StringType& b) const { |