| Index: chrome/browser/download/save_package.cc
|
| diff --git a/chrome/browser/download/save_package.cc b/chrome/browser/download/save_package.cc
|
| index 81bdfcfdfe5a2dd5d252165196836d0e304fa532..fb46624df4f33a182e1cd404fe98132552dc3993 100644
|
| --- a/chrome/browser/download/save_package.cc
|
| +++ b/chrome/browser/download/save_package.cc
|
| @@ -1256,35 +1256,38 @@ FilePath SavePackage::GetSaveDirPreference(PrefService* prefs) {
|
| }
|
|
|
| void SavePackage::GetSaveInfo() {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| +
|
| // Can't use tab_contents_ in the file thread, so get the data that we need
|
| // before calling to it.
|
| PrefService* prefs = tab_contents()->profile()->GetPrefs();
|
| FilePath website_save_dir = GetSaveDirPreference(prefs);
|
| FilePath download_save_dir = prefs->GetFilePath(
|
| prefs::kDownloadDefaultDirectory);
|
| + DownloadPrefs* download_prefs =
|
| + tab_contents()->profile()->GetDownloadManager()->download_prefs();
|
| + FilePath default_download_dir = download_prefs->GetDefaultDownloadDirectory();
|
| std::string mime_type = tab_contents()->contents_mime_type();
|
|
|
| BrowserThread::PostTask(
|
| BrowserThread::FILE, FROM_HERE,
|
| NewRunnableMethod(this, &SavePackage::CreateDirectoryOnFileThread,
|
| - website_save_dir, download_save_dir, mime_type));
|
| + website_save_dir, download_save_dir,
|
| + default_download_dir, mime_type));
|
| }
|
|
|
| void SavePackage::CreateDirectoryOnFileThread(
|
| const FilePath& website_save_dir,
|
| const FilePath& download_save_dir,
|
| + const FilePath& default_download_dir,
|
| const std::string& mime_type) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
|
| +
|
| FilePath save_dir;
|
| - // If the default html/websites save folder doesn't exist...
|
| - if (!file_util::DirectoryExists(website_save_dir)) {
|
| - // If the default download dir doesn't exist, create it.
|
| - if (!file_util::DirectoryExists(download_save_dir))
|
| - file_util::CreateDirectory(download_save_dir);
|
| - save_dir = download_save_dir;
|
| - } else {
|
| - // If it does exist, use the default save dir param.
|
| - save_dir = website_save_dir;
|
| - }
|
| + // Ignores the returned value since the select file dialog should be
|
| + // displayed in any case.
|
| + download_util::ChooseSavableDirectory(
|
| + website_save_dir, download_save_dir, default_download_dir, &save_dir);
|
|
|
| bool can_save_as_complete = CanSaveAsComplete(mime_type);
|
| FilePath suggested_filename = GetSuggestedNameForSaveAs(can_save_as_complete,
|
| @@ -1314,6 +1317,8 @@ void SavePackage::CreateDirectoryOnFileThread(
|
|
|
| void SavePackage::ContinueGetSaveInfo(const FilePath& suggested_path,
|
| bool can_save_as_complete) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| +
|
| // The TabContents which owns this SavePackage may have disappeared during
|
| // the UI->FILE->UI thread hop of
|
| // GetSaveInfo->CreateDirectoryOnFileThread->ContinueGetSaveInfo.
|
| @@ -1403,6 +1408,8 @@ void SavePackage::ContinueGetSaveInfo(const FilePath& suggested_path,
|
| // Called after the save file dialog box returns.
|
| void SavePackage::ContinueSave(const FilePath& final_name,
|
| int index) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| +
|
| // Ensure the filename is safe.
|
| saved_main_file_path_ = final_name;
|
| download_util::GenerateSafeFileName(tab_contents()->contents_mime_type(),
|
|
|