summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/webui
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/ui/webui')
-rw-r--r--chrome/browser/ui/webui/options2/browser_options_handler2.cc156
-rw-r--r--chrome/browser/ui/webui/options2/browser_options_handler2.h39
-rw-r--r--chrome/browser/ui/webui/options2/options_ui2.cc4
-rw-r--r--chrome/browser/ui/webui/options2/startup_pages_handler2.cc259
-rw-r--r--chrome/browser/ui/webui/options2/startup_pages_handler2.h96
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_