| 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..a0584ea2c5a5aa4b665d756ff2d2d620e2bff88c 100644
|
| --- a/chrome/browser/download/download_manager.cc
|
| +++ b/chrome/browser/download/download_manager.cc
|
| @@ -368,20 +368,28 @@ 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 (!PathService::Get(
|
| + chrome::DIR_DEFAULT_DOWNLOADS, &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()))
|
| + LOG(ERROR) << "Failed to create " <<
|
| + state.suggested_path.DirName().value();
|
| }
|
|
|
| // If the download is deemed dangerous, we'll use a temporary name for it.
|
| @@ -495,7 +503,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);
|
|
|