| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "chrome/browser/ui/webui/options2/browser_options_handler.h" | |
| 6 | |
| 7 #include "base/basictypes.h" | |
| 8 #include "base/bind.h" | |
| 9 #include "base/bind_helpers.h" | |
| 10 #include "base/memory/singleton.h" | |
| 11 #include "base/string_number_conversions.h" | |
| 12 #include "base/utf_string_conversions.h" | |
| 13 #include "base/values.h" | |
| 14 #include "chrome/browser/autocomplete/autocomplete.h" | |
| 15 #include "chrome/browser/autocomplete/autocomplete_match.h" | |
| 16 #include "chrome/browser/browser_process.h" | |
| 17 #include "chrome/browser/custom_home_pages_table_model.h" | |
| 18 #include "chrome/browser/instant/instant_confirm_dialog.h" | |
| 19 #include "chrome/browser/instant/instant_controller.h" | |
| 20 #include "chrome/browser/instant/instant_field_trial.h" | |
| 21 #include "chrome/browser/net/url_fixer_upper.h" | |
| 22 #include "chrome/browser/prefs/pref_service.h" | |
| 23 #include "chrome/browser/prefs/session_startup_pref.h" | |
| 24 #include "chrome/browser/profiles/profile.h" | |
| 25 #include "chrome/browser/search_engines/template_url.h" | |
| 26 #include "chrome/browser/search_engines/template_url_service.h" | |
| 27 #include "chrome/browser/search_engines/template_url_service_factory.h" | |
| 28 #include "chrome/browser/ui/webui/favicon_source.h" | |
| 29 #include "chrome/common/chrome_notification_types.h" | |
| 30 #include "chrome/common/pref_names.h" | |
| 31 #include "chrome/common/url_constants.h" | |
| 32 #include "content/browser/user_metrics.h" | |
| 33 #include "content/public/browser/browser_thread.h" | |
| 34 #include "content/public/browser/notification_details.h" | |
| 35 #include "content/public/browser/notification_source.h" | |
| 36 #include "grit/chromium_strings.h" | |
| 37 #include "grit/generated_resources.h" | |
| 38 #include "ui/base/l10n/l10n_util.h" | |
| 39 | |
| 40 BrowserOptionsHandler::BrowserOptionsHandler() | |
| 41 : template_url_service_(NULL), startup_custom_pages_table_model_(NULL) { | |
| 42 #if !defined(OS_MACOSX) | |
| 43 default_browser_worker_ = new ShellIntegration::DefaultBrowserWorker(this); | |
| 44 #endif | |
| 45 } | |
| 46 | |
| 47 BrowserOptionsHandler::~BrowserOptionsHandler() { | |
| 48 if (default_browser_worker_.get()) | |
| 49 default_browser_worker_->ObserverDestroyed(); | |
| 50 if (template_url_service_) | |
| 51 template_url_service_->RemoveObserver(this); | |
| 52 } | |
| 53 | |
| 54 void BrowserOptionsHandler::GetLocalizedValues( | |
| 55 DictionaryValue* localized_strings) { | |
| 56 DCHECK(localized_strings); | |
| 57 | |
| 58 static OptionsStringResource resources[] = { | |
| 59 { "startupGroupName", IDS_OPTIONS_STARTUP_GROUP_NAME }, | |
| 60 { "startupShowDefaultAndNewTab", | |
| 61 IDS_OPTIONS_STARTUP_SHOW_DEFAULT_AND_NEWTAB}, | |
| 62 { "startupShowLastSession", IDS_OPTIONS_STARTUP_SHOW_LAST_SESSION }, | |
| 63 { "startupShowPages", IDS_OPTIONS_STARTUP_SHOW_PAGES }, | |
| 64 { "startupAddLabel", IDS_OPTIONS_STARTUP_ADD_LABEL }, | |
| 65 { "startupUseCurrent", IDS_OPTIONS_STARTUP_USE_CURRENT }, | |
| 66 { "homepageGroupName", IDS_OPTIONS_HOMEPAGE_GROUP_NAME }, | |
| 67 { "homepageUseNewTab", IDS_OPTIONS_HOMEPAGE_USE_NEWTAB }, | |
| 68 { "homepageUseURL", IDS_OPTIONS_HOMEPAGE_USE_URL }, | |
| 69 { "toolbarGroupName", IDS_OPTIONS_TOOLBAR_GROUP_NAME }, | |
| 70 { "toolbarShowHomeButton", IDS_OPTIONS_TOOLBAR_SHOW_HOME_BUTTON }, | |
| 71 { "toolbarShowBookmarksBar", IDS_OPTIONS_TOOLBAR_SHOW_BOOKMARKS_BAR }, | |
| 72 { "defaultSearchGroupName", IDS_OPTIONS_DEFAULTSEARCH_GROUP_NAME }, | |
| 73 { "defaultSearchManageEngines", IDS_OPTIONS_DEFAULTSEARCH_MANAGE_ENGINES }, | |
| 74 { "instantName", IDS_INSTANT_PREF }, | |
| 75 { "instantWarningText", IDS_INSTANT_PREF_WARNING }, | |
| 76 { "instantConfirmTitle", IDS_INSTANT_OPT_IN_TITLE }, | |
| 77 { "instantConfirmMessage", IDS_INSTANT_OPT_IN_MESSAGE }, | |
| 78 { "defaultBrowserGroupName", IDS_OPTIONS_DEFAULTBROWSER_GROUP_NAME }, | |
| 79 }; | |
| 80 | |
| 81 RegisterStrings(localized_strings, resources, arraysize(resources)); | |
| 82 RegisterTitle(localized_strings, "browserPage", | |
| 83 IDS_OPTIONS_GENERAL_TAB_LABEL); | |
| 84 | |
| 85 localized_strings->SetString("instantLearnMoreLink", | |
| 86 ASCIIToUTF16(browser::InstantLearnMoreURL().spec())); | |
| 87 localized_strings->SetString("defaultBrowserUnknown", | |
| 88 l10n_util::GetStringFUTF16(IDS_OPTIONS_DEFAULTBROWSER_UNKNOWN, | |
| 89 l10n_util::GetStringUTF16(IDS_PRODUCT_NAME))); | |
| 90 localized_strings->SetString("defaultBrowserUseAsDefault", | |
| 91 l10n_util::GetStringFUTF16(IDS_OPTIONS_DEFAULTBROWSER_USEASDEFAULT, | |
| 92 l10n_util::GetStringUTF16(IDS_PRODUCT_NAME))); | |
| 93 } | |
| 94 | |
| 95 void BrowserOptionsHandler::RegisterMessages() { | |
| 96 web_ui_->RegisterMessageCallback("becomeDefaultBrowser", | |
| 97 base::Bind(&BrowserOptionsHandler::BecomeDefaultBrowser, | |
| 98 base::Unretained(this))); | |
| 99 web_ui_->RegisterMessageCallback("setDefaultSearchEngine", | |
| 100 base::Bind(&BrowserOptionsHandler::SetDefaultSearchEngine, | |
| 101 base::Unretained(this))); | |
| 102 web_ui_->RegisterMessageCallback("removeStartupPages", | |
| 103 base::Bind(&BrowserOptionsHandler::RemoveStartupPages, | |
| 104 base::Unretained(this))); | |
| 105 web_ui_->RegisterMessageCallback("addStartupPage", | |
| 106 base::Bind(&BrowserOptionsHandler::AddStartupPage, | |
| 107 base::Unretained(this))); | |
| 108 web_ui_->RegisterMessageCallback("editStartupPage", | |
| 109 base::Bind(&BrowserOptionsHandler::EditStartupPage, | |
| 110 base::Unretained(this))); | |
| 111 web_ui_->RegisterMessageCallback("setStartupPagesToCurrentPages", | |
| 112 base::Bind(&BrowserOptionsHandler::SetStartupPagesToCurrentPages, | |
| 113 base::Unretained(this))); | |
| 114 web_ui_->RegisterMessageCallback("dragDropStartupPage", | |
| 115 base::Bind(&BrowserOptionsHandler::DragDropStartupPage, | |
| 116 base::Unretained(this))); | |
| 117 web_ui_->RegisterMessageCallback("requestAutocompleteSuggestions", | |
| 118 base::Bind(&BrowserOptionsHandler::RequestAutocompleteSuggestions, | |
| 119 base::Unretained(this))); | |
| 120 web_ui_->RegisterMessageCallback("enableInstant", | |
| 121 base::Bind(&BrowserOptionsHandler::EnableInstant, | |
| 122 base::Unretained(this))); | |
| 123 web_ui_->RegisterMessageCallback("disableInstant", | |
| 124 base::Bind(&BrowserOptionsHandler::DisableInstant, | |
| 125 base::Unretained(this))); | |
| 126 web_ui_->RegisterMessageCallback("getInstantFieldTrialStatus", | |
| 127 base::Bind(&BrowserOptionsHandler::GetInstantFieldTrialStatus, | |
| 128 base::Unretained(this))); | |
| 129 } | |
| 130 | |
| 131 void BrowserOptionsHandler::Initialize() { | |
| 132 Profile* profile = Profile::FromWebUI(web_ui_); | |
| 133 | |
| 134 // Create our favicon data source. | |
| 135 profile->GetChromeURLDataManager()->AddDataSource( | |
| 136 new FaviconSource(profile, FaviconSource::FAVICON)); | |
| 137 | |
| 138 homepage_.Init(prefs::kHomePage, profile->GetPrefs(), NULL); | |
| 139 default_browser_policy_.Init(prefs::kDefaultBrowserSettingEnabled, | |
| 140 g_browser_process->local_state(), | |
| 141 this); | |
| 142 UpdateDefaultBrowserState(); | |
| 143 | |
| 144 startup_custom_pages_table_model_.reset( | |
| 145 new CustomHomePagesTableModel(profile)); | |
| 146 startup_custom_pages_table_model_->SetObserver(this); | |
| 147 UpdateStartupPages(); | |
| 148 | |
| 149 pref_change_registrar_.Init(profile->GetPrefs()); | |
| 150 pref_change_registrar_.Add(prefs::kURLsToRestoreOnStartup, this); | |
| 151 | |
| 152 UpdateSearchEngines(); | |
| 153 | |
| 154 autocomplete_controller_.reset(new AutocompleteController(profile, this)); | |
| 155 } | |
| 156 | |
| 157 void BrowserOptionsHandler::UpdateDefaultBrowserState() { | |
| 158 // Check for side-by-side first. | |
| 159 if (!ShellIntegration::CanSetAsDefaultBrowser()) { | |
| 160 SetDefaultBrowserUIString(IDS_OPTIONS_DEFAULTBROWSER_SXS); | |
| 161 return; | |
| 162 } | |
| 163 | |
| 164 #if defined(OS_MACOSX) | |
| 165 ShellIntegration::DefaultWebClientState state = | |
| 166 ShellIntegration::IsDefaultBrowser(); | |
| 167 int status_string_id; | |
| 168 if (state == ShellIntegration::IS_DEFAULT_WEB_CLIENT) | |
| 169 status_string_id = IDS_OPTIONS_DEFAULTBROWSER_DEFAULT; | |
| 170 else if (state == ShellIntegration::NOT_DEFAULT_WEB_CLIENT) | |
| 171 status_string_id = IDS_OPTIONS_DEFAULTBROWSER_NOTDEFAULT; | |
| 172 else | |
| 173 status_string_id = IDS_OPTIONS_DEFAULTBROWSER_UNKNOWN; | |
| 174 | |
| 175 SetDefaultBrowserUIString(status_string_id); | |
| 176 #else | |
| 177 default_browser_worker_->StartCheckIsDefault(); | |
| 178 #endif | |
| 179 } | |
| 180 | |
| 181 void BrowserOptionsHandler::BecomeDefaultBrowser(const ListValue* args) { | |
| 182 // If the default browser setting is managed then we should not be able to | |
| 183 // call this function. | |
| 184 if (default_browser_policy_.IsManaged()) | |
| 185 return; | |
| 186 | |
| 187 UserMetrics::RecordAction(UserMetricsAction("Options_SetAsDefaultBrowser")); | |
| 188 #if defined(OS_MACOSX) | |
| 189 if (ShellIntegration::SetAsDefaultBrowser()) | |
| 190 UpdateDefaultBrowserState(); | |
| 191 #else | |
| 192 default_browser_worker_->StartSetAsDefault(); | |
| 193 // Callback takes care of updating UI. | |
| 194 #endif | |
| 195 | |
| 196 // If the user attempted to make Chrome the default browser, then he/she | |
| 197 // arguably wants to be notified when that changes. | |
| 198 PrefService* prefs = Profile::FromWebUI(web_ui_)->GetPrefs(); | |
| 199 prefs->SetBoolean(prefs::kCheckDefaultBrowser, true); | |
| 200 } | |
| 201 | |
| 202 int BrowserOptionsHandler::StatusStringIdForState( | |
| 203 ShellIntegration::DefaultWebClientState state) { | |
| 204 if (state == ShellIntegration::IS_DEFAULT_WEB_CLIENT) | |
| 205 return IDS_OPTIONS_DEFAULTBROWSER_DEFAULT; | |
| 206 if (state == ShellIntegration::NOT_DEFAULT_WEB_CLIENT) | |
| 207 return IDS_OPTIONS_DEFAULTBROWSER_NOTDEFAULT; | |
| 208 return IDS_OPTIONS_DEFAULTBROWSER_UNKNOWN; | |
| 209 } | |
| 210 | |
| 211 void BrowserOptionsHandler::SetDefaultWebClientUIState( | |
| 212 ShellIntegration::DefaultWebClientUIState state) { | |
| 213 int status_string_id; | |
| 214 if (state == ShellIntegration::STATE_IS_DEFAULT) | |
| 215 status_string_id = IDS_OPTIONS_DEFAULTBROWSER_DEFAULT; | |
| 216 else if (state == ShellIntegration::STATE_NOT_DEFAULT) | |
| 217 status_string_id = IDS_OPTIONS_DEFAULTBROWSER_NOTDEFAULT; | |
| 218 else if (state == ShellIntegration::STATE_UNKNOWN) | |
| 219 status_string_id = IDS_OPTIONS_DEFAULTBROWSER_UNKNOWN; | |
| 220 else | |
| 221 return; // Still processing. | |
| 222 | |
| 223 SetDefaultBrowserUIString(status_string_id); | |
| 224 } | |
| 225 | |
| 226 void BrowserOptionsHandler::SetDefaultBrowserUIString(int status_string_id) { | |
| 227 scoped_ptr<Value> status_string(Value::CreateStringValue( | |
| 228 l10n_util::GetStringFUTF16(status_string_id, | |
| 229 l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)))); | |
| 230 | |
| 231 scoped_ptr<Value> is_default(Value::CreateBooleanValue( | |
| 232 status_string_id == IDS_OPTIONS_DEFAULTBROWSER_DEFAULT)); | |
| 233 | |
| 234 scoped_ptr<Value> can_be_default(Value::CreateBooleanValue( | |
| 235 !default_browser_policy_.IsManaged() && | |
| 236 (status_string_id == IDS_OPTIONS_DEFAULTBROWSER_DEFAULT || | |
| 237 status_string_id == IDS_OPTIONS_DEFAULTBROWSER_NOTDEFAULT))); | |
| 238 | |
| 239 web_ui_->CallJavascriptFunction("BrowserOptions.updateDefaultBrowserState", | |
| 240 *status_string, *is_default, *can_be_default); | |
| 241 } | |
| 242 | |
| 243 void BrowserOptionsHandler::OnTemplateURLServiceChanged() { | |
| 244 if (!template_url_service_ || !template_url_service_->loaded()) | |
| 245 return; | |
| 246 | |
| 247 const TemplateURL* default_url = | |
| 248 template_url_service_->GetDefaultSearchProvider(); | |
| 249 | |
| 250 int default_index = 0; | |
| 251 ListValue search_engines; | |
| 252 std::vector<const TemplateURL*> model_urls = | |
| 253 template_url_service_->GetTemplateURLs(); | |
| 254 for (size_t i = 0; i < model_urls.size(); ++i) { | |
| 255 if (!model_urls[i]->ShowInDefaultList()) | |
| 256 continue; | |
| 257 | |
| 258 DictionaryValue* entry = new DictionaryValue(); | |
| 259 entry->SetString("name", model_urls[i]->short_name()); | |
| 260 entry->SetInteger("index", i); | |
| 261 search_engines.Append(entry); | |
| 262 if (model_urls[i] == default_url) | |
| 263 default_index = i; | |
| 264 } | |
| 265 | |
| 266 scoped_ptr<Value> default_value(Value::CreateIntegerValue(default_index)); | |
| 267 scoped_ptr<Value> default_managed(Value::CreateBooleanValue( | |
| 268 template_url_service_->is_default_search_managed())); | |
| 269 | |
| 270 web_ui_->CallJavascriptFunction("BrowserOptions.updateSearchEngines", | |
| 271 search_engines, *default_value, | |
| 272 *default_managed); | |
| 273 } | |
| 274 | |
| 275 void BrowserOptionsHandler::SetDefaultSearchEngine(const ListValue* args) { | |
| 276 int selected_index = -1; | |
| 277 if (!ExtractIntegerValue(args, &selected_index)) { | |
| 278 NOTREACHED(); | |
| 279 return; | |
| 280 } | |
| 281 | |
| 282 std::vector<const TemplateURL*> model_urls = | |
| 283 template_url_service_->GetTemplateURLs(); | |
| 284 if (selected_index >= 0 && | |
| 285 selected_index < static_cast<int>(model_urls.size())) | |
| 286 template_url_service_->SetDefaultSearchProvider(model_urls[selected_index]); | |
| 287 | |
| 288 UserMetrics::RecordAction(UserMetricsAction("Options_SearchEngineChanged")); | |
| 289 } | |
| 290 | |
| 291 void BrowserOptionsHandler::UpdateSearchEngines() { | |
| 292 template_url_service_ = | |
| 293 TemplateURLServiceFactory::GetForProfile(Profile::FromWebUI(web_ui_)); | |
| 294 if (template_url_service_) { | |
| 295 template_url_service_->Load(); | |
| 296 template_url_service_->AddObserver(this); | |
| 297 OnTemplateURLServiceChanged(); | |
| 298 } | |
| 299 } | |
| 300 | |
| 301 void BrowserOptionsHandler::UpdateStartupPages() { | |
| 302 Profile* profile = Profile::FromWebUI(web_ui_); | |
| 303 const SessionStartupPref startup_pref = | |
| 304 SessionStartupPref::GetStartupPref(profile->GetPrefs()); | |
| 305 startup_custom_pages_table_model_->SetURLs(startup_pref.urls); | |
| 306 } | |
| 307 | |
| 308 void BrowserOptionsHandler::OnModelChanged() { | |
| 309 ListValue startup_pages; | |
| 310 int page_count = startup_custom_pages_table_model_->RowCount(); | |
| 311 std::vector<GURL> urls = startup_custom_pages_table_model_->GetURLs(); | |
| 312 for (int i = 0; i < page_count; ++i) { | |
| 313 DictionaryValue* entry = new DictionaryValue(); | |
| 314 entry->SetString("title", startup_custom_pages_table_model_->GetText(i, 0)); | |
| 315 entry->SetString("url", urls[i].spec()); | |
| 316 entry->SetString("tooltip", | |
| 317 startup_custom_pages_table_model_->GetTooltip(i)); | |
| 318 entry->SetString("modelIndex", base::IntToString(i)); | |
| 319 startup_pages.Append(entry); | |
| 320 } | |
| 321 | |
| 322 web_ui_->CallJavascriptFunction("BrowserOptions.updateStartupPages", | |
| 323 startup_pages); | |
| 324 } | |
| 325 | |
| 326 void BrowserOptionsHandler::OnItemsChanged(int start, int length) { | |
| 327 OnModelChanged(); | |
| 328 } | |
| 329 | |
| 330 void BrowserOptionsHandler::OnItemsAdded(int start, int length) { | |
| 331 OnModelChanged(); | |
| 332 } | |
| 333 | |
| 334 void BrowserOptionsHandler::OnItemsRemoved(int start, int length) { | |
| 335 OnModelChanged(); | |
| 336 } | |
| 337 | |
| 338 void BrowserOptionsHandler::Observe( | |
| 339 int type, | |
| 340 const content::NotificationSource& source, | |
| 341 const content::NotificationDetails& details) { | |
| 342 if (type == chrome::NOTIFICATION_PREF_CHANGED) { | |
| 343 std::string* pref = content::Details<std::string>(details).ptr(); | |
| 344 if (*pref == prefs::kDefaultBrowserSettingEnabled) { | |
| 345 UpdateDefaultBrowserState(); | |
| 346 } else if (*pref == prefs::kURLsToRestoreOnStartup) { | |
| 347 UpdateStartupPages(); | |
| 348 } else { | |
| 349 NOTREACHED(); | |
| 350 } | |
| 351 } else { | |
| 352 NOTREACHED(); | |
| 353 } | |
| 354 } | |
| 355 | |
| 356 void BrowserOptionsHandler::SetStartupPagesToCurrentPages( | |
| 357 const ListValue* args) { | |
| 358 startup_custom_pages_table_model_->SetToCurrentlyOpenPages(); | |
| 359 SaveStartupPagesPref(); | |
| 360 } | |
| 361 | |
| 362 void BrowserOptionsHandler::RemoveStartupPages(const ListValue* args) { | |
| 363 for (int i = args->GetSize() - 1; i >= 0; --i) { | |
| 364 std::string string_value; | |
| 365 CHECK(args->GetString(i, &string_value)); | |
| 366 | |
| 367 int selected_index; | |
| 368 base::StringToInt(string_value, &selected_index); | |
| 369 if (selected_index < 0 || | |
| 370 selected_index >= startup_custom_pages_table_model_->RowCount()) { | |
| 371 NOTREACHED(); | |
| 372 return; | |
| 373 } | |
| 374 startup_custom_pages_table_model_->Remove(selected_index); | |
| 375 } | |
| 376 | |
| 377 SaveStartupPagesPref(); | |
| 378 } | |
| 379 | |
| 380 void BrowserOptionsHandler::AddStartupPage(const ListValue* args) { | |
| 381 std::string url_string; | |
| 382 CHECK_EQ(args->GetSize(), 1U); | |
| 383 CHECK(args->GetString(0, &url_string)); | |
| 384 | |
| 385 GURL url = URLFixerUpper::FixupURL(url_string, std::string()); | |
| 386 if (!url.is_valid()) | |
| 387 return; | |
| 388 int index = startup_custom_pages_table_model_->RowCount(); | |
| 389 startup_custom_pages_table_model_->Add(index, url); | |
| 390 SaveStartupPagesPref(); | |
| 391 } | |
| 392 | |
| 393 void BrowserOptionsHandler::EditStartupPage(const ListValue* args) { | |
| 394 std::string url_string; | |
| 395 std::string index_string; | |
| 396 int index; | |
| 397 CHECK_EQ(args->GetSize(), 2U); | |
| 398 CHECK(args->GetString(0, &index_string)); | |
| 399 CHECK(base::StringToInt(index_string, &index)); | |
| 400 CHECK(args->GetString(1, &url_string)); | |
| 401 | |
| 402 if (index < 0 || index > startup_custom_pages_table_model_->RowCount()) { | |
| 403 NOTREACHED(); | |
| 404 return; | |
| 405 } | |
| 406 | |
| 407 std::vector<GURL> urls = startup_custom_pages_table_model_->GetURLs(); | |
| 408 urls[index] = URLFixerUpper::FixupURL(url_string, std::string()); | |
| 409 startup_custom_pages_table_model_->SetURLs(urls); | |
| 410 SaveStartupPagesPref(); | |
| 411 } | |
| 412 | |
| 413 void BrowserOptionsHandler::DragDropStartupPage(const ListValue* args) { | |
| 414 CHECK_EQ(args->GetSize(), 2U); | |
| 415 | |
| 416 std::string value; | |
| 417 int to_index; | |
| 418 | |
| 419 CHECK(args->GetString(0, &value)); | |
| 420 base::StringToInt(value, &to_index); | |
| 421 | |
| 422 ListValue* selected; | |
| 423 CHECK(args->GetList(1, &selected)); | |
| 424 | |
| 425 std::vector<int> index_list; | |
| 426 for (size_t i = 0; i < selected->GetSize(); ++i) { | |
| 427 int index; | |
| 428 CHECK(selected->GetString(i, &value)); | |
| 429 base::StringToInt(value, &index); | |
| 430 index_list.push_back(index); | |
| 431 } | |
| 432 | |
| 433 startup_custom_pages_table_model_->MoveURLs(to_index, index_list); | |
| 434 SaveStartupPagesPref(); | |
| 435 } | |
| 436 | |
| 437 void BrowserOptionsHandler::SaveStartupPagesPref() { | |
| 438 PrefService* prefs = Profile::FromWebUI(web_ui_)->GetPrefs(); | |
| 439 | |
| 440 SessionStartupPref pref = SessionStartupPref::GetStartupPref(prefs); | |
| 441 pref.urls = startup_custom_pages_table_model_->GetURLs(); | |
| 442 | |
| 443 SessionStartupPref::SetStartupPref(prefs, pref); | |
| 444 } | |
| 445 | |
| 446 void BrowserOptionsHandler::RequestAutocompleteSuggestions( | |
| 447 const ListValue* args) { | |
| 448 string16 input; | |
| 449 CHECK_EQ(args->GetSize(), 1U); | |
| 450 CHECK(args->GetString(0, &input)); | |
| 451 | |
| 452 autocomplete_controller_->Start(input, string16(), true, false, false, | |
| 453 AutocompleteInput::ALL_MATCHES); | |
| 454 } | |
| 455 | |
| 456 void BrowserOptionsHandler::EnableInstant(const ListValue* args) { | |
| 457 InstantController::Enable(Profile::FromWebUI(web_ui_)); | |
| 458 } | |
| 459 | |
| 460 void BrowserOptionsHandler::DisableInstant(const ListValue* args) { | |
| 461 InstantController::Disable(Profile::FromWebUI(web_ui_)); | |
| 462 } | |
| 463 | |
| 464 void BrowserOptionsHandler::GetInstantFieldTrialStatus(const ListValue* args) { | |
| 465 Profile* profile = Profile::FromWebUI(web_ui_); | |
| 466 base::FundamentalValue enabled( | |
| 467 InstantFieldTrial::IsInstantExperiment(profile) && | |
| 468 !InstantFieldTrial::IsHiddenExperiment(profile)); | |
| 469 web_ui_->CallJavascriptFunction("BrowserOptions.setInstantFieldTrialStatus", | |
| 470 enabled); | |
| 471 } | |
| 472 | |
| 473 void BrowserOptionsHandler::OnResultChanged(bool default_match_changed) { | |
| 474 const AutocompleteResult& result = autocomplete_controller_->result(); | |
| 475 ListValue suggestions; | |
| 476 for (size_t i = 0; i < result.size(); ++i) { | |
| 477 const AutocompleteMatch& match = result.match_at(i); | |
| 478 AutocompleteMatch::Type type = match.type; | |
| 479 if (type != AutocompleteMatch::HISTORY_URL && | |
| 480 type != AutocompleteMatch::HISTORY_TITLE && | |
| 481 type != AutocompleteMatch::HISTORY_BODY && | |
| 482 type != AutocompleteMatch::HISTORY_KEYWORD && | |
| 483 type != AutocompleteMatch::NAVSUGGEST) | |
| 484 continue; | |
| 485 DictionaryValue* entry = new DictionaryValue(); | |
| 486 entry->SetString("title", match.description); | |
| 487 entry->SetString("displayURL", match.contents); | |
| 488 entry->SetString("url", match.destination_url.spec()); | |
| 489 suggestions.Append(entry); | |
| 490 } | |
| 491 | |
| 492 web_ui_->CallJavascriptFunction( | |
| 493 "BrowserOptions.updateAutocompleteSuggestions", suggestions); | |
| 494 } | |
| OLD | NEW |