diff options
Diffstat (limited to 'chrome/browser/ui/webui')
5 files changed, 362 insertions, 192 deletions
diff --git a/chrome/browser/ui/webui/options2/browser_options_handler2.cc b/chrome/browser/ui/webui/options2/browser_options_handler2.cc index 814faac..5883f83 100644 --- a/chrome/browser/ui/webui/options2/browser_options_handler2.cc +++ b/chrome/browser/ui/webui/options2/browser_options_handler2.cc @@ -62,7 +62,6 @@ namespace options2 { BrowserOptionsHandler::BrowserOptionsHandler() : template_url_service_(NULL), - startup_custom_pages_table_model_(NULL), ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_for_file_(this)), ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_for_ui_(this)) { multiprofile_ = ProfileManager::IsMultipleProfilesEnabled(); @@ -100,9 +99,8 @@ void BrowserOptionsHandler::GetLocalizedValues( { "startupShowDefaultAndNewTab", IDS_OPTIONS_STARTUP_SHOW_DEFAULT_AND_NEWTAB}, { "startupShowLastSession", IDS_OPTIONS_STARTUP_SHOW_LAST_SESSION }, - { "startupShowPages", IDS_OPTIONS_STARTUP_SHOW_PAGES }, - { "startupAddLabel", IDS_OPTIONS_STARTUP_ADD_LABEL }, - { "startupUseCurrent", IDS_OPTIONS_STARTUP_USE_CURRENT }, + { "startupShowPages", IDS_OPTIONS2_STARTUP_SHOW_PAGES }, + { "startupSetPages", IDS_OPTIONS2_STARTUP_SET_PAGES }, { "toolbarGroupName", IDS_OPTIONS2_TOOLBAR_GROUP_NAME }, { "toolbarShowHomeButton", IDS_OPTIONS_TOOLBAR_SHOW_HOME_BUTTON }, { "toolbarShowBookmarksBar", IDS_OPTIONS_TOOLBAR_SHOW_BOOKMARKS_BAR }, @@ -158,21 +156,6 @@ void BrowserOptionsHandler::RegisterMessages() { web_ui()->RegisterMessageCallback("setDefaultSearchEngine", base::Bind(&BrowserOptionsHandler::SetDefaultSearchEngine, base::Unretained(this))); - web_ui()->RegisterMessageCallback("removeStartupPages", - base::Bind(&BrowserOptionsHandler::RemoveStartupPages, - base::Unretained(this))); - web_ui()->RegisterMessageCallback("addStartupPage", - base::Bind(&BrowserOptionsHandler::AddStartupPage, - base::Unretained(this))); - web_ui()->RegisterMessageCallback("editStartupPage", - base::Bind(&BrowserOptionsHandler::EditStartupPage, - base::Unretained(this))); - web_ui()->RegisterMessageCallback("setStartupPagesToCurrentPages", - base::Bind(&BrowserOptionsHandler::SetStartupPagesToCurrentPages, - base::Unretained(this))); - web_ui()->RegisterMessageCallback("dragDropStartupPage", - base::Bind(&BrowserOptionsHandler::DragDropStartupPage, - base::Unretained(this))); web_ui()->RegisterMessageCallback("requestAutocompleteSuggestions", base::Bind(&BrowserOptionsHandler::RequestAutocompleteSuggestions, base::Unretained(this))); @@ -303,13 +286,7 @@ void BrowserOptionsHandler::Initialize() { this); UpdateDefaultBrowserState(); - startup_custom_pages_table_model_.reset( - new CustomHomePagesTableModel(profile)); - startup_custom_pages_table_model_->SetObserver(this); - UpdateStartupPages(); - pref_change_registrar_.Init(profile->GetPrefs()); - pref_change_registrar_.Add(prefs::kURLsToRestoreOnStartup, this); pref_change_registrar_.Add(prefs::kHomePage, this); UpdateSearchEngines(); @@ -504,13 +481,6 @@ void BrowserOptionsHandler::UpdateSearchEngines() { } } -void BrowserOptionsHandler::UpdateStartupPages() { - Profile* profile = Profile::FromWebUI(web_ui()); - const SessionStartupPref startup_pref = - SessionStartupPref::GetStartupPref(profile->GetPrefs()); - startup_custom_pages_table_model_->SetURLs(startup_pref.urls); -} - void BrowserOptionsHandler::UpdateHomePageLabel() const { Profile* profile = Profile::FromWebUI(web_ui()); PrefService* prefs = profile->GetPrefs(); @@ -522,36 +492,6 @@ void BrowserOptionsHandler::UpdateHomePageLabel() const { *label); } -void BrowserOptionsHandler::OnModelChanged() { - ListValue startup_pages; - int page_count = startup_custom_pages_table_model_->RowCount(); - std::vector<GURL> urls = startup_custom_pages_table_model_->GetURLs(); - for (int i = 0; i < page_count; ++i) { - DictionaryValue* entry = new DictionaryValue(); - entry->SetString("title", startup_custom_pages_table_model_->GetText(i, 0)); - entry->SetString("url", urls[i].spec()); - entry->SetString("tooltip", - startup_custom_pages_table_model_->GetTooltip(i)); - entry->SetString("modelIndex", base::IntToString(i)); - startup_pages.Append(entry); - } - - web_ui()->CallJavascriptFunction("BrowserOptions.updateStartupPages", - startup_pages); -} - -void BrowserOptionsHandler::OnItemsChanged(int start, int length) { - OnModelChanged(); -} - -void BrowserOptionsHandler::OnItemsAdded(int start, int length) { - OnModelChanged(); -} - -void BrowserOptionsHandler::OnItemsRemoved(int start, int length) { - OnModelChanged(); -} - void BrowserOptionsHandler::Observe( int type, const content::NotificationSource& source, @@ -560,8 +500,6 @@ void BrowserOptionsHandler::Observe( std::string* pref = content::Details<std::string>(details).ptr(); if (*pref == prefs::kDefaultBrowserSettingEnabled) { UpdateDefaultBrowserState(); - } else if (*pref == prefs::kURLsToRestoreOnStartup) { - UpdateStartupPages(); } else if (*pref == prefs::kHomePage) { UpdateHomePageLabel(); } else { @@ -575,96 +513,6 @@ void BrowserOptionsHandler::Observe( } } -void BrowserOptionsHandler::SetStartupPagesToCurrentPages( - const ListValue* args) { - startup_custom_pages_table_model_->SetToCurrentlyOpenPages(); - SaveStartupPagesPref(); -} - -void BrowserOptionsHandler::RemoveStartupPages(const ListValue* args) { - for (int i = args->GetSize() - 1; i >= 0; --i) { - std::string string_value; - CHECK(args->GetString(i, &string_value)); - - int selected_index; - base::StringToInt(string_value, &selected_index); - if (selected_index < 0 || - selected_index >= startup_custom_pages_table_model_->RowCount()) { - NOTREACHED(); - return; - } - startup_custom_pages_table_model_->Remove(selected_index); - } - - SaveStartupPagesPref(); -} - -void BrowserOptionsHandler::AddStartupPage(const ListValue* args) { - std::string url_string; - CHECK_EQ(args->GetSize(), 1U); - CHECK(args->GetString(0, &url_string)); - - GURL url = URLFixerUpper::FixupURL(url_string, std::string()); - if (!url.is_valid()) - return; - int index = startup_custom_pages_table_model_->RowCount(); - startup_custom_pages_table_model_->Add(index, url); - SaveStartupPagesPref(); -} - -void BrowserOptionsHandler::EditStartupPage(const ListValue* args) { - std::string url_string; - std::string index_string; - int index; - CHECK_EQ(args->GetSize(), 2U); - CHECK(args->GetString(0, &index_string)); - CHECK(base::StringToInt(index_string, &index)); - CHECK(args->GetString(1, &url_string)); - - if (index < 0 || index > startup_custom_pages_table_model_->RowCount()) { - NOTREACHED(); - return; - } - - std::vector<GURL> urls = startup_custom_pages_table_model_->GetURLs(); - urls[index] = URLFixerUpper::FixupURL(url_string, std::string()); - startup_custom_pages_table_model_->SetURLs(urls); - SaveStartupPagesPref(); -} - -void BrowserOptionsHandler::DragDropStartupPage(const ListValue* args) { - CHECK_EQ(args->GetSize(), 2U); - - std::string value; - int to_index; - - CHECK(args->GetString(0, &value)); - base::StringToInt(value, &to_index); - - ListValue* selected; - CHECK(args->GetList(1, &selected)); - - std::vector<int> index_list; - for (size_t i = 0; i < selected->GetSize(); ++i) { - int index; - CHECK(selected->GetString(i, &value)); - base::StringToInt(value, &index); - index_list.push_back(index); - } - - startup_custom_pages_table_model_->MoveURLs(to_index, index_list); - SaveStartupPagesPref(); -} - -void BrowserOptionsHandler::SaveStartupPagesPref() { - PrefService* prefs = Profile::FromWebUI(web_ui())->GetPrefs(); - - SessionStartupPref pref = SessionStartupPref::GetStartupPref(prefs); - pref.urls = startup_custom_pages_table_model_->GetURLs(); - - SessionStartupPref::SetStartupPref(prefs, pref); -} - void BrowserOptionsHandler::RequestAutocompleteSuggestions( const ListValue* args) { string16 input; diff --git a/chrome/browser/ui/webui/options2/browser_options_handler2.h b/chrome/browser/ui/webui/options2/browser_options_handler2.h index c3c0f47..e0ed996 100644 --- a/chrome/browser/ui/webui/options2/browser_options_handler2.h +++ b/chrome/browser/ui/webui/options2/browser_options_handler2.h @@ -29,8 +29,7 @@ class BrowserOptionsHandler : public OptionsPageUIHandler, public ProfileSyncServiceObserver, public AutocompleteControllerDelegate, public ShellIntegration::DefaultWebClientObserver, - public TemplateURLServiceObserver, - public ui::TableModelObserver { + public TemplateURLServiceObserver { public: BrowserOptionsHandler(); virtual ~BrowserOptionsHandler(); @@ -54,12 +53,6 @@ class BrowserOptionsHandler : public OptionsPageUIHandler, // TemplateURLServiceObserver implementation. virtual void OnTemplateURLServiceChanged() OVERRIDE; - // ui::TableModelObserver implementation. - virtual void OnModelChanged() OVERRIDE; - virtual void OnItemsChanged(int start, int length) OVERRIDE; - virtual void OnItemsAdded(int start, int length) OVERRIDE; - virtual void OnItemsRemoved(int start, int length) OVERRIDE; - private: // content::NotificationObserver implementation. virtual void Observe(int type, @@ -72,24 +65,7 @@ class BrowserOptionsHandler : public OptionsPageUIHandler, // Sets the search engine at the given index to be default. Called from WebUI. void SetDefaultSearchEngine(const ListValue* args); - // Removes the startup page at the given indexes. Called from WebUI. - void RemoveStartupPages(const ListValue* args); - - // Adds a startup page with the given URL after the given index. - // Called from WebUI. - void AddStartupPage(const ListValue* args); - - // Changes the startup page at the given index to the given URL. - // Called from WebUI. - void EditStartupPage(const ListValue* args); - - // Sets the startup page set to the current pages. Called from WebUI. - void SetStartupPagesToCurrentPages(const ListValue* args); - - // Writes the current set of startup pages to prefs. Called from WebUI. - void DragDropStartupPage(const ListValue* args); - - // Gets autocomplete suggestions asychronously for the given string. + // Gets autocomplete suggestions asynchronously for the given string. // Called from WebUI. void RequestAutocompleteSuggestions(const ListValue* args); @@ -126,18 +102,12 @@ class BrowserOptionsHandler : public OptionsPageUIHandler, // Updates the UI with the given state for the default browser. void SetDefaultBrowserUIString(int status_string_id); - // Loads the current set of custom startup pages and reports it to the WebUI. - void UpdateStartupPages(); - // Updates the label of the 'Show Home page'. void UpdateHomePageLabel() const; // Loads the possible default search engine list and reports it to the WebUI. void UpdateSearchEngines(); - // Writes the current set of startup pages to prefs. - void SaveStartupPagesPref(); - // Sends an array of Profile objects to javascript. // Each object is of the form: // profileInfo = { @@ -164,11 +134,6 @@ class BrowserOptionsHandler : public OptionsPageUIHandler, TemplateURLService* template_url_service_; // Weak. - // TODO(stuartmorgan): Once there are no other clients of - // CustomHomePagesTableModel, consider changing it to something more like - // TemplateURLService. - scoped_ptr<CustomHomePagesTableModel> startup_custom_pages_table_model_; - scoped_ptr<AutocompleteController> autocomplete_controller_; // Used to get |weak_ptr_| to self for use on the File thread. diff --git a/chrome/browser/ui/webui/options2/options_ui2.cc b/chrome/browser/ui/webui/options2/options_ui2.cc index 793064b..93afc6c 100644 --- a/chrome/browser/ui/webui/options2/options_ui2.cc +++ b/chrome/browser/ui/webui/options2/options_ui2.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -35,6 +35,7 @@ #include "chrome/browser/ui/webui/options2/password_manager_handler2.h" #include "chrome/browser/ui/webui/options2/personal_options_handler2.h" #include "chrome/browser/ui/webui/options2/search_engine_manager_handler2.h" +#include "chrome/browser/ui/webui/options2/startup_pages_handler2.h" #include "chrome/browser/ui/webui/options2/stop_syncing_handler2.h" #include "chrome/browser/ui/webui/options2/web_intents_settings_handler2.h" #include "chrome/browser/ui/webui/theme_source.h" @@ -229,6 +230,7 @@ OptionsUI::OptionsUI(WebContents* contents) AddOptionsPageUIHandler(localized_strings, new PersonalOptionsHandler()); AddOptionsPageUIHandler(localized_strings, new SearchEngineManagerHandler()); AddOptionsPageUIHandler(localized_strings, new ImportDataHandler()); + AddOptionsPageUIHandler(localized_strings, new StartupPagesHandler()); AddOptionsPageUIHandler(localized_strings, new StopSyncingHandler()); AddOptionsPageUIHandler(localized_strings, new OptionsSyncSetupHandler( g_browser_process->profile_manager())); diff --git a/chrome/browser/ui/webui/options2/startup_pages_handler2.cc b/chrome/browser/ui/webui/options2/startup_pages_handler2.cc new file mode 100644 index 0000000..0bb779d --- /dev/null +++ b/chrome/browser/ui/webui/options2/startup_pages_handler2.cc @@ -0,0 +1,259 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ui/webui/options2/startup_pages_handler2.h" + +#include "base/bind.h" +#include "base/bind_helpers.h" +#include "base/string_number_conversions.h" +#include "chrome/browser/autocomplete/autocomplete_controller_delegate.h" +#include "chrome/browser/autocomplete/autocomplete_match.h" +#include "chrome/browser/autocomplete/autocomplete.h" +#include "chrome/browser/custom_home_pages_table_model.h" +#include "chrome/browser/net/url_fixer_upper.h" +#include "chrome/browser/prefs/session_startup_pref.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/common/chrome_notification_types.h" +#include "chrome/common/pref_names.h" +#include "content/public/browser/notification_details.h" +#include "grit/generated_resources.h" + +namespace options2 { + +StartupPagesHandler::StartupPagesHandler() + : autocomplete_controller_(NULL), + startup_custom_pages_table_model_(NULL) { +} + +StartupPagesHandler::~StartupPagesHandler() { + +} + +void StartupPagesHandler::GetLocalizedValues( + DictionaryValue* localized_strings) { + DCHECK(localized_strings); + + static OptionsStringResource resources[] = { + { "startupAddLabel", IDS_OPTIONS_STARTUP_ADD_LABEL }, + { "startupPagesDialogTitle", IDS_OPTIONS2_STARTUP_PAGES_DIALOG_TITLE }, + { "startupUseCurrent", IDS_OPTIONS_STARTUP_USE_CURRENT }, + }; + + RegisterStrings(localized_strings, resources, arraysize(resources)); + +} + +void StartupPagesHandler::RegisterMessages() { + web_ui()->RegisterMessageCallback("removeStartupPages", + base::Bind(&StartupPagesHandler::RemoveStartupPages, + base::Unretained(this))); + web_ui()->RegisterMessageCallback("addStartupPage", + base::Bind(&StartupPagesHandler::AddStartupPage, + base::Unretained(this))); + web_ui()->RegisterMessageCallback("editStartupPage", + base::Bind(&StartupPagesHandler::EditStartupPage, + base::Unretained(this))); + web_ui()->RegisterMessageCallback("setStartupPagesToCurrentPages", + base::Bind(&StartupPagesHandler::SetStartupPagesToCurrentPages, + base::Unretained(this))); + web_ui()->RegisterMessageCallback("dragDropStartupPage", + base::Bind(&StartupPagesHandler::DragDropStartupPage, + base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "requestAutocompleteSuggestionsForStartupPages", + base::Bind(&StartupPagesHandler::RequestAutocompleteSuggestions, + base::Unretained(this))); +} + +void StartupPagesHandler::UpdateStartupPages() { + Profile* profile = Profile::FromWebUI(web_ui()); + const SessionStartupPref startup_pref = + SessionStartupPref::GetStartupPref(profile->GetPrefs()); + startup_custom_pages_table_model_->SetURLs(startup_pref.urls); +} + +void StartupPagesHandler::Initialize() { + Profile* profile = Profile::FromWebUI(web_ui()); + + startup_custom_pages_table_model_.reset( + new CustomHomePagesTableModel(profile)); + startup_custom_pages_table_model_->SetObserver(this); + UpdateStartupPages(); + + pref_change_registrar_.Init(profile->GetPrefs()); + pref_change_registrar_.Add(prefs::kURLsToRestoreOnStartup, this); + + autocomplete_controller_.reset(new AutocompleteController(profile, this)); +} + +void StartupPagesHandler::OnModelChanged() { + ListValue startup_pages; + int page_count = startup_custom_pages_table_model_->RowCount(); + std::vector<GURL> urls = startup_custom_pages_table_model_->GetURLs(); + for (int i = 0; i < page_count; ++i) { + DictionaryValue* entry = new DictionaryValue(); + entry->SetString("title", startup_custom_pages_table_model_->GetText(i, 0)); + entry->SetString("url", urls[i].spec()); + entry->SetString("tooltip", + startup_custom_pages_table_model_->GetTooltip(i)); + entry->SetString("modelIndex", base::IntToString(i)); + startup_pages.Append(entry); + } + + web_ui()->CallJavascriptFunction("StartupOverlay.updateStartupPages", + startup_pages); +} + +void StartupPagesHandler::OnItemsChanged(int start, int length) { + OnModelChanged(); +} + +void StartupPagesHandler::OnItemsAdded(int start, int length) { + OnModelChanged(); +} + +void StartupPagesHandler::OnItemsRemoved(int start, int length) { + OnModelChanged(); +} + +void StartupPagesHandler::Observe( + int type, + const content::NotificationSource& source, + const content::NotificationDetails& details) { + if (type == chrome::NOTIFICATION_PREF_CHANGED) { + std::string* pref = content::Details<std::string>(details).ptr(); + if (*pref == prefs::kURLsToRestoreOnStartup) { + UpdateStartupPages(); + } else { + NOTREACHED(); + } + } else { + NOTREACHED(); + } +} + +void StartupPagesHandler::SetStartupPagesToCurrentPages( + const ListValue* args) { + startup_custom_pages_table_model_->SetToCurrentlyOpenPages(); + SaveStartupPagesPref(); +} + +void StartupPagesHandler::RemoveStartupPages(const ListValue* args) { + for (int i = args->GetSize() - 1; i >= 0; --i) { + std::string string_value; + CHECK(args->GetString(i, &string_value)); + + int selected_index; + base::StringToInt(string_value, &selected_index); + if (selected_index < 0 || + selected_index >= startup_custom_pages_table_model_->RowCount()) { + NOTREACHED(); + return; + } + startup_custom_pages_table_model_->Remove(selected_index); + } + + SaveStartupPagesPref(); +} + +void StartupPagesHandler::AddStartupPage(const ListValue* args) { + std::string url_string; + CHECK_EQ(args->GetSize(), 1U); + CHECK(args->GetString(0, &url_string)); + + GURL url = URLFixerUpper::FixupURL(url_string, std::string()); + if (!url.is_valid()) + return; + int index = startup_custom_pages_table_model_->RowCount(); + startup_custom_pages_table_model_->Add(index, url); + SaveStartupPagesPref(); +} + +void StartupPagesHandler::EditStartupPage(const ListValue* args) { + std::string url_string; + std::string index_string; + int index; + CHECK_EQ(args->GetSize(), 2U); + CHECK(args->GetString(0, &index_string)); + CHECK(base::StringToInt(index_string, &index)); + CHECK(args->GetString(1, &url_string)); + + if (index < 0 || index > startup_custom_pages_table_model_->RowCount()) { + NOTREACHED(); + return; + } + + std::vector<GURL> urls = startup_custom_pages_table_model_->GetURLs(); + urls[index] = URLFixerUpper::FixupURL(url_string, std::string()); + startup_custom_pages_table_model_->SetURLs(urls); + SaveStartupPagesPref(); +} + +void StartupPagesHandler::DragDropStartupPage(const ListValue* args) { + CHECK_EQ(args->GetSize(), 2U); + + std::string value; + int to_index; + + CHECK(args->GetString(0, &value)); + base::StringToInt(value, &to_index); + + ListValue* selected; + CHECK(args->GetList(1, &selected)); + + std::vector<int> index_list; + for (size_t i = 0; i < selected->GetSize(); ++i) { + int index; + CHECK(selected->GetString(i, &value)); + base::StringToInt(value, &index); + index_list.push_back(index); + } + + startup_custom_pages_table_model_->MoveURLs(to_index, index_list); + SaveStartupPagesPref(); +} + +void StartupPagesHandler::SaveStartupPagesPref() { + PrefService* prefs = Profile::FromWebUI(web_ui())->GetPrefs(); + + SessionStartupPref pref = SessionStartupPref::GetStartupPref(prefs); + pref.urls = startup_custom_pages_table_model_->GetURLs(); + + SessionStartupPref::SetStartupPref(prefs, pref); +} + +void StartupPagesHandler::RequestAutocompleteSuggestions( + const ListValue* args) { + string16 input; + CHECK_EQ(args->GetSize(), 1U); + CHECK(args->GetString(0, &input)); + + autocomplete_controller_->Start(input, string16(), true, false, false, + AutocompleteInput::ALL_MATCHES); +} + +void StartupPagesHandler::OnResultChanged(bool default_match_changed) { + const AutocompleteResult& result = autocomplete_controller_->result(); + ListValue suggestions; + for (size_t i = 0; i < result.size(); ++i) { + const AutocompleteMatch& match = result.match_at(i); + AutocompleteMatch::Type type = match.type; + if (type != AutocompleteMatch::HISTORY_URL && + type != AutocompleteMatch::HISTORY_TITLE && + type != AutocompleteMatch::HISTORY_BODY && + type != AutocompleteMatch::HISTORY_KEYWORD && + type != AutocompleteMatch::NAVSUGGEST) + continue; + DictionaryValue* entry = new DictionaryValue(); + entry->SetString("title", match.description); + entry->SetString("displayURL", match.contents); + entry->SetString("url", match.destination_url.spec()); + suggestions.Append(entry); + } + + web_ui()->CallJavascriptFunction( + "StartupOverlay.updateAutocompleteSuggestions", suggestions); +} + +} // namespace options2 diff --git a/chrome/browser/ui/webui/options2/startup_pages_handler2.h b/chrome/browser/ui/webui/options2/startup_pages_handler2.h new file mode 100644 index 0000000..481bfc7 --- /dev/null +++ b/chrome/browser/ui/webui/options2/startup_pages_handler2.h @@ -0,0 +1,96 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_UI_WEBUI_OPTIONS2_STARTUP_PAGES_HANDLER2_H_ +#define CHROME_BROWSER_UI_WEBUI_OPTIONS2_STARTUP_PAGES_HANDLER2_H_ +#pragma once + +#include "base/memory/ref_counted.h" +#include "base/memory/scoped_ptr.h" +#include "base/memory/weak_ptr.h" +#include "chrome/browser/autocomplete/autocomplete_controller_delegate.h" +#include "chrome/browser/prefs/pref_change_registrar.h" +#include "chrome/browser/prefs/pref_member.h" +#include "chrome/browser/ui/webui/options2/options_ui2.h" +#include "ui/base/models/table_model_observer.h" + +class AutocompleteController; +class CustomHomePagesTableModel; +class TemplateURLService; + +namespace options2 { + +// Chrome browser options page UI handler. +class StartupPagesHandler : public OptionsPageUIHandler, + public AutocompleteControllerDelegate, + public ui::TableModelObserver { + public: + StartupPagesHandler(); + virtual ~StartupPagesHandler(); + + virtual void Initialize() OVERRIDE; + + // OptionsPageUIHandler implementation. + virtual void GetLocalizedValues(DictionaryValue* localized_strings) OVERRIDE; + virtual void RegisterMessages() OVERRIDE; + + // AutocompleteControllerDelegate implementation. + virtual void OnResultChanged(bool default_match_changed) OVERRIDE; + + // ui::TableModelObserver implementation. + virtual void OnModelChanged() OVERRIDE; + virtual void OnItemsChanged(int start, int length) OVERRIDE; + virtual void OnItemsAdded(int start, int length) OVERRIDE; + virtual void OnItemsRemoved(int start, int length) OVERRIDE; + + private: + // content::NotificationObserver implementation. + virtual void Observe(int type, + const content::NotificationSource& source, + const content::NotificationDetails& details) OVERRIDE; + + // Removes the startup page at the given indexes. Called from WebUI. + void RemoveStartupPages(const ListValue* args); + + // Adds a startup page with the given URL after the given index. + // Called from WebUI. + void AddStartupPage(const ListValue* args); + + // Changes the startup page at the given index to the given URL. + // Called from WebUI. + void EditStartupPage(const ListValue* args); + + // Sets the startup page set to the current pages. Called from WebUI. + void SetStartupPagesToCurrentPages(const ListValue* args); + + // Writes the current set of startup pages to prefs. Called from WebUI. + void DragDropStartupPage(const ListValue* args); + + // Gets autocomplete suggestions asychronously for the given string. + // Called from WebUI. + void RequestAutocompleteSuggestions(const ListValue* args); + + // Loads the current set of custom startup pages and reports it to the WebUI. + void UpdateStartupPages(); + + // Writes the current set of startup pages to prefs. + void SaveStartupPagesPref(); + + scoped_ptr<AutocompleteController> autocomplete_controller_; + + // Used to observe updates to the preference of the list of URLs to load + // on startup, which can be updated via sync. + PrefChangeRegistrar pref_change_registrar_; + + // TODO(stuartmorgan): Once there are no other clients of + // CustomHomePagesTableModel, consider changing it to something more like + // TemplateURLService. + scoped_ptr<CustomHomePagesTableModel> startup_custom_pages_table_model_; + + DISALLOW_COPY_AND_ASSIGN(StartupPagesHandler); +}; + +} // namespace options2 + +#endif // CHROME_BROWSER_UI_WEBUI_OPTIONS2_STARTUP_PAGES_HANDLER2_H_ |