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-16 15:47:22 +0000
committerstuartmorgan@chromium.org <stuartmorgan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-16 15:47:22 +0000
commit99739afe82bfcda375aca9c95ab1f69f483b240d (patch)
tree1ebe088ecdd142ced6997f88a1ba643e621980e8 /chrome/browser/dom_ui
parent5feddabb9b3d9408428b6f282f306749c755a957 (diff)
downloadchromium_src-99739afe82bfcda375aca9c95ab1f69f483b240d.zip
chromium_src-99739afe82bfcda375aca9c95ab1f69f483b240d.tar.gz
chromium_src-99739afe82bfcda375aca9c95ab1f69f483b240d.tar.bz2
Implement search engine selection in DOMUI prefs
BUG=48713 TEST=Changing search engines in DOMUP prefs should be persisted. Review URL: http://codereview.chromium.org/2883024 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@52675 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/dom_ui')
-rw-r--r--chrome/browser/dom_ui/browser_options_handler.cc81
-rw-r--r--chrome/browser/dom_ui/browser_options_handler.h24
2 files changed, 92 insertions, 13 deletions
diff --git a/chrome/browser/dom_ui/browser_options_handler.cc b/chrome/browser/dom_ui/browser_options_handler.cc
index 7ab1bc1..58d002d 100644
--- a/chrome/browser/dom_ui/browser_options_handler.cc
+++ b/chrome/browser/dom_ui/browser_options_handler.cc
@@ -7,12 +7,16 @@
#include "app/l10n_util.h"
#include "base/basictypes.h"
#include "base/scoped_ptr.h"
+#include "base/string_util.h"
+#include "base/utf_string_conversions.h"
#include "base/values.h"
+#include "chrome/browser/profile.h"
#include "chrome/installer/util/browser_distribution.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
-BrowserOptionsHandler::BrowserOptionsHandler() {
+BrowserOptionsHandler::BrowserOptionsHandler()
+ : template_url_model_(NULL) {
#if !defined(OS_MACOSX)
default_browser_worker_ = new ShellIntegration::DefaultBrowserWorker(this);
#endif
@@ -21,6 +25,8 @@ BrowserOptionsHandler::BrowserOptionsHandler() {
BrowserOptionsHandler::~BrowserOptionsHandler() {
if (default_browser_worker_.get())
default_browser_worker_->ObserverDestroyed();
+ if (template_url_model_)
+ template_url_model_->RemoveObserver(this);
}
void BrowserOptionsHandler::GetLocalizedValues(
@@ -64,14 +70,25 @@ void BrowserOptionsHandler::GetLocalizedValues(
void BrowserOptionsHandler::RegisterMessages() {
dom_ui_->RegisterMessageCallback(
- "updateDefaultBrowserState",
- NewCallback(this, &BrowserOptionsHandler::UpdateDefaultBrowserState));
- dom_ui_->RegisterMessageCallback(
"becomeDefaultBrowser",
NewCallback(this, &BrowserOptionsHandler::BecomeDefaultBrowser));
+ dom_ui_->RegisterMessageCallback(
+ "setDefaultSearchEngine",
+ NewCallback(this, &BrowserOptionsHandler::SetDefaultSearchEngine));
+}
+
+void BrowserOptionsHandler::Initialize() {
+ UpdateDefaultBrowserState();
+
+ template_url_model_ = dom_ui_->GetProfile()->GetTemplateURLModel();
+ if (template_url_model_) {
+ template_url_model_->Load();
+ template_url_model_->AddObserver(this);
+ OnTemplateURLModelChanged();
+ }
}
-void BrowserOptionsHandler::UpdateDefaultBrowserState(const Value* value) {
+void BrowserOptionsHandler::UpdateDefaultBrowserState() {
#if defined(OS_WIN)
// Check for side-by-side first.
if (!BrowserDistribution::GetDistribution()->CanSetAsDefault()) {
@@ -100,7 +117,7 @@ void BrowserOptionsHandler::UpdateDefaultBrowserState(const Value* value) {
void BrowserOptionsHandler::BecomeDefaultBrowser(const Value* value) {
#if defined(OS_MACOSX)
if (ShellIntegration::SetAsDefaultBrowser())
- UpdateDefaultBrowserState(NULL);
+ UpdateDefaultBrowserState();
#else
default_browser_worker_->StartSetAsDefaultBrowser();
// Callback takes care of updating UI.
@@ -140,7 +157,57 @@ void BrowserOptionsHandler::SetDefaultBrowserUIString(int status_string_id) {
status_string_id == IDS_OPTIONS_DEFAULTBROWSER_DEFAULT));
dom_ui_->CallJavascriptFunction(
- L"BrowserOptions.updateDefaultBrowserStateCallback",
+ L"BrowserOptions.updateDefaultBrowserState",
*(status_string.get()), *(is_default.get()));
}
+void BrowserOptionsHandler::OnTemplateURLModelChanged() {
+ if (!template_url_model_ || !template_url_model_->loaded())
+ return;
+
+ const TemplateURL* default_url =
+ template_url_model_->GetDefaultSearchProvider();
+
+ int default_index = 0;
+ ListValue search_engines;
+ std::vector<const TemplateURL*> model_urls =
+ template_url_model_->GetTemplateURLs();
+ for (size_t i = 0; i < model_urls.size(); ++i) {
+ if (!model_urls[i]->ShowInDefaultList())
+ continue;
+
+ DictionaryValue* entry = new DictionaryValue();
+ entry->SetString(L"name", model_urls[i]->short_name());
+ entry->SetInteger(L"index", i);
+ search_engines.Append(entry);
+ if (model_urls[i] == default_url)
+ default_index = i;
+ }
+
+ scoped_ptr<Value> default_value(Value::CreateIntegerValue(default_index));
+
+ dom_ui_->CallJavascriptFunction(L"BrowserOptions.updateSearchEngines",
+ search_engines, *(default_value.get()));
+}
+
+void BrowserOptionsHandler::SetDefaultSearchEngine(const Value* value) {
+ if (!value || !value->IsType(Value::TYPE_LIST)) {
+ NOTREACHED();
+ return;
+ }
+ const ListValue* param_values = static_cast<const ListValue*>(value);
+ std::string string_value;
+ if (param_values->GetSize() != 1 ||
+ !param_values->GetString(0, &string_value)) {
+ NOTREACHED();
+ return;
+ }
+ int selected_index = StringToInt(string_value);
+
+ std::vector<const TemplateURL*> model_urls =
+ template_url_model_->GetTemplateURLs();
+ if (selected_index >= 0 &&
+ selected_index < static_cast<int>(model_urls.size()))
+ template_url_model_->SetDefaultSearchProvider(model_urls[selected_index]);
+}
+
diff --git a/chrome/browser/dom_ui/browser_options_handler.h b/chrome/browser/dom_ui/browser_options_handler.h
index 2ba41da..3fb1a8e 100644
--- a/chrome/browser/dom_ui/browser_options_handler.h
+++ b/chrome/browser/dom_ui/browser_options_handler.h
@@ -6,15 +6,19 @@
#define CHROME_BROWSER_DOM_UI_BROWSER_OPTIONS_HANDLER_H_
#include "chrome/browser/dom_ui/options_ui.h"
+#include "chrome/browser/search_engines/template_url_model.h"
#include "chrome/browser/shell_integration.h"
// Chrome browser options page UI handler.
class BrowserOptionsHandler : public OptionsPageUIHandler,
- public ShellIntegration::DefaultBrowserObserver {
+ public ShellIntegration::DefaultBrowserObserver,
+ public TemplateURLModelObserver {
public:
BrowserOptionsHandler();
virtual ~BrowserOptionsHandler();
+ virtual void Initialize();
+
// OptionsUIHandler implementation.
virtual void GetLocalizedValues(DictionaryValue* localized_strings);
virtual void RegisterMessages();
@@ -23,22 +27,30 @@ class BrowserOptionsHandler : public OptionsPageUIHandler,
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);
+ // TemplateURLModelObserver implementation.
+ virtual void OnTemplateURLModelChanged();
+ private:
// Makes this the default browser. Called from DOMUI.
void BecomeDefaultBrowser(const Value* value);
+ // Sets the search engine at the given index to be default. Called from DOMUI.
+ void SetDefaultSearchEngine(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.
+ // Gets the current default browser state, and asynchronously reports it to
+ // the DOMUI page.
+ void UpdateDefaultBrowserState();
+
+ // Updates the UI with the given state for the default browser.
void SetDefaultBrowserUIString(int status_string_id);
scoped_refptr<ShellIntegration::DefaultBrowserWorker> default_browser_worker_;
+ TemplateURLModel* template_url_model_; // Weak.
+
DISALLOW_COPY_AND_ASSIGN(BrowserOptionsHandler);
};