Chromium Code Reviews| 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..18514a6a3ac4720189d3373f13b3b10329c5a1b4 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" |
| @@ -363,30 +362,24 @@ void DownloadManager::CheckVisitedReferrerBeforeDone( |
| download_prefs()->download_path())); |
| } |
| -void DownloadManager::CheckIfSuggestedPathExists(int32 download_id, |
| - DownloadStateInfo state, |
| - const FilePath& default_path) { |
| +void DownloadManager::CheckIfSuggestedPathExists( |
| + int32 download_id, |
| + DownloadStateInfo state, |
| + const FilePath& download_save_dir) { |
| 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. |
| - 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); |
| - } |
| + FilePath default_downloads_dir = |
| + download_util::DefaultDownloadDirectory::Get(); |
| + |
| + FilePath save_dir; |
| + state.prompt_user_for_save_location = |
| + download_util::ChooseSavableDirectory( |
| + FilePath(), download_save_dir, default_downloads_dir, &save_dir); |
|
haraken1
2011/06/14 11:10:05
Note: This was wrong... If |state.prompt_user_for_
|
| + state.suggested_path = save_dir.Append(state.suggested_path.BaseName()); |
| // If the download is deemed dangerous, we'll use a temporary name for it. |
| if (state.IsDangerous()) { |
| - state.target_name = FilePath(state.suggested_path).BaseName(); |
| + state.target_name = state.suggested_path.BaseName(); |
| // Create a temporary file to hold the file until the user approves its |
| // download. |
| FilePath::StringType file_name; |
| @@ -405,7 +398,7 @@ void DownloadManager::CheckIfSuggestedPathExists(int32 download_id, |
| unconfirmed_prefix.append( |
| FILE_PATH_LITERAL(" %d.crdownload")).c_str(), |
| base::RandInt(0, 100000)); |
| - path = dir.Append(file_name); |
| + path = state.suggested_path.DirName().Append(file_name); |
| if (file_util::PathExists(path)) |
| path = FilePath(); |
| } |
| @@ -495,7 +488,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); |