summaryrefslogtreecommitdiffstats
path: root/chrome/browser/dom_ui
diff options
context:
space:
mode:
authorstuartmorgan@chromium.org <stuartmorgan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-14 17:30:58 +0000
committerstuartmorgan@chromium.org <stuartmorgan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-14 17:30:58 +0000
commit8907940aefb3a2a98a35332d46cc56bb3d8edf38 (patch)
tree9d3df0611083d37211feba38aa37db8b1de73aba /chrome/browser/dom_ui
parentead3edc9cc82e9c4d688c08fb36f3011bbbfaaf5 (diff)
downloadchromium_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.cc96
-rw-r--r--chrome/browser/dom_ui/browser_options_handler.h24
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);
};