diff options
author | stuartmorgan@chromium.org <stuartmorgan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-14 17:30:58 +0000 |
---|---|---|
committer | stuartmorgan@chromium.org <stuartmorgan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-14 17:30:58 +0000 |
commit | 8907940aefb3a2a98a35332d46cc56bb3d8edf38 (patch) | |
tree | 9d3df0611083d37211feba38aa37db8b1de73aba /chrome/browser/dom_ui | |
parent | ead3edc9cc82e9c4d688c08fb36f3011bbbfaaf5 (diff) | |
download | chromium_src-8907940aefb3a2a98a35332d46cc56bb3d8edf38.zip chromium_src-8907940aefb3a2a98a35332d46cc56bb3d8edf38.tar.gz chromium_src-8907940aefb3a2a98a35332d46cc56bb3d8edf38.tar.bz2 |
Implement default browser pref in DOMUI
Also disables all the not-yet-implemented controls so it's clear what works and what doesn't.
Fixes a earlier bad merge that introduced a duplicate include of the sync options.
BUG=48713
TEST=Running with --enable-tabbed-options, default browser display and button should work in prefs.
Review URL: http://codereview.chromium.org/2945017
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@52335 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/dom_ui')
-rw-r--r-- | chrome/browser/dom_ui/browser_options_handler.cc | 96 | ||||
-rw-r--r-- | chrome/browser/dom_ui/browser_options_handler.h | 24 |
2 files changed, 113 insertions, 7 deletions
diff --git a/chrome/browser/dom_ui/browser_options_handler.cc b/chrome/browser/dom_ui/browser_options_handler.cc index dfcd223..7ab1bc1 100644 --- a/chrome/browser/dom_ui/browser_options_handler.cc +++ b/chrome/browser/dom_ui/browser_options_handler.cc @@ -6,14 +6,21 @@ #include "app/l10n_util.h" #include "base/basictypes.h" +#include "base/scoped_ptr.h" #include "base/values.h" +#include "chrome/installer/util/browser_distribution.h" #include "grit/chromium_strings.h" #include "grit/generated_resources.h" BrowserOptionsHandler::BrowserOptionsHandler() { +#if !defined(OS_MACOSX) + default_browser_worker_ = new ShellIntegration::DefaultBrowserWorker(this); +#endif } BrowserOptionsHandler::~BrowserOptionsHandler() { + if (default_browser_worker_.get()) + default_browser_worker_->ObserverDestroyed(); } void BrowserOptionsHandler::GetLocalizedValues( @@ -47,16 +54,93 @@ void BrowserOptionsHandler::GetLocalizedValues( l10n_util::GetString(IDS_OPTIONS_DEFAULTSEARCH_MANAGE_ENGINES_LINK)); localized_strings->SetString(L"defaultBrowserGroupName", l10n_util::GetString(IDS_OPTIONS_DEFAULTBROWSER_GROUP_NAME)); - localized_strings->SetString(L"defaultBrowserNotDefault", - l10n_util::GetStringF(IDS_OPTIONS_DEFAULTBROWSER_NOTDEFAULT, - l10n_util::GetString(IDS_PRODUCT_NAME))); localized_strings->SetString(L"defaultBrowserUnknown", l10n_util::GetStringF(IDS_OPTIONS_DEFAULTBROWSER_UNKNOWN, l10n_util::GetString(IDS_PRODUCT_NAME))); - localized_strings->SetString(L"defaultBrowserSXS", - l10n_util::GetStringF(IDS_OPTIONS_DEFAULTBROWSER_SXS, - l10n_util::GetString(IDS_PRODUCT_NAME))); localized_strings->SetString(L"defaultBrowserUseAsDefault", l10n_util::GetStringF(IDS_OPTIONS_DEFAULTBROWSER_USEASDEFAULT, l10n_util::GetString(IDS_PRODUCT_NAME))); } + +void BrowserOptionsHandler::RegisterMessages() { + dom_ui_->RegisterMessageCallback( + "updateDefaultBrowserState", + NewCallback(this, &BrowserOptionsHandler::UpdateDefaultBrowserState)); + dom_ui_->RegisterMessageCallback( + "becomeDefaultBrowser", + NewCallback(this, &BrowserOptionsHandler::BecomeDefaultBrowser)); +} + +void BrowserOptionsHandler::UpdateDefaultBrowserState(const Value* value) { +#if defined(OS_WIN) + // Check for side-by-side first. + if (!BrowserDistribution::GetDistribution()->CanSetAsDefault()) { + SetDefaultBrowserUIString(IDS_OPTIONS_DEFAULTBROWSER_SXS); + return; + } +#endif + +#if defined(OS_MACOSX) + ShellIntegration::DefaultBrowserState state = + ShellIntegration::IsDefaultBrowser(); + int status_string_id; + if (state == ShellIntegration::IS_DEFAULT_BROWSER) + status_string_id = IDS_OPTIONS_DEFAULTBROWSER_DEFAULT; + else if (state == ShellIntegration::NOT_DEFAULT_BROWSER) + status_string_id = IDS_OPTIONS_DEFAULTBROWSER_NOTDEFAULT; + else + status_string_id = IDS_OPTIONS_DEFAULTBROWSER_UNKNOWN; + + SetDefaultBrowserUIString(status_string_id); +#else + default_browser_worker_->StartCheckDefaultBrowser(); +#endif +} + +void BrowserOptionsHandler::BecomeDefaultBrowser(const Value* value) { +#if defined(OS_MACOSX) + if (ShellIntegration::SetAsDefaultBrowser()) + UpdateDefaultBrowserState(NULL); +#else + default_browser_worker_->StartSetAsDefaultBrowser(); + // Callback takes care of updating UI. +#endif +} + +int BrowserOptionsHandler::StatusStringIdForState( + ShellIntegration::DefaultBrowserState state) { + if (state == ShellIntegration::IS_DEFAULT_BROWSER) + return IDS_OPTIONS_DEFAULTBROWSER_DEFAULT; + if (state == ShellIntegration::NOT_DEFAULT_BROWSER) + return IDS_OPTIONS_DEFAULTBROWSER_NOTDEFAULT; + return IDS_OPTIONS_DEFAULTBROWSER_UNKNOWN; +} + +void BrowserOptionsHandler::SetDefaultBrowserUIState( + ShellIntegration::DefaultBrowserUIState state) { + int status_string_id; + if (state == ShellIntegration::STATE_IS_DEFAULT) + status_string_id = IDS_OPTIONS_DEFAULTBROWSER_DEFAULT; + else if (state == ShellIntegration::STATE_NOT_DEFAULT) + status_string_id = IDS_OPTIONS_DEFAULTBROWSER_NOTDEFAULT; + else if (state == ShellIntegration::STATE_UNKNOWN) + status_string_id = IDS_OPTIONS_DEFAULTBROWSER_UNKNOWN; + else + return; // Still processing. + + SetDefaultBrowserUIString(status_string_id); +} + +void BrowserOptionsHandler::SetDefaultBrowserUIString(int status_string_id) { + scoped_ptr<Value> status_string(Value::CreateStringValue( + l10n_util::GetStringF(status_string_id, + l10n_util::GetString(IDS_PRODUCT_NAME)))); + + scoped_ptr<Value> is_default(Value::CreateBooleanValue( + status_string_id == IDS_OPTIONS_DEFAULTBROWSER_DEFAULT)); + + dom_ui_->CallJavascriptFunction( + L"BrowserOptions.updateDefaultBrowserStateCallback", + *(status_string.get()), *(is_default.get())); +} + diff --git a/chrome/browser/dom_ui/browser_options_handler.h b/chrome/browser/dom_ui/browser_options_handler.h index 4ba0897..2ba41da 100644 --- a/chrome/browser/dom_ui/browser_options_handler.h +++ b/chrome/browser/dom_ui/browser_options_handler.h @@ -6,17 +6,39 @@ #define CHROME_BROWSER_DOM_UI_BROWSER_OPTIONS_HANDLER_H_ #include "chrome/browser/dom_ui/options_ui.h" +#include "chrome/browser/shell_integration.h" // Chrome browser options page UI handler. -class BrowserOptionsHandler : public OptionsPageUIHandler { +class BrowserOptionsHandler : public OptionsPageUIHandler, + public ShellIntegration::DefaultBrowserObserver { public: BrowserOptionsHandler(); virtual ~BrowserOptionsHandler(); // OptionsUIHandler implementation. virtual void GetLocalizedValues(DictionaryValue* localized_strings); + virtual void RegisterMessages(); + + // ShellIntegration::DefaultBrowserObserver implementation. + virtual void SetDefaultBrowserUIState( + ShellIntegration::DefaultBrowserUIState state); private: + // Gets the current default browser state, and asynchronously reports it back + // to the DOMUI page. Called from DOMUI. + void UpdateDefaultBrowserState(const Value* value); + + // Makes this the default browser. Called from DOMUI. + void BecomeDefaultBrowser(const Value* value); + + // Returns the string ID for the given default browser state. + int StatusStringIdForState(ShellIntegration::DefaultBrowserState state); + + // Updates the UI with the given state. + void SetDefaultBrowserUIString(int status_string_id); + + scoped_refptr<ShellIntegration::DefaultBrowserWorker> default_browser_worker_; + DISALLOW_COPY_AND_ASSIGN(BrowserOptionsHandler); }; |