15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/options/browser_options_handler.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind_helpers.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h"
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/environment.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/singleton.h"
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/metrics/field_trial.h"
16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/metrics/histogram.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h"
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/prefs/scoped_user_pref_update.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/stl_util.h"
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_number_conversions.h"
22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/value_conversions.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/auto_launch_trial.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h"
277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_page_zoom.h"
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/custom_home_pages_table_model.h"
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/download/download_prefs.h"
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/gpu/gpu_mode_manager.h"
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/lifetime/application_lifetime.h"
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/metrics/chrome_metrics_service_accessor.h"
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/metrics/metrics_reporting_state.h"
356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/net/prediction_options.h"
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prefs/session_startup_pref.h"
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/printing/cloud_print/cloud_print_proxy_service.h"
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/printing/cloud_print/cloud_print_proxy_service_factory.h"
39868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
40c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/profiles/profile_avatar_icon_util.h"
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_info_cache.h"
4268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h"
43868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/profiles/profile_metrics.h"
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_shortcut_manager.h"
459ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/profiles/profile_window.h"
469ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/profiles/profiles_state.h"
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/search/hotword_service.h"
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/search/hotword_service_factory.h"
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/search/search.h"
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/template_url_service_factory.h"
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/signin/easy_unlock_service.h"
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/signin/signin_manager_factory.h"
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/profile_sync_service.h"
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/profile_sync_service_factory.h"
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/sync_ui_util.h"
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/themes/theme_service.h"
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/themes/theme_service_factory.h"
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_finder.h"
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/chrome_select_file_policy.h"
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/host_desktop.h"
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/favicon_source.h"
6268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/ui/webui/options/options_handlers_helper.h"
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_constants.h"
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_paths.h"
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h"
66c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/common/extensions/extension_constants.h"
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h"
691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/chromium_strings.h"
701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/generated_resources.h"
711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/locale_settings.h"
722385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "chromeos/chromeos_switches.h"
73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url.h"
74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url_service.h"
75e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "components/signin/core/browser/signin_manager.h"
766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/signin/core/common/profile_management_switches.h"
77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/user_manager/user_type.h"
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h"
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/download_manager.h"
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_controller.h"
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_details.h"
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h"
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_source.h"
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_types.h"
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/url_data_source.h"
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/user_metrics.h"
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h"
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/page_zoom.h"
89010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "extensions/browser/extension_registry.h"
90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "google_apis/gaia/gaia_auth_util.h"
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "google_apis/gaia/google_service_auth_error.h"
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/skia/include/core/SkBitmap.h"
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/base/webui/web_ui_util.h"
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_CHROMEOS)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/options/advanced_options_utils.h"
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
1018bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "ash/ash_switches.h"
102c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "ash/desktop_background/user_wallpaper_delegate.h"
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/magnifier/magnifier_constants.h"
104c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "ash/shell.h"
1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/browser_process_platform_part.h"
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/accessibility/accessibility_util.h"
10723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chrome/browser/chromeos/chromeos_utils.h"
108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h"
1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chromeos/profiles/profile_helper.h"
111effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/chromeos/reset/metrics.h"
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h"
1130f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/chromeos/system/timezone_util.h"
114a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/policy/profile_policy_connector.h"
115a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/policy/profile_policy_connector_factory.h"
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_window.h"
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/dbus_thread_manager.h"
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/power_manager_client.h"
119a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/policy_map.h"
120a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/policy_namespace.h"
121a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/policy_service.h"
1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/user_manager/user.h"
1236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/user_manager/user_manager.h"
124a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "policy/policy_constants.h"
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/image/image_skia.h"
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // defined(OS_CHROMEOS)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
129c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/extensions/settings_api_helpers.h"
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/auto_launch_util.h"
131010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "content/public/browser/browser_url_handler.h"
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // defined(OS_WIN)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#if defined(ENABLE_SERVICE_DISCOVERY)
1354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/local_discovery/privet_notifications.h"
1364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif
1374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::UserMetricsAction;
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserContext;
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread;
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::DownloadManager;
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::OpenURLParams;
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::Referrer;
144010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)using extensions::Extension;
145010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)using extensions::ExtensionRegistry;
146010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
147010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace {
148010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
149010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#if defined(OS_WIN)
150010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void AppendExtensionData(const std::string& key,
151010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                         const Extension* extension,
152010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                         base::DictionaryValue* dict) {
153010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<base::DictionaryValue> details(new base::DictionaryValue);
154010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  details->SetString("id", extension ? extension->id() : std::string());
155010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  details->SetString("name", extension ? extension->name() : std::string());
156010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  dict->Set(key, details.release());
157010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
158010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif  // defined(OS_WIN)
159010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
160010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}  // namespace
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace options {
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowserOptionsHandler::BrowserOptionsHandler()
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : page_initialized_(false),
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      template_url_service_(NULL),
1674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      cloud_print_mdns_ui_enabled_(false),
168effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      signin_observer_(this),
16968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      weak_ptr_factory_(this) {
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  default_browser_worker_ = new ShellIntegration::DefaultBrowserWorker(this);
171c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch
17223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#if defined(ENABLE_SERVICE_DISCOVERY)
1736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  cloud_print_mdns_ui_enabled_ = true;
17423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#endif  // defined(ENABLE_SERVICE_DISCOVERY)
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowserOptionsHandler::~BrowserOptionsHandler() {
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProfileSyncService* sync_service(ProfileSyncServiceFactory::
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetInstance()->GetForProfile(Profile::FromWebUI(web_ui())));
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (sync_service)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sync_service->RemoveObserver(this);
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (default_browser_worker_.get())
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default_browser_worker_->ObserverDestroyed();
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (template_url_service_)
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    template_url_service_->RemoveObserver(this);
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // There may be pending file dialogs, we need to tell them that we've gone
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // away so they don't try and call back to us.
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (select_folder_dialog_.get())
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    select_folder_dialog_->ListenerDestroyed();
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::GetLocalizedValues(base::DictionaryValue* values) {
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(values);
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#if defined(OS_CHROMEOS)
19703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  const int device_type_resource_id = chromeos::GetChromeDeviceTypeResourceId();
19803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#else
19903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // TODO(isherman): Set an appropriate device name for non-ChromeOS devices.
20003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  const int device_type_resource_id = IDS_EASY_UNLOCK_GENERIC_DEVICE_TYPE;
20103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#endif  // defined(OS_CHROMEOS)
20203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static OptionsStringResource resources[] = {
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "advancedSectionTitleCloudPrint", IDS_GOOGLE_CLOUD_PRINT },
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "currentUserOnly", IDS_OPTIONS_CURRENT_USER_ONLY },
2060529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    { "advancedSectionTitleCertificates",
2070529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      IDS_OPTIONS_ADVANCED_SECTION_TITLE_CERTIFICATES },
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "advancedSectionTitleContent",
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_ADVANCED_SECTION_TITLE_CONTENT },
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "advancedSectionTitleLanguages",
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_ADVANCED_SECTION_TITLE_LANGUAGES },
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "advancedSectionTitleNetwork",
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_ADVANCED_SECTION_TITLE_NETWORK },
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "advancedSectionTitlePrivacy",
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_ADVANCED_SECTION_TITLE_PRIVACY },
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "autofillEnabled", IDS_OPTIONS_AUTOFILL_ENABLE },
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "autologinEnabled", IDS_OPTIONS_PASSWORDS_AUTOLOGIN },
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "autoOpenFileTypesInfo", IDS_OPTIONS_OPEN_FILE_TYPES_AUTOMATICALLY },
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "autoOpenFileTypesResetToDefault",
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_AUTOOPENFILETYPES_RESETTODEFAULT },
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "changeHomePage", IDS_OPTIONS_CHANGE_HOME_PAGE },
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "certificatesManageButton", IDS_OPTIONS_CERTIFICATES_MANAGE_BUTTON },
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "customizeSync", IDS_OPTIONS_CUSTOMIZE_SYNC_BUTTON_LABEL },
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "defaultFontSizeLabel", IDS_OPTIONS_DEFAULT_FONT_SIZE_LABEL },
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "defaultSearchManageEngines", IDS_OPTIONS_DEFAULTSEARCH_MANAGE_ENGINES },
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "defaultZoomFactorLabel", IDS_OPTIONS_DEFAULT_ZOOM_LEVEL_LABEL },
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "disableGData", IDS_OPTIONS_DISABLE_GDATA },
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "disableWebServices", IDS_OPTIONS_DISABLE_WEB_SERVICES },
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "displayOptions",
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_SETTINGS_DISPLAY_OPTIONS_BUTTON_LABEL },
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "doNotTrack", IDS_OPTIONS_ENABLE_DO_NOT_TRACK },
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "doNotTrackConfirmMessage", IDS_OPTIONS_ENABLE_DO_NOT_TRACK_BUBBLE_TEXT },
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "doNotTrackConfirmEnable",
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       IDS_OPTIONS_ENABLE_DO_NOT_TRACK_BUBBLE_ENABLE },
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "doNotTrackConfirmDisable",
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       IDS_OPTIONS_ENABLE_DO_NOT_TRACK_BUBBLE_DISABLE },
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "downloadLocationAskForSaveLocation",
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_DOWNLOADLOCATION_ASKFORSAVELOCATION },
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "downloadLocationBrowseTitle",
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_DOWNLOADLOCATION_BROWSE_TITLE },
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "downloadLocationChangeButton",
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_DOWNLOADLOCATION_CHANGE_BUTTON },
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "downloadLocationGroupName", IDS_OPTIONS_DOWNLOADLOCATION_GROUP_NAME },
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "enableLogging", IDS_OPTIONS_ENABLE_LOGGING },
2495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    { "metricsReportingResetRestart", IDS_OPTIONS_ENABLE_LOGGING_RESTART },
25003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    { "easyUnlockDescription", IDS_OPTIONS_EASY_UNLOCK_DESCRIPTION,
25103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      device_type_resource_id },
25223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    { "easyUnlockSectionTitle", IDS_OPTIONS_EASY_UNLOCK_SECTION_TITLE },
25323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    { "easyUnlockSetupButton", IDS_OPTIONS_EASY_UNLOCK_SETUP_BUTTON },
25403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    { "easyUnlockSetupIntro", IDS_OPTIONS_EASY_UNLOCK_SETUP_INTRO,
25503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      device_type_resource_id },
256c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    { "extensionControlled", IDS_OPTIONS_TAB_EXTENSION_CONTROLLED },
257c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    { "extensionDisable", IDS_OPTIONS_TAB_EXTENSION_CONTROLLED_DISABLE },
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "fontSettingsCustomizeFontsButton",
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_FONTSETTINGS_CUSTOMIZE_FONTS_BUTTON },
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "fontSizeLabelCustom", IDS_OPTIONS_FONT_SIZE_LABEL_CUSTOM },
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "fontSizeLabelLarge", IDS_OPTIONS_FONT_SIZE_LABEL_LARGE },
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "fontSizeLabelMedium", IDS_OPTIONS_FONT_SIZE_LABEL_MEDIUM },
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "fontSizeLabelSmall", IDS_OPTIONS_FONT_SIZE_LABEL_SMALL },
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "fontSizeLabelVeryLarge", IDS_OPTIONS_FONT_SIZE_LABEL_VERY_LARGE },
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "fontSizeLabelVerySmall", IDS_OPTIONS_FONT_SIZE_LABEL_VERY_SMALL },
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "hideAdvancedSettings", IDS_SETTINGS_HIDE_ADVANCED_SETTINGS },
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "homePageNtp", IDS_OPTIONS_HOMEPAGE_NTP },
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "homePageShowHomeButton", IDS_OPTIONS_TOOLBAR_SHOW_HOME_BUTTON },
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "homePageUseNewTab", IDS_OPTIONS_HOMEPAGE_USE_NEWTAB },
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "homePageUseURL", IDS_OPTIONS_HOMEPAGE_USE_URL },
2716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "hotwordAlwaysOnSearchEnable", IDS_HOTWORD_ALWAYS_ON_SEARCH_PREF_CHKBOX },
2726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "hotwordAudioHistoryEnable", IDS_HOTWORD_AUDIO_HISTORY_PREF_CHKBOX },
2735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    { "hotwordSearchEnable", IDS_HOTWORD_SEARCH_PREF_CHKBOX },
2745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    { "hotwordConfirmEnable", IDS_HOTWORD_CONFIRM_BUBBLE_ENABLE },
2755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    { "hotwordConfirmDisable", IDS_HOTWORD_CONFIRM_BUBBLE_DISABLE },
2765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    { "hotwordConfirmMessage", IDS_HOTWORD_SEARCH_PREF_DESCRIPTION },
277effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    { "hotwordAudioLoggingEnable", IDS_HOTWORD_AUDIO_LOGGING_ENABLE },
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "importData", IDS_OPTIONS_IMPORT_DATA_BUTTON },
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "improveBrowsingExperience", IDS_OPTIONS_IMPROVE_BROWSING_EXPERIENCE },
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "languageAndSpellCheckSettingsButton",
2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_LANGUAGE_AND_INPUT_SETTINGS },
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "linkDoctorPref", IDS_OPTIONS_LINKDOCTOR_PREF },
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "manageAutofillSettings", IDS_OPTIONS_MANAGE_AUTOFILL_SETTINGS_LINK },
284868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    { "manageLanguages", IDS_OPTIONS_TRANSLATE_MANAGE_LANGUAGES },
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "managePasswords", IDS_OPTIONS_PASSWORDS_MANAGE_PASSWORDS_LINK },
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "networkPredictionEnabledDescription",
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_NETWORK_PREDICTION_ENABLED_DESCRIPTION },
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "passwordsAndAutofillGroupName",
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_PASSWORDS_AND_FORMS_GROUP_NAME },
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "passwordManagerEnabled", IDS_OPTIONS_PASSWORD_MANAGER_ENABLE },
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "privacyClearDataButton", IDS_OPTIONS_PRIVACY_CLEAR_DATA_BUTTON },
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "privacyContentSettingsButton",
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_PRIVACY_CONTENT_SETTINGS_BUTTON },
2941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    { "profileAddPersonEnable", IDS_PROFILE_ADD_PERSON_ENABLE },
2951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    { "profileBrowserGuestEnable", IDS_PROFILE_BROWSER_GUEST_ENABLE },
29634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)    { "profilesCreate", IDS_PROFILES_CREATE_BUTTON_LABEL },
29734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)    { "profilesDelete", IDS_PROFILES_DELETE_BUTTON_LABEL },
29834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)    { "profilesDeleteSingle", IDS_PROFILES_DELETE_SINGLE_BUTTON_LABEL },
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "profilesListItemCurrent", IDS_PROFILES_LIST_ITEM_CURRENT },
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "profilesManage", IDS_PROFILES_MANAGE_BUTTON_LABEL },
3010f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    { "profilesSupervisedDashboardTip",
3020f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      IDS_PROFILES_SUPERVISED_USER_DASHBOARD_TIP },
3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_SETTINGS_APP)
3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "profilesAppListSwitch", IDS_SETTINGS_APP_PROFILES_SWITCH_BUTTON_LABEL },
3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "proxiesLabelExtension", IDS_OPTIONS_EXTENSION_PROXIES_LABEL },
3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "proxiesLabelSystem", IDS_OPTIONS_SYSTEM_PROXIES_LABEL,
3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_PRODUCT_NAME },
30990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    { "resetProfileSettings", IDS_RESET_PROFILE_SETTINGS_BUTTON },
31090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    { "resetProfileSettingsDescription",
31190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      IDS_RESET_PROFILE_SETTINGS_DESCRIPTION },
31290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    { "resetProfileSettingsSectionTitle",
31390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      IDS_RESET_PROFILE_SETTINGS_SECTION_TITLE },
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "safeBrowsingEnableProtection",
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_SAFEBROWSING_ENABLEPROTECTION },
316f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    { "safeBrowsingEnableExtendedReporting",
317f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      IDS_OPTIONS_SAFEBROWSING_ENABLE_EXTENDED_REPORTING },
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "sectionTitleAppearance", IDS_APPEARANCE_GROUP_NAME },
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "sectionTitleDefaultBrowser", IDS_OPTIONS_DEFAULTBROWSER_GROUP_NAME },
32034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)    { "sectionTitleUsers", IDS_PROFILES_OPTIONS_GROUP_NAME },
32146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    { "sectionTitleProxy", IDS_OPTIONS_PROXY_GROUP_NAME },
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "sectionTitleSearch", IDS_OPTIONS_DEFAULTSEARCH_GROUP_NAME },
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "sectionTitleStartup", IDS_OPTIONS_STARTUP_GROUP_NAME },
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "sectionTitleSync", IDS_SYNC_OPTIONS_GROUP_NAME },
3255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    { "sectionTitleVoice", IDS_OPTIONS_VOICE_GROUP_NAME },
3265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    { "settingsTitle", IDS_SETTINGS_TITLE },
3275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    { "showAdvancedSettings", IDS_SETTINGS_SHOW_ADVANCED_SETTINGS },
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "spellingConfirmMessage", IDS_CONTENT_CONTEXT_SPELLING_BUBBLE_TEXT },
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "spellingConfirmEnable", IDS_CONTENT_CONTEXT_SPELLING_BUBBLE_ENABLE },
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "spellingConfirmDisable", IDS_CONTENT_CONTEXT_SPELLING_BUBBLE_DISABLE },
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "spellingPref", IDS_OPTIONS_SPELLING_PREF },
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "startupRestoreLastSession", IDS_OPTIONS_STARTUP_RESTORE_LAST_SESSION },
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "startupSetPages", IDS_OPTIONS_STARTUP_SET_PAGES },
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "startupShowNewTab", IDS_OPTIONS_STARTUP_SHOW_NEWTAB },
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "startupShowPages", IDS_OPTIONS_STARTUP_SHOW_PAGES },
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "suggestPref", IDS_OPTIONS_SUGGEST_PREF },
3376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "supervisedUserLabel", IDS_PROFILES_LIST_SUPERVISED_USER_LABEL },
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "syncButtonTextInProgress", IDS_SYNC_NTP_SETUP_IN_PROGRESS },
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "syncButtonTextStop", IDS_SYNC_STOP_SYNCING_BUTTON_LABEL },
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "themesGallery", IDS_THEMES_GALLERY_BUTTON },
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "themesGalleryURL", IDS_THEMES_GALLERY_URL },
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "tabsToLinksPref", IDS_OPTIONS_TABS_TO_LINKS_PREF },
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "toolbarShowBookmarksBar", IDS_OPTIONS_TOOLBAR_SHOW_BOOKMARKS_BAR },
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "toolbarShowHomeButton", IDS_OPTIONS_TOOLBAR_SHOW_HOME_BUTTON },
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "translateEnableTranslate",
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_TRANSLATE_ENABLE_TRANSLATE },
347eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "showWindowDecorations", IDS_SHOW_WINDOW_DECORATIONS },
349eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    { "themesNativeButton", IDS_THEMES_GTK_BUTTON },
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "themesSetClassic", IDS_THEMES_SET_CLASSIC },
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "themes", IDS_THEMES_GROUP_NAME },
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
354558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    { "themesReset", IDS_THEMES_RESET_BUTTON },
3551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    { "accessibilityTitle",
3561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      IDS_OPTIONS_SETTINGS_SECTION_TITLE_ACCESSIBILITY },
3571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    { "accessibilityFeaturesLink",
3581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      IDS_OPTIONS_ACCESSIBILITY_FEATURES_LINK },
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "accessibilityExplanation",
3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_EXPLANATION },
362a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    { "accessibilitySettings",
363a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_SETTINGS },
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "accessibilityHighContrast",
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_HIGH_CONTRAST_DESCRIPTION },
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "accessibilityScreenMagnifier",
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_SCREEN_MAGNIFIER_DESCRIPTION },
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "accessibilityTapDragging",
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_TOUCHPAD_TAP_DRAGGING_DESCRIPTION },
3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "accessibilityScreenMagnifierOff",
3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_SCREEN_MAGNIFIER_OFF },
3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "accessibilityScreenMagnifierFull",
3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_SCREEN_MAGNIFIER_FULL },
3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "accessibilityScreenMagnifierPartial",
3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_SCREEN_MAGNIFIER_PARTIAL },
376868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    { "accessibilityLargeCursor",
377868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_LARGE_CURSOR_DESCRIPTION },
378a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    { "accessibilityStickyKeys",
379a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_STICKY_KEYS_DESCRIPTION },
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "accessibilitySpokenFeedback",
3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_SPOKEN_FEEDBACK_DESCRIPTION },
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "accessibilityVirtualKeyboard",
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_VIRTUAL_KEYBOARD_DESCRIPTION },
3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "accessibilityAlwaysShowMenu",
3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_SHOULD_ALWAYS_SHOW_MENU },
3868bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    { "accessibilityAutoclick",
3878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_AUTOCLICK_DESCRIPTION },
3888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    { "accessibilityAutoclickDropdown",
3898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_AUTOCLICK_DROPDOWN_DESCRIPTION },
3908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    { "autoclickDelayExtremelyShort",
3918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_AUTOCLICK_DELAY_EXTREMELY_SHORT },
3928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    { "autoclickDelayVeryShort",
3938bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_AUTOCLICK_DELAY_VERY_SHORT },
3948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    { "autoclickDelayShort",
3958bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_AUTOCLICK_DELAY_SHORT },
3968bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    { "autoclickDelayLong",
3978bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_AUTOCLICK_DELAY_LONG },
3988bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    { "autoclickDelayVeryLong",
3998bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_AUTOCLICK_DELAY_VERY_LONG },
400116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    { "consumerManagementDescription",
401116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      IDS_OPTIONS_CONSUMER_MANAGEMENT_DESCRIPTION },
4020529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    { "consumerManagementEnrollButton",
4030529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      IDS_OPTIONS_CONSUMER_MANAGEMENT_ENROLL_BUTTON },
4041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    { "consumerManagementEnrollingButton",
4051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      IDS_OPTIONS_CONSUMER_MANAGEMENT_ENROLLING_BUTTON },
406116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    { "consumerManagementUnenrollButton",
407116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      IDS_OPTIONS_CONSUMER_MANAGEMENT_UNENROLL_BUTTON },
4081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    { "consumerManagementUnenrollingButton",
4091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      IDS_OPTIONS_CONSUMER_MANAGEMENT_UNENROLLING_BUTTON },
410116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    { "deviceControlTitle", IDS_OPTIONS_DEVICE_CONTROL_SECTION_TITLE },
4114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    { "enableContentProtectionAttestation",
4124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      IDS_OPTIONS_ENABLE_CONTENT_PROTECTION_ATTESTATION },
4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "factoryResetHeading", IDS_OPTIONS_FACTORY_RESET_HEADING },
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "factoryResetTitle", IDS_OPTIONS_FACTORY_RESET },
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "factoryResetRestart", IDS_OPTIONS_FACTORY_RESET_BUTTON },
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "factoryResetDataRestart", IDS_RELAUNCH_BUTTON },
4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "factoryResetWarning", IDS_OPTIONS_FACTORY_RESET_WARNING },
4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "factoryResetHelpUrl", IDS_FACTORY_RESET_HELP_URL },
419f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    { "changePicture", IDS_OPTIONS_CHANGE_PICTURE },
420f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    { "changePictureCaption", IDS_OPTIONS_CHANGE_PICTURE_CAPTION },
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "datetimeTitle", IDS_OPTIONS_SETTINGS_SECTION_TITLE_DATETIME },
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "deviceGroupDescription", IDS_OPTIONS_DEVICE_GROUP_DESCRIPTION },
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "deviceGroupPointer", IDS_OPTIONS_DEVICE_GROUP_POINTER_SECTION },
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "mouseSpeed", IDS_OPTIONS_SETTINGS_MOUSE_SPEED_DESCRIPTION },
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "touchpadSpeed", IDS_OPTIONS_SETTINGS_TOUCHPAD_SPEED_DESCRIPTION },
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "enableScreenlock", IDS_OPTIONS_ENABLE_SCREENLOCKER_CHECKBOX },
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "internetOptionsButtonTitle", IDS_OPTIONS_INTERNET_OPTIONS_BUTTON_TITLE },
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "keyboardSettingsButtonTitle",
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_DEVICE_GROUP_KEYBOARD_SETTINGS_BUTTON_TITLE },
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "manageAccountsButtonTitle", IDS_OPTIONS_ACCOUNTS_BUTTON_TITLE },
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "noPointingDevices", IDS_OPTIONS_NO_POINTING_DEVICES },
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "sectionTitleDevice", IDS_OPTIONS_DEVICE_GROUP_NAME },
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "sectionTitleInternet", IDS_OPTIONS_INTERNET_OPTIONS_GROUP_LABEL },
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "syncOverview", IDS_SYNC_OVERVIEW },
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "syncButtonTextStart", IDS_SYNC_SETUP_BUTTON_LABEL },
436f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    { "thirdPartyImeConfirmEnable", IDS_OK },
437f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    { "thirdPartyImeConfirmDisable", IDS_CANCEL },
438f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    { "thirdPartyImeConfirmMessage",
439f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      IDS_OPTIONS_SETTINGS_LANGUAGES_THIRD_PARTY_WARNING_MESSAGE },
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "timezone", IDS_OPTIONS_SETTINGS_TIMEZONE_DESCRIPTION },
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "use24HourClock", IDS_OPTIONS_SETTINGS_USE_24HOUR_CLOCK_DESCRIPTION },
4421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    { "batteryButton", IDS_OPTIONS_SETTINGS_BATTERY_DESCRIPTION},
4431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    { "storageButton", IDS_OPTIONS_SETTINGS_STORAGE_DESCRIPTION},
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "proxiesConfigureButton", IDS_OPTIONS_PROXIES_CONFIGURE_BUTTON },
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) && defined(USE_ASH)
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "setWallpaper", IDS_SET_WALLPAPER_BUTTON },
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "advancedSectionTitleSystem",
4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_OPTIONS_ADVANCED_SECTION_TITLE_SYSTEM },
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_MACOSX) && !defined(OS_CHROMEOS)
4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "backgroundModeCheckbox", IDS_OPTIONS_SYSTEM_ENABLE_BACKGROUND_MODE },
4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if !defined(OS_CHROMEOS)
4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "gpuModeCheckbox",
4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_OPTIONS_SYSTEM_ENABLE_HARDWARE_ACCELERATION_MODE },
4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "gpuModeResetRestart",
4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_OPTIONS_SYSTEM_ENABLE_HARDWARE_ACCELERATION_MODE_RESTART },
4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Strings with product-name substitutions.
4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "syncOverview", IDS_SYNC_OVERVIEW, IDS_PRODUCT_NAME },
46290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    { "syncButtonTextStart", IDS_SYNC_SETUP_BUTTON_LABEL },
4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
46490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    { "syncButtonTextSignIn", IDS_SYNC_START_SYNC_BUTTON_LABEL,
46590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      IDS_SHORT_PRODUCT_NAME },
4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "profilesSingleUser", IDS_PROFILES_SINGLE_USER_MESSAGE,
4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_PRODUCT_NAME },
4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "defaultBrowserUnknown", IDS_OPTIONS_DEFAULTBROWSER_UNKNOWN,
4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_PRODUCT_NAME },
4705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    { "defaultBrowserUseAsDefault", IDS_OPTIONS_DEFAULTBROWSER_USEASDEFAULT },
4715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    { "autoLaunchText", IDS_AUTOLAUNCH_TEXT },
4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS)
4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "factoryResetDescription", IDS_OPTIONS_FACTORY_RESET_DESCRIPTION,
4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_SHORT_PRODUCT_NAME },
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "languageSectionLabel", IDS_OPTIONS_ADVANCED_LANGUAGE_LABEL,
4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_SHORT_PRODUCT_NAME },
47823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#if defined(ENABLE_SERVICE_DISCOVERY)
47968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    { "cloudPrintDevicesPageButton", IDS_LOCAL_DISCOVERY_DEVICES_PAGE_BUTTON },
48068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    { "cloudPrintEnableNotificationsLabel",
48168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      IDS_LOCAL_DISCOVERY_NOTIFICATIONS_ENABLE_CHECKBOX_LABEL },
48268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#endif
4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  };
4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_SETTINGS_APP)
4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static OptionsStringResource app_resources[] = {
4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "syncOverview", IDS_SETTINGS_APP_SYNC_OVERVIEW },
4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "syncButtonTextStart", IDS_SYNC_START_SYNC_BUTTON_LABEL,
4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_SETTINGS_APP_LAUNCHER_PRODUCT_NAME },
4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "profilesSingleUser", IDS_PROFILES_SINGLE_USER_MESSAGE,
4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_SETTINGS_APP_LAUNCHER_PRODUCT_NAME },
4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "languageSectionLabel", IDS_OPTIONS_ADVANCED_LANGUAGE_LABEL,
4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_SETTINGS_APP_LAUNCHER_PRODUCT_NAME },
4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "proxiesLabelSystem", IDS_OPTIONS_SYSTEM_PROXIES_LABEL,
4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_SETTINGS_APP_LAUNCHER_PRODUCT_NAME },
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
4975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::DictionaryValue* app_values = NULL;
4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CHECK(values->GetDictionary(kSettingsAppKey, &app_values));
4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RegisterStrings(app_values, app_resources, arraysize(app_resources));
5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RegisterStrings(values, resources, arraysize(resources));
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RegisterTitle(values, "doNotTrackConfirmOverlay",
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                IDS_OPTIONS_ENABLE_DO_NOT_TRACK_BUBBLE_TITLE);
5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RegisterTitle(values, "spellingConfirmOverlay",
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                IDS_CONTENT_CONTEXT_SPELLING_ASK_GOOGLE);
507c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#if defined(ENABLE_FULL_PRINTING)
5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RegisterCloudPrintValues(values);
509c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#endif
5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  values->SetString("syncLearnMoreURL", chrome::kSyncLearnMoreURL);
5125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::string16 omnibox_url = base::ASCIIToUTF16(chrome::kOmniboxLearnMoreURL);
5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  values->SetString(
5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "defaultSearchGroupLabel",
5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      l10n_util::GetStringFUTF16(IDS_SEARCH_PREF_EXPLANATION, omnibox_url));
5165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  values->SetString("hotwordLearnMoreURL", chrome::kHotwordLearnMoreURL);
5175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  RegisterTitle(values, "hotwordConfirmOverlay",
518effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                IDS_HOTWORD_CONFIRM_BUBBLE_TITLE);
5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
521f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Profile* profile = Profile::FromWebUI(web_ui());
5225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::string username = profile->GetProfileName();
5235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (username.empty()) {
5245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    user_manager::User* user =
525116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        chromeos::ProfileHelper::Get()->GetUserByProfile(profile);
526116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    if (user && (user->GetType() != user_manager::USER_TYPE_GUEST))
5275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      username = user->email();
5285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
5295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (!username.empty())
5305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    username = gaia::SanitizeEmail(gaia::CanonicalizeEmail(username));
5315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
532f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  values->SetString("username", username);
5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Pass along sync status early so it will be available during page init.
5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  values->Set("syncData", GetSyncStateDictionary().release());
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  values->SetString("privacyLearnMoreURL", chrome::kPrivacyLearnMoreURL);
5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  values->SetString("doNotTrackLearnMoreURL", chrome::kDoNotTrackLearnMoreURL);
5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if !defined(OS_CHROMEOS)
5421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  values->SetBoolean("metricsReportingEnabledAtStart",
5431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       ChromeMetricsServiceAccessor::IsMetricsReportingEnabled());
5445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
5455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(pastarmovj): replace this with a call to the CrosSettings list
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // handling functionality to come.
5490f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  values->Set("timezoneList", chromeos::system::GetTimezoneList().release());
5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  values->SetString("accessibilityLearnMoreURL",
5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                    chrome::kChromeAccessibilityHelpURL);
5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
554a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  std::string settings_url = std::string("chrome-extension://") +
555a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      extension_misc::kChromeVoxExtensionId +
556a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      chrome::kChromeAccessibilitySettingsURL;
557a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
558a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  values->SetString("accessibilitySettingsURL",
559a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                    settings_url);
560a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
5614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  values->SetString("contentProtectionAttestationLearnMoreURL",
5624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                    chrome::kAttestationForContentProtectionLearnMoreURL);
5634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Creates magnifierList.
5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::ListValue> magnifier_list(new base::ListValue);
5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::ListValue> option_full(new base::ListValue);
5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  option_full->AppendInteger(ash::MAGNIFIER_FULL);
5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  option_full->AppendString(l10n_util::GetStringUTF16(
5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_SCREEN_MAGNIFIER_FULL));
5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  magnifier_list->Append(option_full.release());
5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::ListValue> option_partial(new base::ListValue);
5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  option_partial->AppendInteger(ash::MAGNIFIER_PARTIAL);
5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  option_partial->Append(new base::StringValue(l10n_util::GetStringUTF16(
5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_SCREEN_MAGNIFIER_PARTIAL)));
5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  magnifier_list->Append(option_partial.release());
5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  values->Set("magnifierList", magnifier_list.release());
5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX)
5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  values->SetString("macPasswordsWarning",
5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      l10n_util::GetStringUTF16(IDS_OPTIONS_PASSWORDS_MAC_WARNING));
5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  values->SetBoolean("multiple_profiles",
5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      g_browser_process->profile_manager()->GetNumberOfProfiles() > 1);
5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (ShouldShowMultiProfilesUserList())
5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    values->Set("profilesInfo", GetProfilesInfoList().release());
5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
59203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  values->SetBoolean("profileIsGuest",
59303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                     Profile::FromWebUI(web_ui())->IsOffTheRecord());
59403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
5955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  values->SetBoolean("profileIsSupervised",
596f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                     Profile::FromWebUI(web_ui())->IsSupervised());
5972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if !defined(OS_CHROMEOS)
5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  values->SetBoolean(
6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "gpuEnabledAtStart",
6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      g_browser_process->gpu_mode_manager()->initial_gpu_mode_pref());
6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
60368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
60423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#if defined(ENABLE_SERVICE_DISCOVERY)
6055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  values->SetBoolean("cloudPrintHideNotificationsCheckbox",
6065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                     !local_discovery::PrivetNotificationService::IsEnabled());
60768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#endif
60868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
6095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  values->SetBoolean("cloudPrintShowMDnsOptions",
6105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                     cloud_print_mdns_ui_enabled_);
61168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
6125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  values->SetString("cloudPrintLearnMoreURL", chrome::kCloudPrintLearnMoreURL);
61368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
6145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  values->SetString("languagesLearnMoreURL",
6155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    chrome::kLanguageSettingsLearnMoreUrl);
61623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
61723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  values->SetBoolean(
6185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "easyUnlockAllowed",
6195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      EasyUnlockService::Get(Profile::FromWebUI(web_ui()))->IsAllowed());
62023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  values->SetString("easyUnlockLearnMoreURL", chrome::kEasyUnlockLearnMoreUrl);
6210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
6226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(OS_CHROMEOS)
6230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  values->SetBoolean(
6240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      "consumerManagementEnabled",
6250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      CommandLine::ForCurrentProcess()->HasSwitch(
6260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch          chromeos::switches::kEnableConsumerManagement));
627f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
628f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  RegisterTitle(values, "thirdPartyImeConfirmOverlay",
629f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                IDS_OPTIONS_SETTINGS_LANGUAGES_THIRD_PARTY_WARNING_TITLE);
63023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#endif
6316d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
6326d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  values->SetBoolean("showSetDefault", ShouldShowSetDefaultBrowser());
6336d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
6346d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  values->SetBoolean("allowAdvancedSettings", ShouldAllowAdvancedSettings());
635116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
636116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  values->SetBoolean("websiteSettingsManagerEnabled",
637116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                     CommandLine::ForCurrentProcess()->HasSwitch(
638116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                         switches::kEnableWebsiteSettingsManager));
6396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
64034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  values->SetBoolean("usingNewProfilesUI", switches::IsNewAvatarMenu());
6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
643c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#if defined(ENABLE_FULL_PRINTING)
6445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::RegisterCloudPrintValues(
6455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    base::DictionaryValue* values) {
64668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  values->SetString("cloudPrintOptionLabel",
64768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                    l10n_util::GetStringFUTF16(
64868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                        IDS_CLOUD_PRINT_CHROMEOS_OPTION_LABEL,
64968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                        l10n_util::GetStringUTF16(IDS_GOOGLE_CLOUD_PRINT)));
6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
651c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#endif  // defined(ENABLE_FULL_PRINTING)
6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::RegisterMessages() {
6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "becomeDefaultBrowser",
6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::BecomeDefaultBrowser,
6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "setDefaultSearchEngine",
6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::SetDefaultSearchEngine,
6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
663868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      "deleteProfile",
664868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::DeleteProfile,
665868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                 base::Unretained(this)));
666868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "themesReset",
6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::ThemesReset,
6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
670ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  web_ui()->RegisterMessageCallback(
671ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      "requestProfilesInfo",
672ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      base::Bind(&BrowserOptionsHandler::HandleRequestProfilesInfo,
673ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch                 base::Unretained(this)));
674eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
676eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      "themesSetNative",
677eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      base::Bind(&BrowserOptionsHandler::ThemesSetNative,
6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "selectDownloadLocation",
6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::HandleSelectDownloadLocation,
6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "autoOpenFileTypesAction",
6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::HandleAutoOpenButton,
6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "defaultFontSizeAction",
6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::HandleDefaultFontSize,
6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "defaultZoomFactorAction",
6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::HandleDefaultZoomFactor,
6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
6961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_WIN) || defined(OS_MACOSX)
6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "showManageSSLCertificates",
6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::ShowManageSSLCertificates,
7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "openWallpaperManager",
7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::HandleOpenWallpaperManager,
7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "virtualKeyboardChange",
7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::VirtualKeyboardChangeCallback,
7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
712effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch       "onPowerwashDialogShow",
713effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch       base::Bind(&BrowserOptionsHandler::OnPowerwashDialogShow,
714effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                  base::Unretained(this)));
715effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  web_ui()->RegisterMessageCallback(
7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "performFactoryResetRestart",
7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::PerformFactoryResetRestart,
7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
7192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else
7202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  web_ui()->RegisterMessageCallback(
7212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "restartBrowser",
7222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::Bind(&BrowserOptionsHandler::HandleRestartBrowser,
7232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                 base::Unretained(this)));
724c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  web_ui()->RegisterMessageCallback(
725c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch      "showNetworkProxySettings",
726c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch      base::Bind(&BrowserOptionsHandler::ShowNetworkProxySettings,
727c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch                 base::Unretained(this)));
728c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#endif  // defined(OS_CHROMEOS)
72968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
73023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#if defined(ENABLE_SERVICE_DISCOVERY)
7314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  if (cloud_print_mdns_ui_enabled_) {
73268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    web_ui()->RegisterMessageCallback(
73368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        "showCloudPrintDevicesPage",
73468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        base::Bind(&BrowserOptionsHandler::ShowCloudPrintDevicesPage,
73568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                   base::Unretained(this)));
73668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  }
73768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#endif
7385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
7395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      "requestHotwordAvailable",
7405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::HandleRequestHotwordAvailable,
7415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 base::Unretained(this)));
742a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
743a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
7441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      "launchHotwordAudioVerificationApp",
7451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      base::Bind(
7461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          &BrowserOptionsHandler::HandleLaunchHotwordAudioVerificationApp,
7471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          base::Unretained(this)));
7481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
7491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  web_ui()->RegisterMessageCallback(
75023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      "launchEasyUnlockSetup",
75123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      base::Bind(&BrowserOptionsHandler::HandleLaunchEasyUnlockSetup,
75223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)               base::Unretained(this)));
753c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_WIN)
754c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  web_ui()->RegisterMessageCallback(
755c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      "refreshExtensionControlIndicators",
756c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      base::Bind(
757010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)          &BrowserOptionsHandler::HandleRefreshExtensionControlIndicators,
758c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch          base::Unretained(this)));
759c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif  // defined(OS_WIN)
7601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  web_ui()->RegisterMessageCallback("metricsReportingCheckboxChanged",
7611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      base::Bind(&BrowserOptionsHandler::HandleMetricsReportingChange,
7621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 base::Unretained(this)));
7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7658bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void BrowserOptionsHandler::Uninitialize() {
7668bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  registrar_.RemoveAll();
767010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#if defined(OS_WIN)
768010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ExtensionRegistry::Get(Profile::FromWebUI(web_ui()))->RemoveObserver(this);
769010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif
7701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_CHROMEOS)
7711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  policy::ConsumerManagementService* consumer_management =
7721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      g_browser_process->platform_part()->browser_policy_connector_chromeos()->
7731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          GetConsumerManagementService();
7741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (consumer_management)
7751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    consumer_management->RemoveObserver(this);
7761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif
7778bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}
7788bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::OnStateChanged() {
7803240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  UpdateSyncState();
7812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
7822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid BrowserOptionsHandler::GoogleSigninSucceeded(const std::string& account_id,
7841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                                  const std::string& username,
785effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                                  const std::string& password) {
786effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  OnStateChanged();
787effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
788effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
7891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid BrowserOptionsHandler::GoogleSignedOut(const std::string& account_id,
7901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                            const std::string& username) {
791effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  OnStateChanged();
792effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
793effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::PageLoadStarted() {
7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  page_initialized_ = false;
7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::InitializeHandler() {
7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile = Profile::FromWebUI(web_ui());
8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* prefs = profile->GetPrefs();
8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProfileSyncService* sync_service(
8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile));
804effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // TODO(blundell): Use a ScopedObserver to observe the PSS so that cleanup on
805effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // destruction is automatic.
8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (sync_service)
8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sync_service->AddObserver(this);
8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
809effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  SigninManagerBase* signin_manager(
810effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      SigninManagerFactory::GetInstance()->GetForProfile(profile));
811effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (signin_manager)
812effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    signin_observer_.Add(signin_manager);
813effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Create our favicon data source.
8152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  content::URLDataSource::Add(
8162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      profile, new FaviconSource(profile, FaviconSource::FAVICON));
8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  default_browser_policy_.Init(
8192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kDefaultBrowserSettingEnabled,
8202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      g_browser_process->local_state(),
8212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::Bind(&BrowserOptionsHandler::UpdateDefaultBrowserState,
8222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                 base::Unretained(this)));
8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  registrar_.Add(this, chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED,
8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 content::NotificationService::AllSources());
8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  registrar_.Add(this, chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED,
8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 content::NotificationService::AllSources());
8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  registrar_.Add(this, chrome::NOTIFICATION_BROWSER_THEME_CHANGED,
8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 content::Source<ThemeService>(
8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     ThemeServiceFactory::GetForProfile(profile)));
8335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  registrar_.Add(this, chrome::NOTIFICATION_GLOBAL_ERRORS_CHANGED,
8345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 content::Source<Profile>(profile));
8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddTemplateUrlServiceObserver();
8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
838010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ExtensionRegistry::Get(Profile::FromWebUI(web_ui()))->AddObserver(this);
839010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const CommandLine& command_line = *CommandLine::ForCurrentProcess();
8415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (!command_line.HasSwitch(switches::kUserDataDir)) {
8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::Bind(&BrowserOptionsHandler::CheckAutoLaunch,
8442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                   weak_ptr_factory_.GetWeakPtr(),
8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   profile->GetPath()));
8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
84903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // No preferences below this point may be modified by guest profiles.
85003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  if (Profile::FromWebUI(web_ui())->IsGuestSession())
85103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    return;
85203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
8532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  auto_open_files_.Init(
8542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kDownloadExtensionsToOpen, prefs,
8552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::Bind(&BrowserOptionsHandler::SetupAutoOpenFileTypes,
8562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                 base::Unretained(this)));
8572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  default_zoom_level_.Init(
8582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kDefaultZoomLevel, prefs,
8592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::Bind(&BrowserOptionsHandler::SetupPageZoomSelector,
8602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                 base::Unretained(this)));
8612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  profile_pref_registrar_.Init(prefs);
8622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  profile_pref_registrar_.Add(
8636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      prefs::kNetworkPredictionOptions,
8646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::SetupNetworkPredictionControl,
8656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                 base::Unretained(this)));
8666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  profile_pref_registrar_.Add(
86790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      prefs::kWebKitDefaultFontSize,
86890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      base::Bind(&BrowserOptionsHandler::SetupFontSizeSelector,
86990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                 base::Unretained(this)));
87090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  profile_pref_registrar_.Add(
87190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      prefs::kWebKitDefaultFixedFontSize,
87290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      base::Bind(&BrowserOptionsHandler::SetupFontSizeSelector,
87390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                 base::Unretained(this)));
87490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  profile_pref_registrar_.Add(
875f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      prefs::kSupervisedUsers,
8760f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::SetupManagingSupervisedUsers,
8770f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)                 base::Unretained(this)));
8780f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  profile_pref_registrar_.Add(
8792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kSigninAllowed,
8802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::Bind(&BrowserOptionsHandler::OnSigninAllowedPrefChange,
8812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                 base::Unretained(this)));
88223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  profile_pref_registrar_.Add(
88323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      prefs::kEasyUnlockPairing,
88423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      base::Bind(&BrowserOptionsHandler::SetupEasyUnlock,
88523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                 base::Unretained(this)));
886c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
887c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_WIN)
888c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  profile_pref_registrar_.Add(
889c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      prefs::kURLsToRestoreOnStartup,
890c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      base::Bind(&BrowserOptionsHandler::SetupExtensionControlledIndicators,
891010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                 base::Unretained(this)));
892c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  profile_pref_registrar_.Add(
893c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      prefs::kHomePage,
894c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      base::Bind(&BrowserOptionsHandler::SetupExtensionControlledIndicators,
895010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                 base::Unretained(this)));
896c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif  // defined(OS_WIN)
897c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
898a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(OS_CHROMEOS)
899a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  if (!policy_registrar_) {
900a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    policy_registrar_.reset(new policy::PolicyChangeRegistrar(
901a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        policy::ProfilePolicyConnectorFactory::GetForProfile(profile)->
902a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            policy_service(),
903a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        policy::PolicyNamespace(policy::POLICY_DOMAIN_CHROME, std::string())));
904a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    policy_registrar_->Observe(
905a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        policy::key::kUserAvatarImage,
906a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        base::Bind(&BrowserOptionsHandler::OnUserImagePolicyChanged,
907a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                   base::Unretained(this)));
908a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    policy_registrar_->Observe(
909a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        policy::key::kWallpaperImage,
910a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        base::Bind(&BrowserOptionsHandler::OnWallpaperPolicyChanged,
911a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                   base::Unretained(this)));
912a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
913a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#else  // !defined(OS_CHROMEOS)
9142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  profile_pref_registrar_.Add(
9152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kProxy,
9162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::Bind(&BrowserOptionsHandler::SetupProxySettingsSection,
9172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                 base::Unretained(this)));
9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // !defined(OS_CHROMEOS)
9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::InitializePage() {
9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  page_initialized_ = true;
923c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OnTemplateURLServiceChanged();
925c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ObserveThemeChanged();
9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OnStateChanged();
9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UpdateDefaultBrowserState();
9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupMetricsReportingSettingVisibility();
9311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetupMetricsReportingCheckbox();
9326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  SetupNetworkPredictionControl();
9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupFontSizeSelector();
9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupPageZoomSelector();
9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupAutoOpenFileTypes();
9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupProxySettingsSection();
937f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SetupManageCertificatesSection();
9380f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  SetupManagingSupervisedUsers();
93923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  SetupEasyUnlock();
940010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  SetupExtensionControlledIndicators();
941c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch
9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupAccessibilityFeatures();
9445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  policy::BrowserPolicyConnectorChromeOS* connector =
9455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      g_browser_process->platform_part()->browser_policy_connector_chromeos();
9465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (!connector->IsEnterpriseManaged() &&
9476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      !user_manager::UserManager::Get()->IsLoggedInAsGuest() &&
9486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      !user_manager::UserManager::Get()->IsLoggedInAsSupervisedUser()) {
9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    web_ui()->CallJavascriptFunction(
9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "BrowserOptions.enableFactoryResetSection");
9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
952a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
9535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Profile* profile = Profile::FromWebUI(web_ui());
954a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  OnAccountPictureManagedChanged(
9555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      policy::ProfilePolicyConnectorFactory::GetForProfile(profile)->
956a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)          policy_service()->GetPolicies(
957a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)              policy::PolicyNamespace(policy::POLICY_DOMAIN_CHROME,
958a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                      std::string()))
959a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)             .Get(policy::key::kUserAvatarImage));
960a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
961a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  OnWallpaperManagedChanged(
962a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      chromeos::WallpaperManager::Get()->IsPolicyControlled(
9636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          user_manager::UserManager::Get()->GetActiveUser()->email()));
9641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
9651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  policy::ConsumerManagementService* consumer_management =
9661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      g_browser_process->platform_part()->browser_policy_connector_chromeos()->
9671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          GetConsumerManagementService();
9681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (consumer_management) {
9691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    OnConsumerManagementStatusChanged();
9701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    consumer_management->AddObserver(this);
9711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::CheckAutoLaunch(
9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::WeakPtr<BrowserOptionsHandler> weak_this,
9782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const base::FilePath& profile_path) {
9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
980e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  DCHECK_CURRENTLY_ON(BrowserThread::FILE);
9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Auto-launch is not supported for secondary profiles yet.
9835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (profile_path.BaseName().value() !=
9845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          base::ASCIIToUTF16(chrome::kInitialProfile)) {
9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
9865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Pass in weak pointer to this to avoid race if BrowserOptionsHandler is
9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // deleted.
9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::CheckAutoLaunchCallback,
9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 weak_this,
9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 auto_launch_trial::IsInAutoLaunchGroup(),
9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 auto_launch_util::AutoStartRequested(
9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     profile_path.BaseName().value(),
9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     true,  // Window requested.
9972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     base::FilePath())));
9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::CheckAutoLaunchCallback(
10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool is_in_auto_launch_group,
10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool will_launch_at_login) {
10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
1005e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  DCHECK_CURRENTLY_ON(BrowserThread::UI);
10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (is_in_auto_launch_group) {
10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    web_ui()->RegisterMessageCallback("toggleAutoLaunch",
10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::Bind(&BrowserOptionsHandler::ToggleAutoLaunch,
10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::Unretained(this)));
10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::FundamentalValue enabled(will_launch_at_login);
10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    web_ui()->CallJavascriptFunction("BrowserOptions.updateAutoLaunchState",
10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     enabled);
10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool BrowserOptionsHandler::ShouldShowSetDefaultBrowser() {
10205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_CHROMEOS)
10215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // We're always the default browser on ChromeOS.
10225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return false;
10235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#else
10245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Profile* profile = Profile::FromWebUI(web_ui());
10255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return !profile->IsGuestSession();
10265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif
10275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
10285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
10295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool BrowserOptionsHandler::ShouldShowMultiProfilesUserList() {
10305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_CHROMEOS)
10315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // On Chrome OS we use different UI for multi-profiles.
10325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return false;
10335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#else
10345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (helper::GetDesktopType(web_ui()) != chrome::HOST_DESKTOP_TYPE_NATIVE)
10355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return false;
10365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Profile* profile = Profile::FromWebUI(web_ui());
10375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (profile->IsGuestSession())
10385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return false;
10395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return profiles::IsMultipleProfilesEnabled();
10405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif
10415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
10425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1043e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochbool BrowserOptionsHandler::ShouldAllowAdvancedSettings() {
1044e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#if defined(OS_CHROMEOS)
1045e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  // ChromeOS handles guest-mode restrictions in a different manner.
1046e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  return true;
1047e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#else
1048e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  return !Profile::FromWebUI(web_ui())->IsGuestSession();
1049e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#endif
1050e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch}
1051e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::UpdateDefaultBrowserState() {
10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  default_browser_worker_->StartCheckIsDefault();
10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::BecomeDefaultBrowser(const base::ListValue* args) {
10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If the default browser setting is managed then we should not be able to
10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // call this function.
10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (default_browser_policy_.IsManaged())
10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::RecordAction(UserMetricsAction("Options_SetAsDefaultBrowser"));
10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  default_browser_worker_->StartSetAsDefault();
10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Callback takes care of updating UI.
10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If the user attempted to make Chrome the default browser, then he/she
10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // arguably wants to be notified when that changes.
10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* prefs = Profile::FromWebUI(web_ui())->GetPrefs();
10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs->SetBoolean(prefs::kCheckDefaultBrowser, true);
10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int BrowserOptionsHandler::StatusStringIdForState(
10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ShellIntegration::DefaultWebClientState state) {
10742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (state == ShellIntegration::IS_DEFAULT)
10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return IDS_OPTIONS_DEFAULTBROWSER_DEFAULT;
10762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (state == ShellIntegration::NOT_DEFAULT)
10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return IDS_OPTIONS_DEFAULTBROWSER_NOTDEFAULT;
10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return IDS_OPTIONS_DEFAULTBROWSER_UNKNOWN;
10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::SetDefaultWebClientUIState(
10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ShellIntegration::DefaultWebClientUIState state) {
10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int status_string_id;
10841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
10851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  if (state == ShellIntegration::STATE_IS_DEFAULT) {
10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    status_string_id = IDS_OPTIONS_DEFAULTBROWSER_DEFAULT;
10871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  } else if (state == ShellIntegration::STATE_NOT_DEFAULT) {
10881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    if (ShellIntegration::CanSetAsDefaultBrowser() ==
10891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            ShellIntegration::SET_DEFAULT_NOT_ALLOWED) {
10901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      status_string_id = IDS_OPTIONS_DEFAULTBROWSER_SXS;
10911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    } else {
10921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      status_string_id = IDS_OPTIONS_DEFAULTBROWSER_NOTDEFAULT;
10931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    }
10941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  } else if (state == ShellIntegration::STATE_UNKNOWN) {
10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    status_string_id = IDS_OPTIONS_DEFAULTBROWSER_UNKNOWN;
10961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  } else {
10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;  // Still processing.
10981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  }
10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetDefaultBrowserUIString(status_string_id);
11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool BrowserOptionsHandler::IsInteractiveSetDefaultPermitted() {
11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;  // This is UI so we can allow it.
11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::SetDefaultBrowserUIString(int status_string_id) {
11082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::StringValue status_string(
11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      l10n_util::GetStringFUTF16(status_string_id,
11102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                 l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)));
11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FundamentalValue is_default(
11132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      status_string_id == IDS_OPTIONS_DEFAULTBROWSER_DEFAULT);
11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FundamentalValue can_be_default(
11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      !default_browser_policy_.IsManaged() &&
11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      (status_string_id == IDS_OPTIONS_DEFAULTBROWSER_DEFAULT ||
11182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)       status_string_id == IDS_OPTIONS_DEFAULTBROWSER_NOTDEFAULT));
11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction(
11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "BrowserOptions.updateDefaultBrowserState",
11222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      status_string, is_default, can_be_default);
11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::OnTemplateURLServiceChanged() {
11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!template_url_service_ || !template_url_service_->loaded())
11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const TemplateURL* default_url =
11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      template_url_service_->GetDefaultSearchProvider();
11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int default_index = -1;
11335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::ListValue search_engines;
11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TemplateURLService::TemplateURLVector model_urls(
11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      template_url_service_->GetTemplateURLs());
11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < model_urls.size(); ++i) {
1137f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    if (!model_urls[i]->ShowInDefaultList(
1138f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)            template_url_service_->search_terms_data()))
11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      continue;
11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    base::DictionaryValue* entry = new base::DictionaryValue();
11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    entry->SetString("name", model_urls[i]->short_name());
11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    entry->SetInteger("index", i);
11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    search_engines.Append(entry);
11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (model_urls[i] == default_url)
11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      default_index = i;
11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  web_ui()->CallJavascriptFunction(
11502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "BrowserOptions.updateSearchEngines",
11512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      search_engines,
11522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FundamentalValue(default_index),
11532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FundamentalValue(
1154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)          template_url_service_->is_default_search_managed() ||
1155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)          template_url_service_->IsExtensionControlledDefaultSearch()));
1156c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
1157010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  SetupExtensionControlledIndicators();
11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::SetDefaultSearchEngine(
11615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::ListValue* args) {
11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int selected_index = -1;
11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!ExtractIntegerValue(args, &selected_index)) {
11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NOTREACHED();
11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TemplateURLService::TemplateURLVector model_urls(
11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      template_url_service_->GetTemplateURLs());
11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (selected_index >= 0 &&
11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      selected_index < static_cast<int>(model_urls.size()))
11725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    template_url_service_->SetUserSelectedDefaultSearchProvider(
11735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        model_urls[selected_index]);
11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::RecordAction(UserMetricsAction("Options_SearchEngineChanged"));
11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::AddTemplateUrlServiceObserver() {
11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  template_url_service_ =
11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      TemplateURLServiceFactory::GetForProfile(Profile::FromWebUI(web_ui()));
11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (template_url_service_) {
11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    template_url_service_->Load();
11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    template_url_service_->AddObserver(this);
11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1187010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void BrowserOptionsHandler::OnExtensionLoaded(
1188010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    content::BrowserContext* browser_context,
1189010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    const Extension* extension) {
1190010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  SetupExtensionControlledIndicators();
1191010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
1192010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
1193010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void BrowserOptionsHandler::OnExtensionUnloaded(
1194010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    content::BrowserContext* browser_context,
1195010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    const Extension* extension,
1196010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    extensions::UnloadedExtensionInfo::Reason reason) {
1197010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  SetupExtensionControlledIndicators();
1198010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
1199010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::Observe(
12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int type,
12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const content::NotificationSource& source,
12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const content::NotificationDetails& details) {
12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Notifications are used to update the UI dynamically when settings change in
12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the background. If the UI is currently being loaded, no dynamic updates are
12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // possible (as the DOM and JS are not fully loaded) or necessary (as
12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // InitializePage() will update the UI at the end of the load).
12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!page_initialized_)
12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  switch (type) {
12122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case chrome::NOTIFICATION_BROWSER_THEME_CHANGED:
12132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ObserveThemeChanged();
12142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      break;
12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
12162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED:
12172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      UpdateAccountPicture();
12182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      break;
12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
12202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED:
12218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    SendProfilesInfo();
12222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      break;
12235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case chrome::NOTIFICATION_GLOBAL_ERRORS_CHANGED:
12242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      // Update our sync/signin status display.
12252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      OnStateChanged();
12262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      break;
12272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    default:
12282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      NOTREACHED();
12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::ToggleAutoLaunch(const base::ListValue* args) {
12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!auto_launch_trial::IsInAutoLaunchGroup())
12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool enable;
12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK_EQ(args->GetSize(), 1U);
12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK(args->GetBoolean(0, &enable));
12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile = Profile::FromWebUI(web_ui());
12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::BrowserThread::PostTask(
12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::BrowserThread::FILE, FROM_HERE,
12442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      enable ?
12452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          base::Bind(&auto_launch_util::EnableForegroundStartAtLogin,
12462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     profile->GetPath().BaseName().value(), base::FilePath()) :
12472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          base::Bind(&auto_launch_util::DisableForegroundStartAtLogin,
12482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      profile->GetPath().BaseName().value()));
12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // OS_WIN
12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)scoped_ptr<base::ListValue> BrowserOptionsHandler::GetProfilesInfoList() {
12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProfileInfoCache& cache =
12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      g_browser_process->profile_manager()->GetProfileInfoCache();
12555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<base::ListValue> profile_info_list(new base::ListValue);
12562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath current_profile_path =
12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_ui()->GetWebContents()->GetBrowserContext()->GetPath();
12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0, e = cache.GetNumberOfProfiles(); i < e; ++i) {
12605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    base::DictionaryValue* profile_value = new base::DictionaryValue();
12615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    profile_value->SetString("name", cache.GetNameOfProfileAtIndex(i));
12622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::FilePath profile_path = cache.GetPathOfProfileAtIndex(i);
12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    profile_value->Set("filePath", base::CreateFilePathValue(profile_path));
12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    profile_value->SetBoolean("isCurrentProfile",
12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              profile_path == current_profile_path);
12665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    profile_value->SetBoolean("isSupervised",
12675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                              cache.ProfileIsSupervisedAtIndex(i));
12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool is_gaia_picture =
12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        cache.IsUsingGAIAPictureOfProfileAtIndex(i) &&
12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        cache.GetGAIAPictureOfProfileAtIndex(i);
12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (is_gaia_picture) {
12735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      gfx::Image icon = profiles::GetAvatarIconForWebUI(
12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          cache.GetAvatarIconOfProfileAtIndex(i), true);
12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      profile_value->SetString("iconURL",
12762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          webui::GetBitmapDataUrl(icon.AsBitmap()));
12775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      size_t icon_index = cache.GetAvatarIconIndexOfProfileAtIndex(i);
12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      profile_value->SetString("iconURL",
1280c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                               profiles::GetDefaultAvatarIconUrl(icon_index));
12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    profile_info_list->Append(profile_value);
12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return profile_info_list.Pass();
12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::SendProfilesInfo() {
12905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (!ShouldShowMultiProfilesUserList())
1291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return;
12925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction("BrowserOptions.setProfilesInfo",
12935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   *GetProfilesInfoList());
12945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
12955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::DeleteProfile(const base::ListValue* args) {
1297868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  DCHECK(args);
12985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const base::Value* file_path_value;
1299868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  if (!args->Get(0, &file_path_value))
1300868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    return;
1301868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
1302868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  base::FilePath file_path;
1303868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  if (!base::GetValueAsFilePath(*file_path_value, &file_path))
1304868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    return;
130568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  helper::DeleteProfileAtPath(file_path, web_ui());
13065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::ObserveThemeChanged() {
13095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile = Profile::FromWebUI(web_ui());
13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ThemeService* theme_service = ThemeServiceFactory::GetForProfile(profile);
1311cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  bool is_system_theme = false;
1312eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1313eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
1314f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  bool profile_is_supervised = profile->IsSupervised();
1315cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  is_system_theme = theme_service->UsingSystemTheme();
1316cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  base::FundamentalValue native_theme_enabled(!is_system_theme &&
1317f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                              !profile_is_supervised);
1318eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  web_ui()->CallJavascriptFunction("BrowserOptions.setNativeThemeButtonEnabled",
1319eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                   native_theme_enabled);
13205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
13215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1322cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  bool is_classic_theme = !is_system_theme &&
1323eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                          theme_service->UsingDefaultTheme();
1324558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  base::FundamentalValue enabled(!is_classic_theme);
13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction("BrowserOptions.setThemesResetButtonEnabled",
13265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   enabled);
13275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::ThemesReset(const base::ListValue* args) {
13305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile = Profile::FromWebUI(web_ui());
1331eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::RecordAction(UserMetricsAction("Options_ThemesReset"));
13325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ThemeServiceFactory::GetForProfile(profile)->UseDefaultTheme();
13335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1335eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
13365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::ThemesSetNative(const base::ListValue* args) {
13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::RecordAction(UserMetricsAction("Options_GtkThemeSet"));
13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile = Profile::FromWebUI(web_ui());
1339cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ThemeServiceFactory::GetForProfile(profile)->UseSystemTheme();
13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::UpdateAccountPicture() {
13456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  std::string email =
13466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      user_manager::UserManager::Get()->GetLoggedInUser()->email();
13475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!email.empty()) {
13485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    web_ui()->CallJavascriptFunction("BrowserOptions.updateAccountPicture");
13495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::StringValue email_value(email);
13505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    web_ui()->CallJavascriptFunction("BrowserOptions.updateAccountPicture",
13515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     email_value);
13525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
13535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1354a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
1355a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void BrowserOptionsHandler::OnAccountPictureManagedChanged(bool managed) {
1356a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  web_ui()->CallJavascriptFunction("BrowserOptions.setAccountPictureManaged",
1357a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                   base::FundamentalValue(managed));
1358a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
1359a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1360a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void BrowserOptionsHandler::OnWallpaperManagedChanged(bool managed) {
13611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(USE_ATHENA)
13621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // In Athena, we don't allow customizing wallpaper right now.
13631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // TODO(mukai|bshe): remove this.  http://crbug.com/408734
13641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  managed = true;
13651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif
1366a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  web_ui()->CallJavascriptFunction("BrowserOptions.setWallpaperManaged",
1367a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                   base::FundamentalValue(managed));
1368a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
13705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)scoped_ptr<base::DictionaryValue>
13725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)BrowserOptionsHandler::GetSyncStateDictionary() {
13731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // The items which are to be written into |sync_status| are also described in
13741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // chrome/browser/resources/options/browser_options.js in @typedef
13751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // for SyncStatus. Please update it whenever you add or remove any keys here.
13765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<base::DictionaryValue> sync_status(new base::DictionaryValue);
13772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Profile* profile = Profile::FromWebUI(web_ui());
13782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (profile->IsGuestSession()) {
13792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Cannot display signin status when running in guest mode on chromeos
13802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // because there is no SigninManager.
13812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    sync_status->SetBoolean("signinAllowed", false);
13825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return sync_status.Pass();
13832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1384cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1385f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  sync_status->SetBoolean("supervisedUser", profile->IsSupervised());
13865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1387c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool signout_prohibited = false;
1388c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS)
13892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Signout is not allowed if the user has policy (crbug.com/172204).
1390c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  signout_prohibited =
1391c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      SigninManagerFactory::GetForProfile(profile)->IsSignoutProhibited();
1392c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif
1393c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1394868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ProfileSyncService* service =
1395868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile);
1396558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  SigninManagerBase* signin = SigninManagerFactory::GetForProfile(profile);
1397558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  DCHECK(signin);
1398c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  sync_status->SetBoolean("signoutAllowed", !signout_prohibited);
13992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  sync_status->SetBoolean("signinAllowed", signin->IsSigninAllowed());
1400a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  sync_status->SetBoolean("syncSystemEnabled", (service != NULL));
14015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sync_status->SetBoolean("setupCompleted",
14022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                          service && service->HasSyncSetupCompleted());
14032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  sync_status->SetBoolean("setupInProgress",
14042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      service && !service->IsManaged() && service->FirstSetupInProgress());
14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1406a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  base::string16 status_label;
1407a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  base::string16 link_label;
14085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool status_has_error = sync_ui_util::GetStatusLabels(
14095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      service, *signin, sync_ui_util::WITH_HTML, &status_label, &link_label) ==
14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          sync_ui_util::SYNC_ERROR;
14115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sync_status->SetString("statusText", status_label);
14125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sync_status->SetString("actionLinkText", link_label);
14135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sync_status->SetBoolean("hasError", status_has_error);
14145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  sync_status->SetBoolean("managed", service && service->IsManaged());
14161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  sync_status->SetBoolean("signedIn", signin->IsAuthenticated());
14175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sync_status->SetBoolean("hasUnrecoverableError",
14182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                          service && service->HasUnrecoverableError());
14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return sync_status.Pass();
14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
14225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::HandleSelectDownloadLocation(
14245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::ListValue* args) {
14255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs();
14265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  select_folder_dialog_ = ui::SelectFileDialog::Create(
14275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this, new ChromeSelectFilePolicy(web_ui()->GetWebContents()));
14285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui::SelectFileDialog::FileTypeInfo info;
14292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  info.support_drive = true;
14305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  select_folder_dialog_->SelectFile(
14315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ui::SelectFileDialog::SELECT_FOLDER,
14325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      l10n_util::GetStringUTF16(IDS_OPTIONS_DOWNLOADLOCATION_BROWSE_TITLE),
14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      pref_service->GetFilePath(prefs::kDownloadDefaultDirectory),
1434c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      &info,
1435c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      0,
1436c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      base::FilePath::StringType(),
1437010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      web_ui()->GetWebContents()->GetTopLevelNativeWindow(),
1438c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      NULL);
14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void BrowserOptionsHandler::FileSelected(const base::FilePath& path, int index,
14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         void* params) {
14435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::RecordAction(UserMetricsAction("Options_SetDownloadDirectory"));
14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs();
14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pref_service->SetFilePath(prefs::kDownloadDefaultDirectory, path);
1446868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  pref_service->SetFilePath(prefs::kSaveFileDefaultDirectory, path);
14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::TouchpadExists(bool exists) {
14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::FundamentalValue val(exists);
14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction("BrowserOptions.showTouchpadControls", val);
14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::MouseExists(bool exists) {
14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::FundamentalValue val(exists);
14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction("BrowserOptions.showMouseControls", val);
14585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1459a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
1460a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void BrowserOptionsHandler::OnUserImagePolicyChanged(
1461a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const base::Value* previous_policy,
1462a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const base::Value* current_policy) {
1463a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  const bool had_policy = previous_policy;
1464a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  const bool has_policy = current_policy;
1465a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  if (had_policy != has_policy)
1466a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    OnAccountPictureManagedChanged(has_policy);
1467a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
1468a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
1469a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void BrowserOptionsHandler::OnWallpaperPolicyChanged(
1470a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    const base::Value* previous_policy,
1471a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    const base::Value* current_policy) {
1472a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  const bool had_policy = previous_policy;
1473a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  const bool has_policy = current_policy;
1474a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  if (had_policy != has_policy)
1475a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    OnWallpaperManagedChanged(has_policy);
1476a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
1477a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1478effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid BrowserOptionsHandler::OnPowerwashDialogShow(
1479effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch     const base::ListValue* args) {
1480effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  UMA_HISTOGRAM_ENUMERATION(
1481effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      "Reset.ChromeOS.PowerwashDialogShown",
1482effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      chromeos::reset::DIALOG_FROM_OPTIONS,
1483effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      chromeos::reset::DIALOG_VIEW_TYPE_SIZE);
1484effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
1485effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
14861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid BrowserOptionsHandler::OnConsumerManagementStatusChanged() {
14871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  const std::string& status = g_browser_process->platform_part()->
14881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      browser_policy_connector_chromeos()->GetConsumerManagementService()->
14891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          GetStatusString();
14901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  web_ui()->CallJavascriptFunction(
14911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      "BrowserOptions.setConsumerManagementStatus", base::StringValue(status));
14921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
14931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1494a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif  // defined(OS_CHROMEOS)
14955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14963240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdochvoid BrowserOptionsHandler::UpdateSyncState() {
14973240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  web_ui()->CallJavascriptFunction("BrowserOptions.updateSyncState",
14983240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch                                   *GetSyncStateDictionary());
14993240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch}
15003240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch
15013240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdochvoid BrowserOptionsHandler::OnSigninAllowedPrefChange() {
15023240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  UpdateSyncState();
15033240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch}
15043240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch
15055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::HandleAutoOpenButton(const base::ListValue* args) {
15065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::RecordAction(UserMetricsAction("Options_ResetAutoOpenFiles"));
15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DownloadManager* manager = BrowserContext::GetDownloadManager(
15085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_ui()->GetWebContents()->GetBrowserContext());
15095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (manager)
15105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DownloadPrefs::FromDownloadManager(manager)->ResetAutoOpen();
15115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
15125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::HandleDefaultFontSize(const base::ListValue* args) {
15145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int font_size;
15155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (ExtractIntegerValue(args, &font_size)) {
15165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (font_size > 0) {
151790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs();
151890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      pref_service->SetInteger(prefs::kWebKitDefaultFontSize, font_size);
15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetupFontSizeSelector();
15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
15215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
15225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::HandleDefaultZoomFactor(
15255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::ListValue* args) {
15265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  double zoom_factor;
15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (ExtractDoubleValue(args, &zoom_factor)) {
152858e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch    default_zoom_level_.SetValue(content::ZoomFactorToZoomLevel(zoom_factor));
15295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
15305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
15315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::HandleRestartBrowser(const base::ListValue* args) {
1533f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(OS_WIN) && defined(USE_ASH)
1534f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // If hardware acceleration is disabled then we need to force restart
1535f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // browser in desktop mode.
1536f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // TODO(shrikant): Remove this once we fix start mode logic for browser.
1537f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Currently there are issues with determining correct browser mode
1538f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // at startup.
1539f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (chrome::GetActiveDesktop() == chrome::HOST_DESKTOP_TYPE_ASH) {
1540f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    PrefService* pref_service = g_browser_process->local_state();
1541f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    if (!pref_service->GetBoolean(prefs::kHardwareAccelerationModeEnabled)) {
1542f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      chrome::AttemptRestartToDesktopMode();
1543f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      return;
1544f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    }
1545f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
1546f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif
1547f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
15485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(OS_WIN)
15495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // On Windows Breakpad will upload crash reports if the breakpad pipe name
15505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // environment variable is defined. So we undefine this environment variable
15515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // before restarting, as the restarted processes will inherit their
15525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // environment variables from ours, thus suppressing crash uploads.
15535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  PrefService* pref_service = g_browser_process->local_state();
15545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (!pref_service->GetBoolean(prefs::kMetricsReportingEnabled)) {
15555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    HMODULE exe_module = GetModuleHandle(chrome::kBrowserProcessExecutableName);
15565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (exe_module) {
15575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      typedef void (__cdecl *ClearBreakpadPipeEnvVar)();
15585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      ClearBreakpadPipeEnvVar clear = reinterpret_cast<ClearBreakpadPipeEnvVar>(
15595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          GetProcAddress(exe_module, "ClearBreakpadPipeEnvironmentVariable"));
15605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      if (clear)
15615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        clear();
15625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
15635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
15645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
15655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
15662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  chrome::AttemptRestart();
15672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
15682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
15695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::HandleRequestProfilesInfo(
15705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::ListValue* args) {
1571ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  SendProfilesInfo();
1572ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
1573ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
15745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_CHROMEOS)
15755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::ShowNetworkProxySettings(
15765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::ListValue* args) {
15775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::RecordAction(UserMetricsAction("Options_ShowProxySettings"));
15785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AdvancedOptionsUtilities::ShowNetworkProxySettings(
15795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_ui()->GetWebContents());
15805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
15815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
15825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_WIN) || defined(OS_MACOSX)
15845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::ShowManageSSLCertificates(
15855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::ListValue* args) {
15865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::RecordAction(UserMetricsAction("Options_ManageSSLCertificates"));
15875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AdvancedOptionsUtilities::ShowManageSSLCertificates(
15885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_ui()->GetWebContents());
15895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
15905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
15915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
159223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#if defined(ENABLE_SERVICE_DISCOVERY)
159368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
15945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::ShowCloudPrintDevicesPage(
15955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::ListValue* args) {
159668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  content::RecordAction(UserMetricsAction("Options_CloudPrintDevicesPage"));
159768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Navigate in current tab to devices page.
159868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  OpenURLParams params(
159968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      GURL(chrome::kChromeUIDevicesURL), Referrer(),
16001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      CURRENT_TAB, ui::PAGE_TRANSITION_LINK, false);
160168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  web_ui()->GetWebContents()->OpenURL(params);
160268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
160368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
160468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#endif
160568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
16065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::HandleRequestHotwordAvailable(
16075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::ListValue* args) {
16085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Profile* profile = Profile::FromWebUI(web_ui());
16095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::string group = base::FieldTrialList::FindFullName("VoiceTrigger");
16106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  base::FundamentalValue enabled(
16116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      profile->GetPrefs()->GetBoolean(prefs::kHotwordSearchEnabled));
1612116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (group != "" && group != "Disabled" &&
1613116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      HotwordServiceFactory::IsHotwordAllowed(profile)) {
1614116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // Update the current error value.
1615116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    HotwordServiceFactory::IsServiceAvailable(profile);
1616116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    int error = HotwordServiceFactory::GetCurrentError(profile);
1617116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    if (!error) {
16186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      web_ui()->CallJavascriptFunction("BrowserOptions.showHotwordSection",
16196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                                       enabled);
1620116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    } else {
1621cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      base::string16 hotword_help_url =
1622cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          base::ASCIIToUTF16(chrome::kHotwordLearnMoreURL);
1623116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      base::StringValue error_message(l10n_util::GetStringUTF16(error));
1624116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      if (error == IDS_HOTWORD_GENERIC_ERROR_MESSAGE) {
1625116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        error_message = base::StringValue(
1626116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            l10n_util::GetStringFUTF16(error, hotword_help_url));
1627116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      }
1628cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      web_ui()->CallJavascriptFunction("BrowserOptions.showHotwordSection",
1629116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                       enabled, error_message);
1630cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    }
16316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    if (CommandLine::ForCurrentProcess()->HasSwitch(
16326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            switches::kEnableExperimentalHotwording)) {
16336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      web_ui()->CallJavascriptFunction(
16346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          "BrowserOptions.showHotwordAlwaysOnSection");
16356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
16365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
16375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
16385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
16391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid BrowserOptionsHandler::HandleLaunchHotwordAudioVerificationApp(
16401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const base::ListValue* args) {
16411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  Profile* profile = Profile::FromWebUI(web_ui());
16421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
16431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool retrain = false;
16441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool success = args->GetBoolean(0, &retrain);
16451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DCHECK(success);
16461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  HotwordService::LaunchMode launch_mode =
16471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      HotwordService::HOTWORD_AND_AUDIO_HISTORY;
16481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
16491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (retrain) {
16501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    DCHECK(profile->GetPrefs()->GetBoolean(
16511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        prefs::kHotwordAlwaysOnSearchEnabled));
16521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    DCHECK(profile->GetPrefs()->GetBoolean(
16531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        prefs::kHotwordAudioLoggingEnabled));
16541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
16551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    launch_mode = HotwordService::SPEECH_TRAINING;
16561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  } else if (profile->GetPrefs()->GetBoolean(
16571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      prefs::kHotwordAudioLoggingEnabled)) {
16581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    DCHECK(!profile->GetPrefs()->GetBoolean(
16591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        prefs::kHotwordAlwaysOnSearchEnabled));
16601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
16611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // TODO(kcarattini): Make sure the Chrome Audio Logging pref is synced
16621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // to the account-level Audio History setting from footprints.
16631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    launch_mode = HotwordService::HOTWORD_ONLY;
16641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  } else {
16651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    DCHECK(!profile->GetPrefs()->GetBoolean(
16661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        prefs::kHotwordAlwaysOnSearchEnabled));
16671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
16681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
16691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  HotwordService* hotword_service =
16701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      HotwordServiceFactory::GetForProfile(profile);
16711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (!hotword_service)
16721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    return;
16731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
16741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  hotword_service->LaunchHotwordAudioVerificationApp(launch_mode);
16751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
16761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
167723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void BrowserOptionsHandler::HandleLaunchEasyUnlockSetup(
167823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    const base::ListValue* args) {
16795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EasyUnlockService::Get(Profile::FromWebUI(web_ui()))->LaunchSetup();
168023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
168123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1682010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void BrowserOptionsHandler::HandleRefreshExtensionControlIndicators(
1683010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    const base::ListValue* args) {
1684010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  SetupExtensionControlledIndicators();
1685010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
1686010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
16875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
16885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::HandleOpenWallpaperManager(
16895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::ListValue* args) {
1690c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ash::Shell::GetInstance()->user_wallpaper_delegate()->OpenSetWallpaperPage();
16915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
16925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::VirtualKeyboardChangeCallback(
16945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::ListValue* args) {
16955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool enabled = false;
16965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  args->GetBoolean(0, &enabled);
16975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chromeos::accessibility::EnableVirtualKeyboard(enabled);
16995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
17005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::PerformFactoryResetRestart(
17025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::ListValue* args) {
17035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  policy::BrowserPolicyConnectorChromeOS* connector =
17045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      g_browser_process->platform_part()->browser_policy_connector_chromeos();
17055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (connector->IsEnterpriseManaged())
17065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
17075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* prefs = g_browser_process->local_state();
17095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs->SetBoolean(prefs::kFactoryResetRequested, true);
17105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs->CommitPendingWrite();
17115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Perform sign out. Current chrome process will then terminate, new one will
17135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // be launched (as if it was a restart).
17145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart();
17155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
17165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::SetupAccessibilityFeatures() {
17185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* pref_service = g_browser_process->local_state();
17195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::FundamentalValue virtual_keyboard_enabled(
1720f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      pref_service->GetBoolean(prefs::kAccessibilityVirtualKeyboardEnabled));
17215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction(
17225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "BrowserOptions.setVirtualKeyboardCheckboxState",
17235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      virtual_keyboard_enabled);
17245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
17255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
17265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::SetupMetricsReportingSettingVisibility() {
17285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(GOOGLE_CHROME_BUILD)
17295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Don't show the reporting setting if we are in the guest mode.
17305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (Profile::FromWebUI(web_ui())->IsGuestSession()) {
17315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::FundamentalValue visible(false);
17325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    web_ui()->CallJavascriptFunction(
17335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "BrowserOptions.setMetricsReportingSettingVisibility", visible);
17345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
17355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
17365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
17375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void BrowserOptionsHandler::SetupNetworkPredictionControl() {
17396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs();
17406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
17416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  base::DictionaryValue dict;
17426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dict.SetInteger("value",
17436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                  pref_service->GetInteger(prefs::kNetworkPredictionOptions));
17446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dict.SetBoolean("disabled",
17456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                  !pref_service->IsUserModifiablePreference(
17466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                      prefs::kNetworkPredictionOptions));
17476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
17486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  web_ui()->CallJavascriptFunction("BrowserOptions.setNetworkPredictionValue",
17496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                                   dict);
17506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
17516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
17525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::SetupFontSizeSelector() {
175390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs();
175490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  const PrefService::Preference* default_font_size =
175590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      pref_service->FindPreference(prefs::kWebKitDefaultFontSize);
175690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  const PrefService::Preference* default_fixed_font_size =
175790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      pref_service->FindPreference(prefs::kWebKitDefaultFixedFontSize);
175890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
17595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::DictionaryValue dict;
176090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  dict.SetInteger("value",
176190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                  pref_service->GetInteger(prefs::kWebKitDefaultFontSize));
176290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
176390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // The font size control displays the value of the default font size, but
176490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // setting it alters both the default font size and the default fixed font
176590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // size. So it must be disabled when either of those prefs is not user
176690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // modifiable.
176790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  dict.SetBoolean("disabled",
176890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      !default_font_size->IsUserModifiable() ||
176990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      !default_fixed_font_size->IsUserModifiable());
177090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
177190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // This is a poor man's version of CoreOptionsHandler::CreateValueForPref,
177290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // adapted to consider two prefs. It may be better to refactor
177390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // CreateValueForPref so it can be called from here.
177490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  if (default_font_size->IsManaged() || default_fixed_font_size->IsManaged()) {
177590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      dict.SetString("controlledBy", "policy");
177690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  } else if (default_font_size->IsExtensionControlled() ||
177790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)             default_fixed_font_size->IsExtensionControlled()) {
177890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      dict.SetString("controlledBy", "extension");
177990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  }
178090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
178190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  web_ui()->CallJavascriptFunction("BrowserOptions.setFontSize", dict);
17825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
17835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::SetupPageZoomSelector() {
17855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs();
17865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  double default_zoom_level = pref_service->GetDouble(prefs::kDefaultZoomLevel);
17875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  double default_zoom_factor =
178858e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch      content::ZoomLevelToZoomFactor(default_zoom_level);
17895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Generate a vector of zoom factors from an array of known presets along with
17915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the default factor added if necessary.
17925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<double> zoom_factors =
17935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      chrome_page_zoom::PresetZoomFactors(default_zoom_factor);
17945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Iterate through the zoom factors and and build the contents of the
17965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // selector that will be sent to the javascript handler.
17975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Each item in the list has the following parameters:
17985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // 1. Title (string).
17995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // 2. Value (double).
18005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // 3. Is selected? (bool).
18015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::ListValue zoom_factors_value;
18025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (std::vector<double>::const_iterator i = zoom_factors.begin();
18035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       i != zoom_factors.end(); ++i) {
18045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    base::ListValue* option = new base::ListValue();
18055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    double factor = *i;
18065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int percent = static_cast<int>(factor * 100 + 0.5);
18072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    option->Append(new base::StringValue(
18085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        l10n_util::GetStringFUTF16Int(IDS_ZOOM_PERCENT, percent)));
18092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    option->Append(new base::FundamentalValue(factor));
18105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool selected = content::ZoomValuesEqual(factor, default_zoom_factor);
18112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    option->Append(new base::FundamentalValue(selected));
18125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    zoom_factors_value.Append(option);
18135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
18145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction(
18165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "BrowserOptions.setupPageZoomSelector", zoom_factors_value);
18175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
18185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::SetupAutoOpenFileTypes() {
18205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set the hidden state for the AutoOpenFileTypesResetToDefault button.
18215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We show the button if the user has any auto-open file types registered.
18225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DownloadManager* manager = BrowserContext::GetDownloadManager(
18235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_ui()->GetWebContents()->GetBrowserContext());
18245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool display = manager &&
18255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      DownloadPrefs::FromDownloadManager(manager)->IsAutoOpenUsed();
18265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::FundamentalValue value(display);
18275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction(
18285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "BrowserOptions.setAutoOpenFileTypesDisplayed", value);
18295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
18305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::SetupProxySettingsSection() {
18325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_CHROMEOS)
18334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Disable the button if proxy settings are managed by a sysadmin, overridden
18344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // by an extension, or the browser is running in Windows Ash (on Windows the
18354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // proxy settings dialog will open on the Windows desktop and be invisible
18364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // to a user in Ash).
18374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  bool is_win_ash = false;
18384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_WIN)
1839f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  chrome::HostDesktopType desktop_type = helper::GetDesktopType(web_ui());
1840f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  is_win_ash = (desktop_type == chrome::HOST_DESKTOP_TYPE_ASH);
18414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif
18425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs();
18435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const PrefService::Preference* proxy_config =
18445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      pref_service->FindPreference(prefs::kProxy);
18455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_extension_controlled = (proxy_config &&
18465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  proxy_config->IsExtensionControlled());
18475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::FundamentalValue disabled(is_win_ash || (proxy_config &&
18494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                  !proxy_config->IsUserModifiable()));
18502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FundamentalValue extension_controlled(is_extension_controlled);
185146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  web_ui()->CallJavascriptFunction("BrowserOptions.setupProxySettingsButton",
18522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   disabled, extension_controlled);
18535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if defined(OS_WIN)
185546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetupExtensionControlledIndicators();
185646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif  // defined(OS_WIN)
185746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
18585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // !defined(OS_CHROMEOS)
18595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
18605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1861f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void BrowserOptionsHandler::SetupManageCertificatesSection() {
1862f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(OS_WIN)
1863f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Disable the button if the settings page is displayed in Windows Ash,
1864f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // otherwise the proxy settings dialog will open on the Windows desktop and
1865f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // be invisible to a user in Ash.
1866f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (helper::GetDesktopType(web_ui()) == chrome::HOST_DESKTOP_TYPE_ASH) {
1867f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    base::FundamentalValue enabled(false);
1868f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    web_ui()->CallJavascriptFunction("BrowserOptions.enableCertificateButton",
1869f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                     enabled);
1870f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
1871f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif  // defined(OS_WIN)
1872f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
1873f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
18740f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)void BrowserOptionsHandler::SetupManagingSupervisedUsers() {
18750f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  bool has_users = !Profile::FromWebUI(web_ui())->
1876f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      GetPrefs()->GetDictionary(prefs::kSupervisedUsers)->empty();
18770f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  base::FundamentalValue has_users_value(has_users);
18780f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  web_ui()->CallJavascriptFunction(
18790f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      "BrowserOptions.updateManagesSupervisedUsers",
18800f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      has_users_value);
18810f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}
18820f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
188323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void BrowserOptionsHandler::SetupEasyUnlock() {
18846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // TODO(xiyuan): Update when pairing data is really availble.
18856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  const base::ListValue* devices =
18866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      EasyUnlockService::Get(Profile::FromWebUI(web_ui()))->GetRemoteDevices();
18876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  bool has_pairing = devices && !devices->empty();
188823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  base::FundamentalValue has_pairing_value(has_pairing);
188923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  web_ui()->CallJavascriptFunction(
189023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      "BrowserOptions.updateEasyUnlock",
189123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      has_pairing_value);
189223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
189323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1894010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void BrowserOptionsHandler::SetupExtensionControlledIndicators() {
1895c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_WIN)
1896010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  base::DictionaryValue extension_controlled;
1897010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
1898010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Check if an extension is overriding the Search Engine.
189946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  const extensions::Extension* extension =
190046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      extensions::GetExtensionOverridingSearchEngine(
1901f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)          Profile::FromWebUI(web_ui()));
1902010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  AppendExtensionData("searchEngine", extension, &extension_controlled);
1903c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
1904010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Check if an extension is overriding the Home page.
190546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  extension = extensions::GetExtensionOverridingHomepage(
1906f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      Profile::FromWebUI(web_ui()));
1907010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  AppendExtensionData("homePage", extension, &extension_controlled);
1908c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
1909010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Check if an extension is overriding the Startup pages.
191046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  extension = extensions::GetExtensionOverridingStartupPages(
1911f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      Profile::FromWebUI(web_ui()));
1912010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  AppendExtensionData("startUpPage", extension, &extension_controlled);
1913010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
1914010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Check if an extension is overriding the NTP page.
1915010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  GURL ntp_url(chrome::kChromeUINewTabURL);
1916010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  bool ignored_param;
1917010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  extension = NULL;
1918010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  content::BrowserURLHandler::GetInstance()->RewriteURLIfNecessary(
1919010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      &ntp_url,
1920010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      web_ui()->GetWebContents()->GetBrowserContext(),
1921010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      &ignored_param);
1922010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  if (ntp_url.SchemeIs("chrome-extension")) {
1923010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    using extensions::ExtensionRegistry;
1924010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    ExtensionRegistry* registry = ExtensionRegistry::Get(
1925010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        Profile::FromWebUI(web_ui()));
1926010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    extension = registry->GetExtensionById(ntp_url.host(),
1927010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                           ExtensionRegistry::ENABLED);
1928010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
1929010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  AppendExtensionData("newTabPage", extension, &extension_controlled);
1930010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
193146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Check if an extension is overwriting the proxy setting.
193246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  extension = extensions::GetExtensionOverridingProxy(
193346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      Profile::FromWebUI(web_ui()));
193446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  AppendExtensionData("proxy", extension, &extension_controlled);
193546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
1936010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  web_ui()->CallJavascriptFunction("BrowserOptions.toggleExtensionIndicators",
1937010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                   extension_controlled);
1938c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif  // defined(OS_WIN)
1939010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
1940c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
19411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid BrowserOptionsHandler::SetupMetricsReportingCheckbox() {
19421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // This function does not work for ChromeOS and non-official builds.
19431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if !defined(OS_CHROMEOS) && defined(GOOGLE_CHROME_BUILD)
19441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool checked = ChromeMetricsServiceAccessor::IsMetricsReportingEnabled();
19451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool disabled = !IsMetricsReportingUserChangable();
19461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
19471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetMetricsReportingCheckbox(checked, disabled);
19481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif
19491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
19501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
19511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid BrowserOptionsHandler::HandleMetricsReportingChange(
19521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const base::ListValue* args) {
19531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool enable;
19541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (!args->GetBoolean(0, &enable))
19551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    return;
19561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
19571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  InitiateMetricsReportingChange(
19581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      enable,
19591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      base::Bind(&BrowserOptionsHandler::MetricsReportingChangeCallback,
19601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 base::Unretained(this)));
19611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
19621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
19631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid BrowserOptionsHandler::MetricsReportingChangeCallback(bool enabled) {
19641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetMetricsReportingCheckbox(enabled, !IsMetricsReportingUserChangable());
19651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
19661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
19671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid BrowserOptionsHandler::SetMetricsReportingCheckbox(bool checked,
19681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                                        bool disabled) {
19691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  web_ui()->CallJavascriptFunction(
19701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      "BrowserOptions.setMetricsReportingCheckboxState",
19711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      base::FundamentalValue(checked),
19721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      base::FundamentalValue(disabled));
19731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
19741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
19755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace options
1976