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

Unified Diff: chrome/browser/ui/download/download_tab_helper.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: Correct typo Created 9 years, 7 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/ui/download/download_tab_helper.cc
diff --git a/chrome/browser/ui/download/download_tab_helper.cc b/chrome/browser/ui/download/download_tab_helper.cc
index 54a95de7cb309ef8540421f3420cc00d67d88237..3770f92ddbd0413992087d302f688651410c5baa 100644
--- a/chrome/browser/ui/download/download_tab_helper.cc
+++ b/chrome/browser/ui/download/download_tab_helper.cc
@@ -4,15 +4,20 @@
#include "chrome/browser/ui/download/download_tab_helper.h"
+#include "base/path_service.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/download/download_manager.h"
+#include "chrome/browser/download/download_prefs.h"
#include "chrome/browser/download/download_request_limiter.h"
#include "chrome/browser/download/download_util.h"
+#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/blocked_content/blocked_content_tab_helper.h"
#include "chrome/browser/ui/blocked_content/blocked_content_tab_helper_delegate.h"
#include "chrome/browser/ui/download/download_tab_helper_delegate.h"
#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
+#include "chrome/common/chrome_paths.h"
+#include "chrome/common/pref_names.h"
#include "chrome/common/render_messages.h"
#include "content/browser/tab_contents/tab_contents.h"
#include "content/common/view_messages.h"
@@ -54,9 +59,6 @@ void DownloadTabHelper::OnSaveURL(const GURL& url) {
dlm->DownloadUrl(url, tab_contents()->GetURL(), "", tab_contents());
}
-// Used in automated testing to bypass prompting the user for file names.
-// Instead, the names and paths are hard coded rather than running them through
-// file name sanitation and extension / mime checking.
Randy Smith (Not in Mondays) 2011/06/02 19:13:57 Why delete this comment? I think it's still valid
haraken1 2011/06/03 06:50:27 Oops. I restored this comment download_tab_helper.
bool DownloadTabHelper::SavePage(const FilePath& main_file,
const FilePath& dir_path,
SavePackage::SavePackageType save_type) {
@@ -65,9 +67,74 @@ bool DownloadTabHelper::SavePage(const FilePath& main_file,
save_package_ =
new SavePackage(tab_contents_wrapper_, save_type, main_file, dir_path);
+ // Skips GetSaveInfo() and directly calls Init().
+ // We do not have to explicitly disable the select file dialog
+ // since we skip the process that can show the dialog.
return save_package_->Init();
}
+string16 DownloadTabHelper::SavePageWithoutDialog() {
+ tab_contents()->Stop();
+
+ save_package_ = new SavePackage(tab_contents_wrapper_);
+ // Disables the select file dialog.
+ save_package_->SetShouldPromptUser(false);
+ // This GetSaveInfo() calls save_package_->Init() in the background.
+ save_package_->GetSaveInfo();
+ return tab_contents()->GetTitle();
+}
+
+void DownloadTabHelper::ChangeSaveDirectoryPrefs(
+ const FilePath& website_save_dir,
+ const FilePath& download_save_dir,
+ const FilePath& default_downloads_dir,
+ const SavePackage::SavePackageType save_type) {
+ PrefService* prefs = tab_contents()->profile()->GetPrefs();
+
+ DCHECK(prefs->FindPreference(prefs::kDownloadDefaultDirectory));
+ prev_download_save_dir_ = prefs->GetFilePath(
+ prefs::kDownloadDefaultDirectory);
+
+ // Check whether the preference has the default folder for saving HTML.
+ // If not, initialize it with the default folder for downloaded files.
+ if (!prefs->FindPreference(prefs::kSaveFileDefaultDirectory)) {
+ prefs->RegisterFilePathPref(prefs::kSaveFileDefaultDirectory,
+ prev_download_save_dir_,
+ PrefService::UNSYNCABLE_PREF);
+ }
+ prev_website_save_dir_ = prefs->GetFilePath(
+ prefs::kSaveFileDefaultDirectory);
+
+ if (!PathService::Get(
+ chrome::DIR_DEFAULT_DOWNLOADS, &prev_default_downloads_dir_)) {
+ LOG(ERROR) << "Cannot find the user's \"Downloads\" folder.";
+ prev_default_downloads_dir_.clear();
+ }
+
+ DownloadPrefs* download_prefs =
+ tab_contents()->profile()->GetDownloadManager()->download_prefs();
+ prev_save_type_ =
+ static_cast<SavePackage::SavePackageType>
+ (download_prefs->save_file_type());
+
+ prefs->SetFilePath(prefs::kSaveFileDefaultDirectory, website_save_dir);
+ prefs->SetFilePath(prefs::kDownloadDefaultDirectory, download_save_dir);
+ PathService::Set(chrome::DIR_DEFAULT_DOWNLOADS, default_downloads_dir);
+ prefs->SetInteger(prefs::kSaveFileType, save_type);
Randy Smith (Not in Mondays) 2011/06/02 19:13:57 It looks to me as if everything in this function c
haraken1 2011/06/03 06:50:27 Makes sense. Done.
+}
+
+void DownloadTabHelper::RestoreSaveDirectoryPrefs() {
+ PrefService* prefs = tab_contents()->profile()->GetPrefs();
+ prefs->SetFilePath(prefs::kSaveFileDefaultDirectory, prev_website_save_dir_);
+ prefs->SetFilePath(prefs::kDownloadDefaultDirectory, prev_download_save_dir_);
+ // Restores DIR_DEFAULT_DOWNLOADS only when we could get
+ // |prev_default_downloads_dir_| successfully in ChangeSaveDirectoryPrefs().
+ if (!prev_default_downloads_dir_.empty())
+ PathService::Set(
+ chrome::DIR_DEFAULT_DOWNLOADS, prev_default_downloads_dir_);
+ prefs->SetInteger(prefs::kSaveFileType, prev_save_type_);
+}
+
bool DownloadTabHelper::CanDownload(int request_id) {
if (delegate_)
return delegate_->CanDownload(request_id);

Powered by Google App Engine
This is Rietveld 408576698