diff options
author | stuartmorgan@chromium.org <stuartmorgan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-16 15:47:22 +0000 |
---|---|---|
committer | stuartmorgan@chromium.org <stuartmorgan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-16 15:47:22 +0000 |
commit | 99739afe82bfcda375aca9c95ab1f69f483b240d (patch) | |
tree | 1ebe088ecdd142ced6997f88a1ba643e621980e8 /chrome/browser/dom_ui | |
parent | 5feddabb9b3d9408428b6f282f306749c755a957 (diff) | |
download | chromium_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.cc | 81 | ||||
-rw-r--r-- | chrome/browser/dom_ui/browser_options_handler.h | 24 |
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); }; |