Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3077)

Unified Diff: chrome/browser/download/download_prefs.cc

Issue 6973052: When the download folder does not exist, change the download folder to a user's "Downloads" (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Reflected Pawel's comments Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 {

Powered by Google App Engine
This is Rietveld 408576698