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 2f7f0ea8583b8d5f6040b43db1fd58d1ffe7e7cb..5008ee34898e49ac2903ff67d326f737e09073f7 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_manager.h" |
#include "chrome/browser/ui/options/options_util.h" |
#include "chrome/browser/ui/webui/options/options_managed_banner_handler.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" |
@@ -185,6 +188,9 @@ void AdvancedOptionsHandler::Initialize() { |
SetupMetricsReportingSettingVisibility(); |
SetupFontSizeLabel(); |
SetupDownloadLocationPath(); |
+ download_path_checker_ = new DownloadPathChecker(this); |
+ download_path_checker_->CheckIfDownloadPathExists( |
+ default_download_location_.GetValue()); |
SetupPromptForDownload(); |
SetupAutoOpenFileTypesDisabledAttribute(); |
SetupProxySettingsSection(); |
@@ -640,3 +646,47 @@ 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. |
+ file_util::CreateDirectory(new_path); |
Paweł Hajdan Jr.
2011/05/30 14:15:49
What if this fails?
haraken1
2011/05/31 12:41:31
For the reason that I wrote above, I just added an
|
+ 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(); |
+ } |
+} |