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 { |