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

Unified Diff: chrome/browser/download/download_manager.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: Remove PathServiceWrapper and add DefaultDownloadDirectory 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_manager.cc
diff --git a/chrome/browser/download/download_manager.cc b/chrome/browser/download/download_manager.cc
index 58090f2d492e18f00c5dc16dca08589f9e43e6e1..8d26a29c04fcb3369ac6546cd2be3ffd621a0cee 100644
--- a/chrome/browser/download/download_manager.cc
+++ b/chrome/browser/download/download_manager.cc
@@ -8,7 +8,6 @@
#include "base/file_util.h"
#include "base/i18n/case_conversion.h"
#include "base/logging.h"
-#include "base/path_service.h"
#include "base/rand_util.h"
#include "base/stl_util-inl.h"
#include "base/stringprintf.h"
@@ -368,20 +367,27 @@ void DownloadManager::CheckIfSuggestedPathExists(int32 download_id,
const FilePath& default_path) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
- // Make sure the default download directory exists.
- // TODO(phajdan.jr): only create the directory when we're sure the user
- // is going to save there and not to another directory of his choice.
- file_util::CreateDirectory(default_path);
-
// Check writability of the suggested path. If we can't write to it, default
- // to the user's "My Documents" directory. We'll prompt them in this case.
+ // to the user's "Downloads" directory. We'll prompt them in this case.
FilePath dir = state.suggested_path.DirName();
FilePath filename = state.suggested_path.BaseName();
if (!file_util::PathIsWritable(dir)) {
VLOG(1) << "Unable to write to directory \"" << dir.value() << "\"";
state.prompt_user_for_save_location = true;
- PathService::Get(chrome::DIR_USER_DOCUMENTS, &state.suggested_path);
- state.suggested_path = state.suggested_path.Append(filename);
+ if (!download_util::DefaultDownloadDirectory::Get(&state.suggested_path) ||
+ !file_util::PathIsWritable(state.suggested_path)) {
+ VLOG(1) << "Cannot find the user's writable \"Downloads\" folder.";
+ // If the user's writable "Downloads" folder does not exist, use the
+ // originally suggested path even if the path does not exist
+ // (This is a rare case).
+ state.suggested_path = dir.Append(filename);
+ } else {
+ state.suggested_path = state.suggested_path.Append(filename);
+ }
+ // Make sure that the folder does exist.
+ if (!file_util::CreateDirectory(state.suggested_path.DirName()))
Paweł Hajdan Jr. 2011/06/08 09:50:23 nit: Please use braces {} for multi-line "if" body
haraken1 2011/06/09 10:16:56 Done.
+ LOG(ERROR) << "Failed to create " <<
Paweł Hajdan Jr. 2011/06/08 09:50:23 Logging the error is fine, but shouldn't we exit a
Randy Smith (Not in Mondays) 2011/06/08 22:31:18 I'm inclined to think that the right behavior is t
haraken1 2011/06/09 10:16:56 I would like to agree with Randy's idea, also cons
+ state.suggested_path.DirName().value();
}
// If the download is deemed dangerous, we'll use a temporary name for it.
@@ -495,7 +501,7 @@ void DownloadManager::OnPathExistenceAvailable(int32 download_id,
contents, owning_window,
reinterpret_cast<void*>(id_ptr));
FOR_EACH_OBSERVER(Observer, observers_,
- SelectFileDialogDisplayed(download_id));
+ SelectFileDialogDisplayed(download_id, suggested_path));
} else {
// No prompting for download, just continue with the suggested name.
ContinueDownloadWithPath(download, suggested_path);

Powered by Google App Engine
This is Rietveld 408576698