Chromium Code Reviews| 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(); |
| + } |
| +} |