Index: chrome/browser/ui/webui/options/advanced_options_handler.cc |
diff --git a/chrome/browser/ui/webui/options/advanced_options_handler.cc b/chrome/browser/ui/webui/options/advanced_options_handler.cc |
index dce0eadbf31ba4d20e81ab2f4d1fd9a6de269cc5..be42c60b7e3140a6d884aef254b1ecea8b49f014 100644 |
--- a/chrome/browser/ui/webui/options/advanced_options_handler.cc |
+++ b/chrome/browser/ui/webui/options/advanced_options_handler.cc |
@@ -9,6 +9,8 @@ |
#include "base/basictypes.h" |
#include "base/callback.h" |
#include "base/command_line.h" |
+#include "base/file_util.h" |
+#include "base/path_service.h" |
#include "base/utf_string_conversions.h" |
#include "base/values.h" |
#include "chrome/browser/browser_process.h" |
@@ -24,6 +26,7 @@ |
#include "chrome/browser/service/service_process_control.h" |
#include "chrome/browser/ui/options/options_util.h" |
#include "chrome/common/chrome_notification_types.h" |
+#include "chrome/common/chrome_paths.h" |
#include "chrome/common/chrome_switches.h" |
#include "chrome/common/pref_names.h" |
#include "chrome/common/url_constants.h" |
@@ -201,6 +204,9 @@ void AdvancedOptionsHandler::Initialize() { |
SetupMetricsReportingSettingVisibility(); |
SetupFontSizeLabel(); |
SetupDownloadLocationPath(); |
+ download_path_checker_ = new DownloadPathChecker(this); |
+ download_path_checker_->CheckIfDownloadPathExists( |
+ default_download_location_.GetValue()); |
SetupPromptForDownload(); |
SetupAutoOpenFileTypesDisabledAttribute(); |
SetupProxySettingsSection(); |
@@ -661,3 +667,49 @@ void AdvancedOptionsHandler::SetupSSLConfigSettings() { |
"options.AdvancedOptions.SetUseTLS1CheckboxState", checked, disabled); |
} |
} |
+ |
+AdvancedOptionsHandler::DownloadPathChecker::DownloadPathChecker( |
+ AdvancedOptionsHandler* handler) |
+ : handler_(handler) { |
+} |
+ |
+AdvancedOptionsHandler::DownloadPathChecker::~DownloadPathChecker() { |
+} |
+ |
+void AdvancedOptionsHandler::DownloadPathChecker:: |
+ CheckIfDownloadPathExists(const FilePath& path) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, |
+ NewRunnableMethod(this, |
+ &DownloadPathChecker::CheckIfDownloadPathExistsOnFileThread, path)); |
+} |
+ |
+void AdvancedOptionsHandler::DownloadPathChecker:: |
+ CheckIfDownloadPathExistsOnFileThread( |
+ const FilePath& path) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
+ if (!file_util::PathExists(path)) { |
+ FilePath new_path; |
+ if (!PathService::Get(chrome::DIR_DEFAULT_DOWNLOADS, &new_path)) { |
+ // Create the |path| folder if we cannot get DIR_DEFAULT_DOWNLOADS |
+ // (This will be a rare case). |
+ new_path = path; |
+ } |
+ // Make sure that the folder does exist. |
+ if (!file_util::CreateDirectory(new_path)) |
+ LOG(ERROR) << "Failed to create " << new_path.value(); |
+ |
+ BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
+ NewRunnableMethod(this, |
+ &DownloadPathChecker::OnDownloadPathChanged, new_path)); |
+ } |
+} |
+ |
+void AdvancedOptionsHandler::DownloadPathChecker:: |
+ OnDownloadPathChanged(const FilePath path) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ if (handler_) { |
+ handler_->default_download_location_.SetValue(path); |
+ handler_->SetupDownloadLocationPath(); |
+ } |
+} |