browser_options_handler.cc revision 6e8cce623b6e4fe0c9e4af605d675dd9d0338c38
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)
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "apps/app_window.h"
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "apps/app_window_registry.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind_helpers.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h"
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/environment.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/singleton.h"
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/metrics/field_trial.h"
18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/metrics/histogram.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h"
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/prefs/scoped_user_pref_update.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/stl_util.h"
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_number_conversions.h"
24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/value_conversions.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/auto_launch_trial.h"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h"
297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h"
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_page_zoom.h"
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/custom_home_pages_table_model.h"
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/download/download_prefs.h"
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/gpu/gpu_mode_manager.h"
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/lifetime/application_lifetime.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"
692385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "chromeos/chromeos_switches.h"
70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url.h"
71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url_service.h"
72e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "components/signin/core/browser/signin_manager.h"
736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/signin/core/common/profile_management_switches.h"
74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/user_manager/user_type.h"
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h"
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/download_manager.h"
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_controller.h"
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_details.h"
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h"
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_source.h"
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_types.h"
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/url_data_source.h"
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/user_metrics.h"
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h"
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/page_zoom.h"
86010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "extensions/browser/extension_registry.h"
87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "google_apis/gaia/gaia_auth_util.h"
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "google_apis/gaia/google_service_auth_error.h"
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/chromium_strings.h"
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h"
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/locale_settings.h"
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/theme_resources.h"
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/skia/include/core/SkBitmap.h"
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/base/webui/web_ui_util.h"
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_CHROMEOS)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/options/advanced_options_utils.h"
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
1028bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "ash/ash_switches.h"
103c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "ash/desktop_background/user_wallpaper_delegate.h"
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/magnifier/magnifier_constants.h"
105c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "ash/shell.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"
1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/chromeos/settings/device_settings_service.h"
1140f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/chromeos/system/timezone_util.h"
115a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/policy/profile_policy_connector.h"
116a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/policy/profile_policy_connector_factory.h"
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_window.h"
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/dbus_thread_manager.h"
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/power_manager_client.h"
120a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/policy_map.h"
121a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/policy_namespace.h"
122a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/policy_service.h"
1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/user_manager/user.h"
1246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/user_manager/user_manager.h"
125a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "policy/policy_constants.h"
1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "policy/proto/device_management_backend.pb.h"
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/image/image_skia.h"
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // defined(OS_CHROMEOS)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
131c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/extensions/settings_api_helpers.h"
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/auto_launch_util.h"
133010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "content/public/browser/browser_url_handler.h"
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // defined(OS_WIN)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#if defined(ENABLE_SERVICE_DISCOVERY)
1374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/local_discovery/privet_notifications.h"
1384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif
1394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::UserMetricsAction;
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserContext;
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread;
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::DownloadManager;
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::OpenURLParams;
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::Referrer;
146010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)using extensions::Extension;
147010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)using extensions::ExtensionRegistry;
148010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
149010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace {
150010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
151010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#if defined(OS_WIN)
152010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void AppendExtensionData(const std::string& key,
153010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                         const Extension* extension,
154010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                         base::DictionaryValue* dict) {
155010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<base::DictionaryValue> details(new base::DictionaryValue);
156010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  details->SetString("id", extension ? extension->id() : std::string());
157010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  details->SetString("name", extension ? extension->name() : std::string());
158010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  dict->Set(key, details.release());
159010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
160010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif  // defined(OS_WIN)
161010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
162010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}  // namespace
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace options {
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowserOptionsHandler::BrowserOptionsHandler()
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : page_initialized_(false),
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      template_url_service_(NULL),
1694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      cloud_print_mdns_ui_enabled_(false),
170effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      signin_observer_(this),
17168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      weak_ptr_factory_(this) {
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_MACOSX)
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  default_browser_worker_ = new ShellIntegration::DefaultBrowserWorker(this);
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
175c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch
17623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#if defined(ENABLE_SERVICE_DISCOVERY)
1776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  cloud_print_mdns_ui_enabled_ = true;
17823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#endif  // defined(ENABLE_SERVICE_DISCOVERY)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowserOptionsHandler::~BrowserOptionsHandler() {
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProfileSyncService* sync_service(ProfileSyncServiceFactory::
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetInstance()->GetForProfile(Profile::FromWebUI(web_ui())));
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (sync_service)
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sync_service->RemoveObserver(this);
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (default_browser_worker_.get())
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default_browser_worker_->ObserverDestroyed();
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (template_url_service_)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    template_url_service_->RemoveObserver(this);
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // There may be pending file dialogs, we need to tell them that we've gone
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // away so they don't try and call back to us.
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (select_folder_dialog_.get())
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    select_folder_dialog_->ListenerDestroyed();
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::GetLocalizedValues(base::DictionaryValue* values) {
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(values);
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  const bool using_new_profiles_ui = switches::IsNewAvatarMenu();
2016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static OptionsStringResource resources[] = {
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "advancedSectionTitleCloudPrint", IDS_GOOGLE_CLOUD_PRINT },
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "currentUserOnly", IDS_OPTIONS_CURRENT_USER_ONLY },
2050529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    { "advancedSectionTitleCertificates",
2060529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      IDS_OPTIONS_ADVANCED_SECTION_TITLE_CERTIFICATES },
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "advancedSectionTitleContent",
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_ADVANCED_SECTION_TITLE_CONTENT },
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "advancedSectionTitleLanguages",
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_ADVANCED_SECTION_TITLE_LANGUAGES },
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "advancedSectionTitleNetwork",
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_ADVANCED_SECTION_TITLE_NETWORK },
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "advancedSectionTitlePrivacy",
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_ADVANCED_SECTION_TITLE_PRIVACY },
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "autofillEnabled", IDS_OPTIONS_AUTOFILL_ENABLE },
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "autologinEnabled", IDS_OPTIONS_PASSWORDS_AUTOLOGIN },
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "autoOpenFileTypesInfo", IDS_OPTIONS_OPEN_FILE_TYPES_AUTOMATICALLY },
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "autoOpenFileTypesResetToDefault",
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_AUTOOPENFILETYPES_RESETTODEFAULT },
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "changeHomePage", IDS_OPTIONS_CHANGE_HOME_PAGE },
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "certificatesManageButton", IDS_OPTIONS_CERTIFICATES_MANAGE_BUTTON },
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "customizeSync", IDS_OPTIONS_CUSTOMIZE_SYNC_BUTTON_LABEL },
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "defaultFontSizeLabel", IDS_OPTIONS_DEFAULT_FONT_SIZE_LABEL },
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "defaultSearchManageEngines", IDS_OPTIONS_DEFAULTSEARCH_MANAGE_ENGINES },
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "defaultZoomFactorLabel", IDS_OPTIONS_DEFAULT_ZOOM_LEVEL_LABEL },
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "disableGData", IDS_OPTIONS_DISABLE_GDATA },
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "disableWebServices", IDS_OPTIONS_DISABLE_WEB_SERVICES },
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "displayOptions",
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_SETTINGS_DISPLAY_OPTIONS_BUTTON_LABEL },
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "doNotTrack", IDS_OPTIONS_ENABLE_DO_NOT_TRACK },
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "doNotTrackConfirmMessage", IDS_OPTIONS_ENABLE_DO_NOT_TRACK_BUBBLE_TEXT },
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "doNotTrackConfirmEnable",
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       IDS_OPTIONS_ENABLE_DO_NOT_TRACK_BUBBLE_ENABLE },
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "doNotTrackConfirmDisable",
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       IDS_OPTIONS_ENABLE_DO_NOT_TRACK_BUBBLE_DISABLE },
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "downloadLocationAskForSaveLocation",
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_DOWNLOADLOCATION_ASKFORSAVELOCATION },
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "downloadLocationBrowseTitle",
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_DOWNLOADLOCATION_BROWSE_TITLE },
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "downloadLocationChangeButton",
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_DOWNLOADLOCATION_CHANGE_BUTTON },
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "downloadLocationGroupName", IDS_OPTIONS_DOWNLOADLOCATION_GROUP_NAME },
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "enableLogging", IDS_OPTIONS_ENABLE_LOGGING },
2485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    { "metricsReportingResetRestart", IDS_OPTIONS_ENABLE_LOGGING_RESTART },
2496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "easyUnlockDescription", IDS_OPTIONS_EASY_UNLOCK_DESCRIPTION },
25023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    { "easyUnlockSectionTitle", IDS_OPTIONS_EASY_UNLOCK_SECTION_TITLE },
25123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    { "easyUnlockSetupButton", IDS_OPTIONS_EASY_UNLOCK_SETUP_BUTTON },
2526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "easyUnlockSetupIntro", IDS_OPTIONS_EASY_UNLOCK_SETUP_INTRO },
253c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    { "extensionControlled", IDS_OPTIONS_TAB_EXTENSION_CONTROLLED },
254c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    { "extensionDisable", IDS_OPTIONS_TAB_EXTENSION_CONTROLLED_DISABLE },
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "fontSettingsCustomizeFontsButton",
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_FONTSETTINGS_CUSTOMIZE_FONTS_BUTTON },
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "fontSizeLabelCustom", IDS_OPTIONS_FONT_SIZE_LABEL_CUSTOM },
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "fontSizeLabelLarge", IDS_OPTIONS_FONT_SIZE_LABEL_LARGE },
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "fontSizeLabelMedium", IDS_OPTIONS_FONT_SIZE_LABEL_MEDIUM },
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "fontSizeLabelSmall", IDS_OPTIONS_FONT_SIZE_LABEL_SMALL },
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "fontSizeLabelVeryLarge", IDS_OPTIONS_FONT_SIZE_LABEL_VERY_LARGE },
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "fontSizeLabelVerySmall", IDS_OPTIONS_FONT_SIZE_LABEL_VERY_SMALL },
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "hideAdvancedSettings", IDS_SETTINGS_HIDE_ADVANCED_SETTINGS },
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "homePageNtp", IDS_OPTIONS_HOMEPAGE_NTP },
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "homePageShowHomeButton", IDS_OPTIONS_TOOLBAR_SHOW_HOME_BUTTON },
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "homePageUseNewTab", IDS_OPTIONS_HOMEPAGE_USE_NEWTAB },
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "homePageUseURL", IDS_OPTIONS_HOMEPAGE_USE_URL },
2686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "hotwordAlwaysOnSearchEnable", IDS_HOTWORD_ALWAYS_ON_SEARCH_PREF_CHKBOX },
2696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "hotwordAudioHistoryEnable", IDS_HOTWORD_AUDIO_HISTORY_PREF_CHKBOX },
2705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    { "hotwordSearchEnable", IDS_HOTWORD_SEARCH_PREF_CHKBOX },
2715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    { "hotwordConfirmEnable", IDS_HOTWORD_CONFIRM_BUBBLE_ENABLE },
2725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    { "hotwordConfirmDisable", IDS_HOTWORD_CONFIRM_BUBBLE_DISABLE },
2735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    { "hotwordConfirmMessage", IDS_HOTWORD_SEARCH_PREF_DESCRIPTION },
274effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    { "hotwordAudioLoggingEnable", IDS_HOTWORD_AUDIO_LOGGING_ENABLE },
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "importData", IDS_OPTIONS_IMPORT_DATA_BUTTON },
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "improveBrowsingExperience", IDS_OPTIONS_IMPROVE_BROWSING_EXPERIENCE },
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "languageAndSpellCheckSettingsButton",
2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_LANGUAGE_AND_INPUT_SETTINGS },
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "linkDoctorPref", IDS_OPTIONS_LINKDOCTOR_PREF },
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "manageAutofillSettings", IDS_OPTIONS_MANAGE_AUTOFILL_SETTINGS_LINK },
281868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    { "manageLanguages", IDS_OPTIONS_TRANSLATE_MANAGE_LANGUAGES },
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "managePasswords", IDS_OPTIONS_PASSWORDS_MANAGE_PASSWORDS_LINK },
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "networkPredictionEnabledDescription",
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_NETWORK_PREDICTION_ENABLED_DESCRIPTION },
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "passwordsAndAutofillGroupName",
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_PASSWORDS_AND_FORMS_GROUP_NAME },
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "passwordManagerEnabled", IDS_OPTIONS_PASSWORD_MANAGER_ENABLE },
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "privacyClearDataButton", IDS_OPTIONS_PRIVACY_CLEAR_DATA_BUTTON },
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "privacyContentSettingsButton",
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_PRIVACY_CONTENT_SETTINGS_BUTTON },
2916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "profilesCreate", using_new_profiles_ui ?
2926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          IDS_NEW_PROFILES_CREATE_BUTTON_LABEL :
2936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          IDS_PROFILES_CREATE_BUTTON_LABEL },
2946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "profilesDelete", using_new_profiles_ui ?
2956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          IDS_NEW_PROFILES_DELETE_BUTTON_LABEL :
2966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          IDS_PROFILES_DELETE_BUTTON_LABEL },
2976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "profilesDeleteSingle", using_new_profiles_ui ?
2986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          IDS_NEW_PROFILES_DELETE_SINGLE_BUTTON_LABEL :
2996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          IDS_PROFILES_DELETE_SINGLE_BUTTON_LABEL },
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "profilesListItemCurrent", IDS_PROFILES_LIST_ITEM_CURRENT },
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "profilesManage", IDS_PROFILES_MANAGE_BUTTON_LABEL },
3020f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    { "profilesSupervisedDashboardTip",
3030f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      IDS_PROFILES_SUPERVISED_USER_DASHBOARD_TIP },
3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_SETTINGS_APP)
3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "profilesAppListSwitch", IDS_SETTINGS_APP_PROFILES_SWITCH_BUTTON_LABEL },
3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "proxiesLabelExtension", IDS_OPTIONS_EXTENSION_PROXIES_LABEL },
3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "proxiesLabelSystem", IDS_OPTIONS_SYSTEM_PROXIES_LABEL,
3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_PRODUCT_NAME },
31090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    { "resetProfileSettings", IDS_RESET_PROFILE_SETTINGS_BUTTON },
31190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    { "resetProfileSettingsDescription",
31290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      IDS_RESET_PROFILE_SETTINGS_DESCRIPTION },
31390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    { "resetProfileSettingsSectionTitle",
31490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      IDS_RESET_PROFILE_SETTINGS_SECTION_TITLE },
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "safeBrowsingEnableProtection",
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_SAFEBROWSING_ENABLEPROTECTION },
317f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    { "safeBrowsingEnableExtendedReporting",
318f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      IDS_OPTIONS_SAFEBROWSING_ENABLE_EXTENDED_REPORTING },
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "sectionTitleAppearance", IDS_APPEARANCE_GROUP_NAME },
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "sectionTitleDefaultBrowser", IDS_OPTIONS_DEFAULTBROWSER_GROUP_NAME },
3216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "sectionTitleUsers", using_new_profiles_ui ?
3226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          IDS_NEW_PROFILES_OPTIONS_GROUP_NAME :
3236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          IDS_PROFILES_OPTIONS_GROUP_NAME },
32446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    { "sectionTitleProxy", IDS_OPTIONS_PROXY_GROUP_NAME },
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "sectionTitleSearch", IDS_OPTIONS_DEFAULTSEARCH_GROUP_NAME },
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "sectionTitleStartup", IDS_OPTIONS_STARTUP_GROUP_NAME },
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "sectionTitleSync", IDS_SYNC_OPTIONS_GROUP_NAME },
3285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    { "sectionTitleVoice", IDS_OPTIONS_VOICE_GROUP_NAME },
3295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    { "settingsTitle", IDS_SETTINGS_TITLE },
3305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    { "showAdvancedSettings", IDS_SETTINGS_SHOW_ADVANCED_SETTINGS },
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "spellingConfirmMessage", IDS_CONTENT_CONTEXT_SPELLING_BUBBLE_TEXT },
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "spellingConfirmEnable", IDS_CONTENT_CONTEXT_SPELLING_BUBBLE_ENABLE },
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "spellingConfirmDisable", IDS_CONTENT_CONTEXT_SPELLING_BUBBLE_DISABLE },
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "spellingPref", IDS_OPTIONS_SPELLING_PREF },
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "startupRestoreLastSession", IDS_OPTIONS_STARTUP_RESTORE_LAST_SESSION },
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "startupSetPages", IDS_OPTIONS_STARTUP_SET_PAGES },
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "startupShowNewTab", IDS_OPTIONS_STARTUP_SHOW_NEWTAB },
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "startupShowPages", IDS_OPTIONS_STARTUP_SHOW_PAGES },
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "suggestPref", IDS_OPTIONS_SUGGEST_PREF },
3406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    { "supervisedUserLabel", IDS_PROFILES_LIST_SUPERVISED_USER_LABEL },
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "syncButtonTextInProgress", IDS_SYNC_NTP_SETUP_IN_PROGRESS },
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "syncButtonTextStop", IDS_SYNC_STOP_SYNCING_BUTTON_LABEL },
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "themesGallery", IDS_THEMES_GALLERY_BUTTON },
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "themesGalleryURL", IDS_THEMES_GALLERY_URL },
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "tabsToLinksPref", IDS_OPTIONS_TABS_TO_LINKS_PREF },
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "toolbarShowBookmarksBar", IDS_OPTIONS_TOOLBAR_SHOW_BOOKMARKS_BAR },
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "toolbarShowHomeButton", IDS_OPTIONS_TOOLBAR_SHOW_HOME_BUTTON },
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "translateEnableTranslate",
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_TRANSLATE_ENABLE_TRANSLATE },
350eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "showWindowDecorations", IDS_SHOW_WINDOW_DECORATIONS },
352eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    { "themesNativeButton", IDS_THEMES_GTK_BUTTON },
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "themesSetClassic", IDS_THEMES_SET_CLASSIC },
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "themes", IDS_THEMES_GROUP_NAME },
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
357558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    { "themesReset", IDS_THEMES_RESET_BUTTON },
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "accessibilityExplanation",
3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_EXPLANATION },
361a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    { "accessibilitySettings",
362a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_SETTINGS },
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "accessibilityHighContrast",
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_HIGH_CONTRAST_DESCRIPTION },
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "accessibilityScreenMagnifier",
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_SCREEN_MAGNIFIER_DESCRIPTION },
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "accessibilityTapDragging",
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_TOUCHPAD_TAP_DRAGGING_DESCRIPTION },
3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "accessibilityScreenMagnifierOff",
3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_SCREEN_MAGNIFIER_OFF },
3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "accessibilityScreenMagnifierFull",
3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_SCREEN_MAGNIFIER_FULL },
3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "accessibilityScreenMagnifierPartial",
3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_SCREEN_MAGNIFIER_PARTIAL },
375868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    { "accessibilityLargeCursor",
376868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_LARGE_CURSOR_DESCRIPTION },
377a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    { "accessibilityStickyKeys",
378a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_STICKY_KEYS_DESCRIPTION },
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "accessibilitySpokenFeedback",
3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_SPOKEN_FEEDBACK_DESCRIPTION },
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "accessibilityTitle",
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_SETTINGS_SECTION_TITLE_ACCESSIBILITY },
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "accessibilityVirtualKeyboard",
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_VIRTUAL_KEYBOARD_DESCRIPTION },
3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "accessibilityAlwaysShowMenu",
3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_SHOULD_ALWAYS_SHOW_MENU },
3878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    { "accessibilityAutoclick",
3888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_AUTOCLICK_DESCRIPTION },
3898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    { "accessibilityAutoclickDropdown",
3908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_AUTOCLICK_DROPDOWN_DESCRIPTION },
3918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    { "autoclickDelayExtremelyShort",
3928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_AUTOCLICK_DELAY_EXTREMELY_SHORT },
3938bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    { "autoclickDelayVeryShort",
3948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_AUTOCLICK_DELAY_VERY_SHORT },
3958bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    { "autoclickDelayShort",
3968bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_AUTOCLICK_DELAY_SHORT },
3978bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    { "autoclickDelayLong",
3988bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_AUTOCLICK_DELAY_LONG },
3998bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    { "autoclickDelayVeryLong",
4008bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_AUTOCLICK_DELAY_VERY_LONG },
401116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    { "consumerManagementDescription",
402116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      IDS_OPTIONS_CONSUMER_MANAGEMENT_DESCRIPTION },
4030529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    { "consumerManagementEnrollButton",
4040529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      IDS_OPTIONS_CONSUMER_MANAGEMENT_ENROLL_BUTTON },
405116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    { "consumerManagementUnenrollButton",
406116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      IDS_OPTIONS_CONSUMER_MANAGEMENT_UNENROLL_BUTTON },
407116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    { "deviceControlTitle", IDS_OPTIONS_DEVICE_CONTROL_SECTION_TITLE },
4084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    { "enableContentProtectionAttestation",
4094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      IDS_OPTIONS_ENABLE_CONTENT_PROTECTION_ATTESTATION },
4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "factoryResetHeading", IDS_OPTIONS_FACTORY_RESET_HEADING },
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "factoryResetTitle", IDS_OPTIONS_FACTORY_RESET },
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "factoryResetRestart", IDS_OPTIONS_FACTORY_RESET_BUTTON },
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "factoryResetDataRestart", IDS_RELAUNCH_BUTTON },
4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "factoryResetWarning", IDS_OPTIONS_FACTORY_RESET_WARNING },
4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "factoryResetHelpUrl", IDS_FACTORY_RESET_HELP_URL },
416f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    { "changePicture", IDS_OPTIONS_CHANGE_PICTURE },
417f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    { "changePictureCaption", IDS_OPTIONS_CHANGE_PICTURE_CAPTION },
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "datetimeTitle", IDS_OPTIONS_SETTINGS_SECTION_TITLE_DATETIME },
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "deviceGroupDescription", IDS_OPTIONS_DEVICE_GROUP_DESCRIPTION },
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "deviceGroupPointer", IDS_OPTIONS_DEVICE_GROUP_POINTER_SECTION },
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "mouseSpeed", IDS_OPTIONS_SETTINGS_MOUSE_SPEED_DESCRIPTION },
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "touchpadSpeed", IDS_OPTIONS_SETTINGS_TOUCHPAD_SPEED_DESCRIPTION },
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "enableScreenlock", IDS_OPTIONS_ENABLE_SCREENLOCKER_CHECKBOX },
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "internetOptionsButtonTitle", IDS_OPTIONS_INTERNET_OPTIONS_BUTTON_TITLE },
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "keyboardSettingsButtonTitle",
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_OPTIONS_DEVICE_GROUP_KEYBOARD_SETTINGS_BUTTON_TITLE },
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "manageAccountsButtonTitle", IDS_OPTIONS_ACCOUNTS_BUTTON_TITLE },
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "noPointingDevices", IDS_OPTIONS_NO_POINTING_DEVICES },
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "sectionTitleDevice", IDS_OPTIONS_DEVICE_GROUP_NAME },
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "sectionTitleInternet", IDS_OPTIONS_INTERNET_OPTIONS_GROUP_LABEL },
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "syncOverview", IDS_SYNC_OVERVIEW },
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "syncButtonTextStart", IDS_SYNC_SETUP_BUTTON_LABEL },
433f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    { "thirdPartyImeConfirmEnable", IDS_OK },
434f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    { "thirdPartyImeConfirmDisable", IDS_CANCEL },
435f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    { "thirdPartyImeConfirmMessage",
436f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      IDS_OPTIONS_SETTINGS_LANGUAGES_THIRD_PARTY_WARNING_MESSAGE },
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "timezone", IDS_OPTIONS_SETTINGS_TIMEZONE_DESCRIPTION },
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "use24HourClock", IDS_OPTIONS_SETTINGS_USE_24HOUR_CLOCK_DESCRIPTION },
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "proxiesConfigureButton", IDS_OPTIONS_PROXIES_CONFIGURE_BUTTON },
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) && defined(USE_ASH)
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "setWallpaper", IDS_SET_WALLPAPER_BUTTON },
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "advancedSectionTitleSystem",
4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_OPTIONS_ADVANCED_SECTION_TITLE_SYSTEM },
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_MACOSX) && !defined(OS_CHROMEOS)
4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "backgroundModeCheckbox", IDS_OPTIONS_SYSTEM_ENABLE_BACKGROUND_MODE },
4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if !defined(OS_CHROMEOS)
4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "gpuModeCheckbox",
4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_OPTIONS_SYSTEM_ENABLE_HARDWARE_ACCELERATION_MODE },
4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "gpuModeResetRestart",
4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_OPTIONS_SYSTEM_ENABLE_HARDWARE_ACCELERATION_MODE_RESTART },
4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Strings with product-name substitutions.
4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "syncOverview", IDS_SYNC_OVERVIEW, IDS_PRODUCT_NAME },
45790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    { "syncButtonTextStart", IDS_SYNC_SETUP_BUTTON_LABEL },
4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
45990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    { "syncButtonTextSignIn", IDS_SYNC_START_SYNC_BUTTON_LABEL,
46090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      IDS_SHORT_PRODUCT_NAME },
4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "profilesSingleUser", IDS_PROFILES_SINGLE_USER_MESSAGE,
4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_PRODUCT_NAME },
4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "defaultBrowserUnknown", IDS_OPTIONS_DEFAULTBROWSER_UNKNOWN,
4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_PRODUCT_NAME },
4655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    { "defaultBrowserUseAsDefault", IDS_OPTIONS_DEFAULTBROWSER_USEASDEFAULT },
4665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    { "autoLaunchText", IDS_AUTOLAUNCH_TEXT },
4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS)
4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "factoryResetDescription", IDS_OPTIONS_FACTORY_RESET_DESCRIPTION,
4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_SHORT_PRODUCT_NAME },
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "languageSectionLabel", IDS_OPTIONS_ADVANCED_LANGUAGE_LABEL,
4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_SHORT_PRODUCT_NAME },
47323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#if defined(ENABLE_SERVICE_DISCOVERY)
47468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    { "cloudPrintDevicesPageButton", IDS_LOCAL_DISCOVERY_DEVICES_PAGE_BUTTON },
47568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    { "cloudPrintEnableNotificationsLabel",
47668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      IDS_LOCAL_DISCOVERY_NOTIFICATIONS_ENABLE_CHECKBOX_LABEL },
47768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#endif
4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  };
4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_SETTINGS_APP)
4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static OptionsStringResource app_resources[] = {
4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "syncOverview", IDS_SETTINGS_APP_SYNC_OVERVIEW },
4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "syncButtonTextStart", IDS_SYNC_START_SYNC_BUTTON_LABEL,
4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_SETTINGS_APP_LAUNCHER_PRODUCT_NAME },
4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "profilesSingleUser", IDS_PROFILES_SINGLE_USER_MESSAGE,
4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_SETTINGS_APP_LAUNCHER_PRODUCT_NAME },
4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "languageSectionLabel", IDS_OPTIONS_ADVANCED_LANGUAGE_LABEL,
4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_SETTINGS_APP_LAUNCHER_PRODUCT_NAME },
4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    { "proxiesLabelSystem", IDS_OPTIONS_SYSTEM_PROXIES_LABEL,
4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_SETTINGS_APP_LAUNCHER_PRODUCT_NAME },
4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
4925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::DictionaryValue* app_values = NULL;
4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CHECK(values->GetDictionary(kSettingsAppKey, &app_values));
4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RegisterStrings(app_values, app_resources, arraysize(app_resources));
4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RegisterStrings(values, resources, arraysize(resources));
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RegisterTitle(values, "doNotTrackConfirmOverlay",
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                IDS_OPTIONS_ENABLE_DO_NOT_TRACK_BUBBLE_TITLE);
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RegisterTitle(values, "spellingConfirmOverlay",
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                IDS_CONTENT_CONTEXT_SPELLING_ASK_GOOGLE);
502c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#if defined(ENABLE_FULL_PRINTING)
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RegisterCloudPrintValues(values);
504c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#endif
5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  values->SetString("syncLearnMoreURL", chrome::kSyncLearnMoreURL);
5075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::string16 omnibox_url = base::ASCIIToUTF16(chrome::kOmniboxLearnMoreURL);
5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  values->SetString(
5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "defaultSearchGroupLabel",
5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      l10n_util::GetStringFUTF16(IDS_SEARCH_PREF_EXPLANATION, omnibox_url));
5115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  values->SetString("hotwordLearnMoreURL", chrome::kHotwordLearnMoreURL);
5125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  RegisterTitle(values, "hotwordConfirmOverlay",
513effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                IDS_HOTWORD_CONFIRM_BUBBLE_TITLE);
5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
516f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Profile* profile = Profile::FromWebUI(web_ui());
5175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::string username = profile->GetProfileName();
5185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (username.empty()) {
5195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    user_manager::User* user =
520116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        chromeos::ProfileHelper::Get()->GetUserByProfile(profile);
521116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    if (user && (user->GetType() != user_manager::USER_TYPE_GUEST))
5225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      username = user->email();
5235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
5245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
5255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (!username.empty())
5265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    username = gaia::SanitizeEmail(gaia::CanonicalizeEmail(username));
5275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
528f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  values->SetString("username", username);
5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Pass along sync status early so it will be available during page init.
5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  values->Set("syncData", GetSyncStateDictionary().release());
5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // The Reset Profile Settings feature makes no sense for an off-the-record
5355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // profile (e.g. in Guest mode on Chrome OS), so hide it.
5365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  values->SetBoolean("enableResetProfileSettings",
5375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                     !Profile::FromWebUI(web_ui())->IsOffTheRecord());
5385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  values->SetString("privacyLearnMoreURL", chrome::kPrivacyLearnMoreURL);
5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  values->SetString("doNotTrackLearnMoreURL", chrome::kDoNotTrackLearnMoreURL);
5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if !defined(OS_CHROMEOS)
5435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  PrefService* pref_service = g_browser_process->local_state();
5445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  values->SetBoolean("metricsReportingEnabledAtStart", pref_service->GetBoolean(
5455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      prefs::kMetricsReportingEnabled));
5465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
5475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(pastarmovj): replace this with a call to the CrosSettings list
5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // handling functionality to come.
5510f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  values->Set("timezoneList", chromeos::system::GetTimezoneList().release());
5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  values->SetString("accessibilityLearnMoreURL",
5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                    chrome::kChromeAccessibilityHelpURL);
5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
556a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  std::string settings_url = std::string("chrome-extension://") +
557a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      extension_misc::kChromeVoxExtensionId +
558a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      chrome::kChromeAccessibilitySettingsURL;
559a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
560a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  values->SetString("accessibilitySettingsURL",
561a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                    settings_url);
562a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
5634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  values->SetString("contentProtectionAttestationLearnMoreURL",
5644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                    chrome::kAttestationForContentProtectionLearnMoreURL);
5654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Creates magnifierList.
5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::ListValue> magnifier_list(new base::ListValue);
5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::ListValue> option_full(new base::ListValue);
5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  option_full->AppendInteger(ash::MAGNIFIER_FULL);
5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  option_full->AppendString(l10n_util::GetStringUTF16(
5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_SCREEN_MAGNIFIER_FULL));
5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  magnifier_list->Append(option_full.release());
5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::ListValue> option_partial(new base::ListValue);
5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  option_partial->AppendInteger(ash::MAGNIFIER_PARTIAL);
5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  option_partial->Append(new base::StringValue(l10n_util::GetStringUTF16(
5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IDS_OPTIONS_SETTINGS_ACCESSIBILITY_SCREEN_MAGNIFIER_PARTIAL)));
5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  magnifier_list->Append(option_partial.release());
5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  values->Set("magnifierList", magnifier_list.release());
5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX)
5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  values->SetString("macPasswordsWarning",
5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      l10n_util::GetStringUTF16(IDS_OPTIONS_PASSWORDS_MAC_WARNING));
5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  values->SetBoolean("multiple_profiles",
5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      g_browser_process->profile_manager()->GetNumberOfProfiles() > 1);
5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (ShouldShowMultiProfilesUserList())
5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    values->Set("profilesInfo", GetProfilesInfoList().release());
5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  values->SetBoolean("profileIsSupervised",
595f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                     Profile::FromWebUI(web_ui())->IsSupervised());
5962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if !defined(OS_CHROMEOS)
5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  values->SetBoolean(
5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "gpuEnabledAtStart",
6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      g_browser_process->gpu_mode_manager()->initial_gpu_mode_pref());
6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
60268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
60323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#if defined(ENABLE_SERVICE_DISCOVERY)
6045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  values->SetBoolean("cloudPrintHideNotificationsCheckbox",
6055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                     !local_discovery::PrivetNotificationService::IsEnabled());
60668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#endif
60768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
6085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  values->SetBoolean("cloudPrintShowMDnsOptions",
6095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                     cloud_print_mdns_ui_enabled_);
61068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
6115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  values->SetString("cloudPrintLearnMoreURL", chrome::kCloudPrintLearnMoreURL);
61268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
6135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  values->SetString("languagesLearnMoreURL",
6145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    chrome::kLanguageSettingsLearnMoreUrl);
61523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
61623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  values->SetBoolean(
6175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "easyUnlockAllowed",
6185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      EasyUnlockService::Get(Profile::FromWebUI(web_ui()))->IsAllowed());
61923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  values->SetString("easyUnlockLearnMoreURL", chrome::kEasyUnlockLearnMoreUrl);
6200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
6216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(OS_CHROMEOS)
6220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  values->SetBoolean(
6230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      "consumerManagementEnabled",
6240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      CommandLine::ForCurrentProcess()->HasSwitch(
6250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch          chromeos::switches::kEnableConsumerManagement));
626f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
6275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  const enterprise_management::PolicyData* policy_data =
6285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      chromeos::DeviceSettingsService::Get()->policy_data();
6295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  values->SetBoolean(
6305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "consumerManagementEnrolled",
6315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      policy_data &&
6325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      policy_data->management_mode() ==
6335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          enterprise_management::PolicyData::CONSUMER_MANAGED);
6345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
635f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  RegisterTitle(values, "thirdPartyImeConfirmOverlay",
636f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                IDS_OPTIONS_SETTINGS_LANGUAGES_THIRD_PARTY_WARNING_TITLE);
63723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#endif
6386d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
6396d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  values->SetBoolean("showSetDefault", ShouldShowSetDefaultBrowser());
6406d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
6416d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  values->SetBoolean("allowAdvancedSettings", ShouldAllowAdvancedSettings());
642116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
643116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  values->SetBoolean("websiteSettingsManagerEnabled",
644116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                     CommandLine::ForCurrentProcess()->HasSwitch(
645116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                         switches::kEnableWebsiteSettingsManager));
6466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
6476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  values->SetBoolean("usingNewProfilesUI", using_new_profiles_ui);
6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
650c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#if defined(ENABLE_FULL_PRINTING)
6515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::RegisterCloudPrintValues(
6525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    base::DictionaryValue* values) {
65368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  values->SetString("cloudPrintOptionLabel",
65468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                    l10n_util::GetStringFUTF16(
65568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                        IDS_CLOUD_PRINT_CHROMEOS_OPTION_LABEL,
65668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                        l10n_util::GetStringUTF16(IDS_GOOGLE_CLOUD_PRINT)));
6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
658c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#endif  // defined(ENABLE_FULL_PRINTING)
6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::RegisterMessages() {
6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "becomeDefaultBrowser",
6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::BecomeDefaultBrowser,
6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "setDefaultSearchEngine",
6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::SetDefaultSearchEngine,
6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
670868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      "deleteProfile",
671868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::DeleteProfile,
672868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                 base::Unretained(this)));
673868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "themesReset",
6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::ThemesReset,
6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
677ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  web_ui()->RegisterMessageCallback(
678ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      "requestProfilesInfo",
679ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      base::Bind(&BrowserOptionsHandler::HandleRequestProfilesInfo,
680ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch                 base::Unretained(this)));
681eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
683eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      "themesSetNative",
684eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      base::Bind(&BrowserOptionsHandler::ThemesSetNative,
6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "selectDownloadLocation",
6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::HandleSelectDownloadLocation,
6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "autoOpenFileTypesAction",
6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::HandleAutoOpenButton,
6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "defaultFontSizeAction",
6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::HandleDefaultFontSize,
6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "defaultZoomFactorAction",
7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::HandleDefaultZoomFactor,
7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(USE_NSS) && !defined(USE_OPENSSL)
7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "showManageSSLCertificates",
7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::ShowManageSSLCertificates,
7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "openWallpaperManager",
7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::HandleOpenWallpaperManager,
7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "virtualKeyboardChange",
7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::VirtualKeyboardChangeCallback,
7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
719effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch       "onPowerwashDialogShow",
720effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch       base::Bind(&BrowserOptionsHandler::OnPowerwashDialogShow,
721effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                  base::Unretained(this)));
722effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  web_ui()->RegisterMessageCallback(
7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "performFactoryResetRestart",
7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::PerformFactoryResetRestart,
7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
7262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else
7272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  web_ui()->RegisterMessageCallback(
7282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "restartBrowser",
7292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::Bind(&BrowserOptionsHandler::HandleRestartBrowser,
7302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                 base::Unretained(this)));
731c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  web_ui()->RegisterMessageCallback(
732c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch      "showNetworkProxySettings",
733c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch      base::Bind(&BrowserOptionsHandler::ShowNetworkProxySettings,
734c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch                 base::Unretained(this)));
735c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#endif  // defined(OS_CHROMEOS)
73668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
73723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#if defined(ENABLE_SERVICE_DISCOVERY)
7384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  if (cloud_print_mdns_ui_enabled_) {
73968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    web_ui()->RegisterMessageCallback(
74068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        "showCloudPrintDevicesPage",
74168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        base::Bind(&BrowserOptionsHandler::ShowCloudPrintDevicesPage,
74268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                   base::Unretained(this)));
74368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  }
74468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#endif
7455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
7465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      "requestHotwordAvailable",
7475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::HandleRequestHotwordAvailable,
7485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 base::Unretained(this)));
749a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
750a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  web_ui()->RegisterMessageCallback(
75123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      "launchEasyUnlockSetup",
75223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      base::Bind(&BrowserOptionsHandler::HandleLaunchEasyUnlockSetup,
75323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)               base::Unretained(this)));
754c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_WIN)
755c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  web_ui()->RegisterMessageCallback(
756c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      "refreshExtensionControlIndicators",
757c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      base::Bind(
758010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)          &BrowserOptionsHandler::HandleRefreshExtensionControlIndicators,
759c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch          base::Unretained(this)));
760c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif  // defined(OS_WIN)
7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7638bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void BrowserOptionsHandler::Uninitialize() {
7648bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  registrar_.RemoveAll();
765010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#if defined(OS_WIN)
766010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ExtensionRegistry::Get(Profile::FromWebUI(web_ui()))->RemoveObserver(this);
767010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif
7688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}
7698bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::OnStateChanged() {
7713240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  UpdateSyncState();
7722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
7732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
774effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid BrowserOptionsHandler::GoogleSigninSucceeded(const std::string& username,
775effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                                  const std::string& password) {
776effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  OnStateChanged();
777effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
778effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
779effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid BrowserOptionsHandler::GoogleSignedOut(const std::string& username) {
780effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  OnStateChanged();
781effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
782effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::PageLoadStarted() {
7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  page_initialized_ = false;
7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::InitializeHandler() {
7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile = Profile::FromWebUI(web_ui());
7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* prefs = profile->GetPrefs();
7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProfileSyncService* sync_service(
7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile));
793effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // TODO(blundell): Use a ScopedObserver to observe the PSS so that cleanup on
794effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // destruction is automatic.
7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (sync_service)
7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sync_service->AddObserver(this);
7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
798effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  SigninManagerBase* signin_manager(
799effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      SigninManagerFactory::GetInstance()->GetForProfile(profile));
800effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (signin_manager)
801effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    signin_observer_.Add(signin_manager);
802effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Create our favicon data source.
8042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  content::URLDataSource::Add(
8052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      profile, new FaviconSource(profile, FaviconSource::FAVICON));
8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  default_browser_policy_.Init(
8082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kDefaultBrowserSettingEnabled,
8092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      g_browser_process->local_state(),
8102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::Bind(&BrowserOptionsHandler::UpdateDefaultBrowserState,
8112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                 base::Unretained(this)));
8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  registrar_.Add(this, chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED,
8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 content::NotificationService::AllSources());
8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  registrar_.Add(this, chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED,
8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 content::NotificationService::AllSources());
8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  registrar_.Add(this, chrome::NOTIFICATION_BROWSER_THEME_CHANGED,
8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 content::Source<ThemeService>(
8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     ThemeServiceFactory::GetForProfile(profile)));
8225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  registrar_.Add(this, chrome::NOTIFICATION_GLOBAL_ERRORS_CHANGED,
8235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 content::Source<Profile>(profile));
8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddTemplateUrlServiceObserver();
8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
827010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ExtensionRegistry::Get(Profile::FromWebUI(web_ui()))->AddObserver(this);
828010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const CommandLine& command_line = *CommandLine::ForCurrentProcess();
8305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (!command_line.HasSwitch(switches::kUserDataDir)) {
8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::Bind(&BrowserOptionsHandler::CheckAutoLaunch,
8332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                   weak_ptr_factory_.GetWeakPtr(),
8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   profile->GetPath()));
8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  auto_open_files_.Init(
8392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kDownloadExtensionsToOpen, prefs,
8402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::Bind(&BrowserOptionsHandler::SetupAutoOpenFileTypes,
8412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                 base::Unretained(this)));
8422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  default_zoom_level_.Init(
8432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kDefaultZoomLevel, prefs,
8442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::Bind(&BrowserOptionsHandler::SetupPageZoomSelector,
8452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                 base::Unretained(this)));
8462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  profile_pref_registrar_.Init(prefs);
8472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  profile_pref_registrar_.Add(
8486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      prefs::kNetworkPredictionOptions,
8496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::SetupNetworkPredictionControl,
8506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                 base::Unretained(this)));
8516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  profile_pref_registrar_.Add(
85290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      prefs::kWebKitDefaultFontSize,
85390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      base::Bind(&BrowserOptionsHandler::SetupFontSizeSelector,
85490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                 base::Unretained(this)));
85590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  profile_pref_registrar_.Add(
85690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      prefs::kWebKitDefaultFixedFontSize,
85790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      base::Bind(&BrowserOptionsHandler::SetupFontSizeSelector,
85890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                 base::Unretained(this)));
85990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  profile_pref_registrar_.Add(
860f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      prefs::kSupervisedUsers,
8610f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::SetupManagingSupervisedUsers,
8620f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)                 base::Unretained(this)));
8630f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  profile_pref_registrar_.Add(
8642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kSigninAllowed,
8652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::Bind(&BrowserOptionsHandler::OnSigninAllowedPrefChange,
8662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                 base::Unretained(this)));
86723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  profile_pref_registrar_.Add(
86823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      prefs::kEasyUnlockPairing,
86923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      base::Bind(&BrowserOptionsHandler::SetupEasyUnlock,
87023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                 base::Unretained(this)));
871c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
872c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_WIN)
873c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  profile_pref_registrar_.Add(
874c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      prefs::kURLsToRestoreOnStartup,
875c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      base::Bind(&BrowserOptionsHandler::SetupExtensionControlledIndicators,
876010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                 base::Unretained(this)));
877c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  profile_pref_registrar_.Add(
878c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      prefs::kHomePage,
879c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      base::Bind(&BrowserOptionsHandler::SetupExtensionControlledIndicators,
880010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                 base::Unretained(this)));
881c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif  // defined(OS_WIN)
882c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
883a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(OS_CHROMEOS)
884a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  if (!policy_registrar_) {
885a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    policy_registrar_.reset(new policy::PolicyChangeRegistrar(
886a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        policy::ProfilePolicyConnectorFactory::GetForProfile(profile)->
887a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            policy_service(),
888a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        policy::PolicyNamespace(policy::POLICY_DOMAIN_CHROME, std::string())));
889a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    policy_registrar_->Observe(
890a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        policy::key::kUserAvatarImage,
891a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        base::Bind(&BrowserOptionsHandler::OnUserImagePolicyChanged,
892a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                   base::Unretained(this)));
893a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    policy_registrar_->Observe(
894a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        policy::key::kWallpaperImage,
895a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        base::Bind(&BrowserOptionsHandler::OnWallpaperPolicyChanged,
896a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                   base::Unretained(this)));
897a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
898a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#else  // !defined(OS_CHROMEOS)
8992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  profile_pref_registrar_.Add(
9002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kProxy,
9012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::Bind(&BrowserOptionsHandler::SetupProxySettingsSection,
9022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                 base::Unretained(this)));
9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // !defined(OS_CHROMEOS)
9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::InitializePage() {
9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  page_initialized_ = true;
908c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OnTemplateURLServiceChanged();
910c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ObserveThemeChanged();
9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OnStateChanged();
9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UpdateDefaultBrowserState();
9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupMetricsReportingSettingVisibility();
9166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  SetupNetworkPredictionControl();
9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupFontSizeSelector();
9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupPageZoomSelector();
9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupAutoOpenFileTypes();
9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupProxySettingsSection();
921f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SetupManageCertificatesSection();
9220f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  SetupManagingSupervisedUsers();
92323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  SetupEasyUnlock();
924010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  SetupExtensionControlledIndicators();
925c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch
9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetupAccessibilityFeatures();
9285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  policy::BrowserPolicyConnectorChromeOS* connector =
9295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      g_browser_process->platform_part()->browser_policy_connector_chromeos();
9305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (!connector->IsEnterpriseManaged() &&
9316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      !user_manager::UserManager::Get()->IsLoggedInAsGuest() &&
9326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      !user_manager::UserManager::Get()->IsLoggedInAsSupervisedUser()) {
9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    web_ui()->CallJavascriptFunction(
9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "BrowserOptions.enableFactoryResetSection");
9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
936a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
9375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Profile* profile = Profile::FromWebUI(web_ui());
938a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  OnAccountPictureManagedChanged(
9395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      policy::ProfilePolicyConnectorFactory::GetForProfile(profile)->
940a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)          policy_service()->GetPolicies(
941a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)              policy::PolicyNamespace(policy::POLICY_DOMAIN_CHROME,
942a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                      std::string()))
943a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)             .Get(policy::key::kUserAvatarImage));
944a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
945a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  OnWallpaperManagedChanged(
946a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      chromeos::WallpaperManager::Get()->IsPolicyControlled(
9476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          user_manager::UserManager::Get()->GetActiveUser()->email()));
9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::CheckAutoLaunch(
9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::WeakPtr<BrowserOptionsHandler> weak_this,
9542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const base::FilePath& profile_path) {
9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
956e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  DCHECK_CURRENTLY_ON(BrowserThread::FILE);
9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Auto-launch is not supported for secondary profiles yet.
9595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (profile_path.BaseName().value() !=
9605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          base::ASCIIToUTF16(chrome::kInitialProfile)) {
9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
9625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Pass in weak pointer to this to avoid race if BrowserOptionsHandler is
9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // deleted.
9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowserOptionsHandler::CheckAutoLaunchCallback,
9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 weak_this,
9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 auto_launch_trial::IsInAutoLaunchGroup(),
9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 auto_launch_util::AutoStartRequested(
9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     profile_path.BaseName().value(),
9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     true,  // Window requested.
9732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     base::FilePath())));
9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::CheckAutoLaunchCallback(
9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool is_in_auto_launch_group,
9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool will_launch_at_login) {
9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
981e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  DCHECK_CURRENTLY_ON(BrowserThread::UI);
9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (is_in_auto_launch_group) {
9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    web_ui()->RegisterMessageCallback("toggleAutoLaunch",
9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::Bind(&BrowserOptionsHandler::ToggleAutoLaunch,
9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::Unretained(this)));
9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::FundamentalValue enabled(will_launch_at_login);
9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    web_ui()->CallJavascriptFunction("BrowserOptions.updateAutoLaunchState",
9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     enabled);
9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool BrowserOptionsHandler::ShouldShowSetDefaultBrowser() {
9965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_CHROMEOS)
9975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // We're always the default browser on ChromeOS.
9985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return false;
9995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#else
10005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Profile* profile = Profile::FromWebUI(web_ui());
10015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return !profile->IsGuestSession();
10025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif
10035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
10045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
10055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool BrowserOptionsHandler::ShouldShowMultiProfilesUserList() {
10065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_CHROMEOS)
10075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // On Chrome OS we use different UI for multi-profiles.
10085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return false;
10095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#else
10105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (helper::GetDesktopType(web_ui()) != chrome::HOST_DESKTOP_TYPE_NATIVE)
10115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return false;
10125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Profile* profile = Profile::FromWebUI(web_ui());
10135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (profile->IsGuestSession())
10145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return false;
10155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return profiles::IsMultipleProfilesEnabled();
10165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif
10175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
10185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1019e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochbool BrowserOptionsHandler::ShouldAllowAdvancedSettings() {
1020e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#if defined(OS_CHROMEOS)
1021e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  // ChromeOS handles guest-mode restrictions in a different manner.
1022e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  return true;
1023e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#else
1024e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  return !Profile::FromWebUI(web_ui())->IsGuestSession();
1025e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#endif
1026e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch}
1027e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::UpdateDefaultBrowserState() {
10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX)
10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ShellIntegration::DefaultWebClientState state =
10312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ShellIntegration::GetDefaultBrowser();
10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int status_string_id;
10332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (state == ShellIntegration::IS_DEFAULT)
10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    status_string_id = IDS_OPTIONS_DEFAULTBROWSER_DEFAULT;
10352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  else if (state == ShellIntegration::NOT_DEFAULT)
10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    status_string_id = IDS_OPTIONS_DEFAULTBROWSER_NOTDEFAULT;
10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else
10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    status_string_id = IDS_OPTIONS_DEFAULTBROWSER_UNKNOWN;
10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetDefaultBrowserUIString(status_string_id);
10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  default_browser_worker_->StartCheckIsDefault();
10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::BecomeDefaultBrowser(const base::ListValue* args) {
10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If the default browser setting is managed then we should not be able to
10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // call this function.
10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (default_browser_policy_.IsManaged())
10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::RecordAction(UserMetricsAction("Options_SetAsDefaultBrowser"));
10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX)
10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (ShellIntegration::SetAsDefaultBrowser())
10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    UpdateDefaultBrowserState();
10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  default_browser_worker_->StartSetAsDefault();
10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Callback takes care of updating UI.
10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If the user attempted to make Chrome the default browser, then he/she
10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // arguably wants to be notified when that changes.
10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* prefs = Profile::FromWebUI(web_ui())->GetPrefs();
10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs->SetBoolean(prefs::kCheckDefaultBrowser, true);
10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int BrowserOptionsHandler::StatusStringIdForState(
10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ShellIntegration::DefaultWebClientState state) {
10692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (state == ShellIntegration::IS_DEFAULT)
10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return IDS_OPTIONS_DEFAULTBROWSER_DEFAULT;
10712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (state == ShellIntegration::NOT_DEFAULT)
10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return IDS_OPTIONS_DEFAULTBROWSER_NOTDEFAULT;
10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return IDS_OPTIONS_DEFAULTBROWSER_UNKNOWN;
10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::SetDefaultWebClientUIState(
10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ShellIntegration::DefaultWebClientUIState state) {
10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int status_string_id;
10791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
10801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  if (state == ShellIntegration::STATE_IS_DEFAULT) {
10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    status_string_id = IDS_OPTIONS_DEFAULTBROWSER_DEFAULT;
10821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  } else if (state == ShellIntegration::STATE_NOT_DEFAULT) {
10831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    if (ShellIntegration::CanSetAsDefaultBrowser() ==
10841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            ShellIntegration::SET_DEFAULT_NOT_ALLOWED) {
10851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      status_string_id = IDS_OPTIONS_DEFAULTBROWSER_SXS;
10861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    } else {
10871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      status_string_id = IDS_OPTIONS_DEFAULTBROWSER_NOTDEFAULT;
10881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    }
10891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  } else if (state == ShellIntegration::STATE_UNKNOWN) {
10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    status_string_id = IDS_OPTIONS_DEFAULTBROWSER_UNKNOWN;
10911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  } else {
10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;  // Still processing.
10931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  }
10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetDefaultBrowserUIString(status_string_id);
10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool BrowserOptionsHandler::IsInteractiveSetDefaultPermitted() {
10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;  // This is UI so we can allow it.
11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::SetDefaultBrowserUIString(int status_string_id) {
11032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::StringValue status_string(
11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      l10n_util::GetStringFUTF16(status_string_id,
11052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                 l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)));
11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FundamentalValue is_default(
11082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      status_string_id == IDS_OPTIONS_DEFAULTBROWSER_DEFAULT);
11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FundamentalValue can_be_default(
11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      !default_browser_policy_.IsManaged() &&
11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      (status_string_id == IDS_OPTIONS_DEFAULTBROWSER_DEFAULT ||
11132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)       status_string_id == IDS_OPTIONS_DEFAULTBROWSER_NOTDEFAULT));
11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction(
11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "BrowserOptions.updateDefaultBrowserState",
11172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      status_string, is_default, can_be_default);
11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::OnTemplateURLServiceChanged() {
11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!template_url_service_ || !template_url_service_->loaded())
11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const TemplateURL* default_url =
11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      template_url_service_->GetDefaultSearchProvider();
11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int default_index = -1;
11285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::ListValue search_engines;
11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TemplateURLService::TemplateURLVector model_urls(
11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      template_url_service_->GetTemplateURLs());
11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < model_urls.size(); ++i) {
1132f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    if (!model_urls[i]->ShowInDefaultList(
1133f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)            template_url_service_->search_terms_data()))
11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      continue;
11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    base::DictionaryValue* entry = new base::DictionaryValue();
11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    entry->SetString("name", model_urls[i]->short_name());
11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    entry->SetInteger("index", i);
11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    search_engines.Append(entry);
11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (model_urls[i] == default_url)
11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      default_index = i;
11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  web_ui()->CallJavascriptFunction(
11452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "BrowserOptions.updateSearchEngines",
11462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      search_engines,
11472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FundamentalValue(default_index),
11482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FundamentalValue(
1149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)          template_url_service_->is_default_search_managed() ||
1150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)          template_url_service_->IsExtensionControlledDefaultSearch()));
1151c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
1152010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  SetupExtensionControlledIndicators();
11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::SetDefaultSearchEngine(
11565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::ListValue* args) {
11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int selected_index = -1;
11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!ExtractIntegerValue(args, &selected_index)) {
11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NOTREACHED();
11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TemplateURLService::TemplateURLVector model_urls(
11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      template_url_service_->GetTemplateURLs());
11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (selected_index >= 0 &&
11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      selected_index < static_cast<int>(model_urls.size()))
11675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    template_url_service_->SetUserSelectedDefaultSearchProvider(
11685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        model_urls[selected_index]);
11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::RecordAction(UserMetricsAction("Options_SearchEngineChanged"));
11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::AddTemplateUrlServiceObserver() {
11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  template_url_service_ =
11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      TemplateURLServiceFactory::GetForProfile(Profile::FromWebUI(web_ui()));
11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (template_url_service_) {
11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    template_url_service_->Load();
11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    template_url_service_->AddObserver(this);
11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1182010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void BrowserOptionsHandler::OnExtensionLoaded(
1183010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    content::BrowserContext* browser_context,
1184010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    const Extension* extension) {
1185010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  SetupExtensionControlledIndicators();
1186010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
1187010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
1188010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void BrowserOptionsHandler::OnExtensionUnloaded(
1189010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    content::BrowserContext* browser_context,
1190010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    const Extension* extension,
1191010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    extensions::UnloadedExtensionInfo::Reason reason) {
1192010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  SetupExtensionControlledIndicators();
1193010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
1194010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::Observe(
11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int type,
11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const content::NotificationSource& source,
11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const content::NotificationDetails& details) {
11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Notifications are used to update the UI dynamically when settings change in
12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the background. If the UI is currently being loaded, no dynamic updates are
12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // possible (as the DOM and JS are not fully loaded) or necessary (as
12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // InitializePage() will update the UI at the end of the load).
12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!page_initialized_)
12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  switch (type) {
12072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case chrome::NOTIFICATION_BROWSER_THEME_CHANGED:
12082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ObserveThemeChanged();
12092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      break;
12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
12112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED:
12122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      UpdateAccountPicture();
12132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      break;
12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
12152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED:
12168bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    SendProfilesInfo();
12172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      break;
12185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case chrome::NOTIFICATION_GLOBAL_ERRORS_CHANGED:
12192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      // Update our sync/signin status display.
12202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      OnStateChanged();
12212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      break;
12222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    default:
12232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      NOTREACHED();
12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::ToggleAutoLaunch(const base::ListValue* args) {
12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!auto_launch_trial::IsInAutoLaunchGroup())
12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool enable;
12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK_EQ(args->GetSize(), 1U);
12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK(args->GetBoolean(0, &enable));
12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile = Profile::FromWebUI(web_ui());
12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::BrowserThread::PostTask(
12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::BrowserThread::FILE, FROM_HERE,
12392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      enable ?
12402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          base::Bind(&auto_launch_util::EnableForegroundStartAtLogin,
12412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     profile->GetPath().BaseName().value(), base::FilePath()) :
12422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          base::Bind(&auto_launch_util::DisableForegroundStartAtLogin,
12432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      profile->GetPath().BaseName().value()));
12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // OS_WIN
12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)scoped_ptr<base::ListValue> BrowserOptionsHandler::GetProfilesInfoList() {
12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProfileInfoCache& cache =
12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      g_browser_process->profile_manager()->GetProfileInfoCache();
12505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<base::ListValue> profile_info_list(new base::ListValue);
12512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath current_profile_path =
12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_ui()->GetWebContents()->GetBrowserContext()->GetPath();
12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0, e = cache.GetNumberOfProfiles(); i < e; ++i) {
12555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    base::DictionaryValue* profile_value = new base::DictionaryValue();
12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    profile_value->SetString("name", cache.GetNameOfProfileAtIndex(i));
12572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::FilePath profile_path = cache.GetPathOfProfileAtIndex(i);
12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    profile_value->Set("filePath", base::CreateFilePathValue(profile_path));
12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    profile_value->SetBoolean("isCurrentProfile",
12605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              profile_path == current_profile_path);
12615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    profile_value->SetBoolean("isSupervised",
12625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                              cache.ProfileIsSupervisedAtIndex(i));
12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool is_gaia_picture =
12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        cache.IsUsingGAIAPictureOfProfileAtIndex(i) &&
12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        cache.GetGAIAPictureOfProfileAtIndex(i);
12675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (is_gaia_picture) {
12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      gfx::Image icon = profiles::GetAvatarIconForWebUI(
12695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          cache.GetAvatarIconOfProfileAtIndex(i), true);
12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      profile_value->SetString("iconURL",
12712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          webui::GetBitmapDataUrl(icon.AsBitmap()));
12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
12735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      size_t icon_index = cache.GetAvatarIconIndexOfProfileAtIndex(i);
12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      profile_value->SetString("iconURL",
1275c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                               profiles::GetDefaultAvatarIconUrl(icon_index));
12765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
12775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    profile_info_list->Append(profile_value);
12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return profile_info_list.Pass();
12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::SendProfilesInfo() {
12855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (!ShouldShowMultiProfilesUserList())
1286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return;
12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction("BrowserOptions.setProfilesInfo",
12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   *GetProfilesInfoList());
12895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
12905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::DeleteProfile(const base::ListValue* args) {
1292868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  DCHECK(args);
12935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const base::Value* file_path_value;
1294868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  if (!args->Get(0, &file_path_value))
1295868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    return;
1296868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
1297868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  base::FilePath file_path;
1298868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  if (!base::GetValueAsFilePath(*file_path_value, &file_path))
1299868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    return;
130068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  helper::DeleteProfileAtPath(file_path, web_ui());
13015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::ObserveThemeChanged() {
13045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile = Profile::FromWebUI(web_ui());
13055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ThemeService* theme_service = ThemeServiceFactory::GetForProfile(profile);
1306cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  bool is_system_theme = false;
1307eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1308eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
1309f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  bool profile_is_supervised = profile->IsSupervised();
1310cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  is_system_theme = theme_service->UsingSystemTheme();
1311cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  base::FundamentalValue native_theme_enabled(!is_system_theme &&
1312f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                              !profile_is_supervised);
1313eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  web_ui()->CallJavascriptFunction("BrowserOptions.setNativeThemeButtonEnabled",
1314eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                   native_theme_enabled);
13155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
13165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1317cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  bool is_classic_theme = !is_system_theme &&
1318eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                          theme_service->UsingDefaultTheme();
1319558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  base::FundamentalValue enabled(!is_classic_theme);
13205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction("BrowserOptions.setThemesResetButtonEnabled",
13215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   enabled);
13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::ThemesReset(const base::ListValue* args) {
13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile = Profile::FromWebUI(web_ui());
1326eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::RecordAction(UserMetricsAction("Options_ThemesReset"));
13275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ThemeServiceFactory::GetForProfile(profile)->UseDefaultTheme();
13285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1330eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
13315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::ThemesSetNative(const base::ListValue* args) {
13325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::RecordAction(UserMetricsAction("Options_GtkThemeSet"));
13335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile = Profile::FromWebUI(web_ui());
1334cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ThemeServiceFactory::GetForProfile(profile)->UseSystemTheme();
13355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
13395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::UpdateAccountPicture() {
13406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  std::string email =
13416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      user_manager::UserManager::Get()->GetLoggedInUser()->email();
13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!email.empty()) {
13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    web_ui()->CallJavascriptFunction("BrowserOptions.updateAccountPicture");
13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::StringValue email_value(email);
13455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    web_ui()->CallJavascriptFunction("BrowserOptions.updateAccountPicture",
13465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     email_value);
13475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
13485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1349a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
1350a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void BrowserOptionsHandler::OnAccountPictureManagedChanged(bool managed) {
1351a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  web_ui()->CallJavascriptFunction("BrowserOptions.setAccountPictureManaged",
1352a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                   base::FundamentalValue(managed));
1353a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
1354a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1355a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void BrowserOptionsHandler::OnWallpaperManagedChanged(bool managed) {
1356a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  web_ui()->CallJavascriptFunction("BrowserOptions.setWallpaperManaged",
1357a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                   base::FundamentalValue(managed));
1358a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)scoped_ptr<base::DictionaryValue>
13625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)BrowserOptionsHandler::GetSyncStateDictionary() {
13635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<base::DictionaryValue> sync_status(new base::DictionaryValue);
13642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Profile* profile = Profile::FromWebUI(web_ui());
13652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (profile->IsGuestSession()) {
13662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Cannot display signin status when running in guest mode on chromeos
13672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // because there is no SigninManager.
13682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    sync_status->SetBoolean("signinAllowed", false);
13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return sync_status.Pass();
13702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1371cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1372f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  sync_status->SetBoolean("supervisedUser", profile->IsSupervised());
13735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1374c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool signout_prohibited = false;
1375c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(OS_CHROMEOS)
13762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Signout is not allowed if the user has policy (crbug.com/172204).
1377c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  signout_prohibited =
1378c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      SigninManagerFactory::GetForProfile(profile)->IsSignoutProhibited();
1379c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif
1380c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1381868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ProfileSyncService* service =
1382868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile);
1383558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  SigninManagerBase* signin = SigninManagerFactory::GetForProfile(profile);
1384558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  DCHECK(signin);
1385c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  sync_status->SetBoolean("signoutAllowed", !signout_prohibited);
13862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  sync_status->SetBoolean("signinAllowed", signin->IsSigninAllowed());
1387a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  sync_status->SetBoolean("syncSystemEnabled", (service != NULL));
13885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sync_status->SetBoolean("setupCompleted",
13892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                          service && service->HasSyncSetupCompleted());
13902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  sync_status->SetBoolean("setupInProgress",
13912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      service && !service->IsManaged() && service->FirstSetupInProgress());
13925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1393a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  base::string16 status_label;
1394a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  base::string16 link_label;
13955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool status_has_error = sync_ui_util::GetStatusLabels(
13965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      service, *signin, sync_ui_util::WITH_HTML, &status_label, &link_label) ==
13975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          sync_ui_util::SYNC_ERROR;
13985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sync_status->SetString("statusText", status_label);
13995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sync_status->SetString("actionLinkText", link_label);
14005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sync_status->SetBoolean("hasError", status_has_error);
14015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  sync_status->SetBoolean("managed", service && service->IsManaged());
14032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  sync_status->SetBoolean("signedIn",
14042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                          !signin->GetAuthenticatedUsername().empty());
14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sync_status->SetBoolean("hasUnrecoverableError",
14062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                          service && service->HasUnrecoverableError());
14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return sync_status.Pass();
14095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::HandleSelectDownloadLocation(
14125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::ListValue* args) {
14135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs();
14145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  select_folder_dialog_ = ui::SelectFileDialog::Create(
14155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this, new ChromeSelectFilePolicy(web_ui()->GetWebContents()));
14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui::SelectFileDialog::FileTypeInfo info;
14172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  info.support_drive = true;
14185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  select_folder_dialog_->SelectFile(
14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ui::SelectFileDialog::SELECT_FOLDER,
14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      l10n_util::GetStringUTF16(IDS_OPTIONS_DOWNLOADLOCATION_BROWSE_TITLE),
14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      pref_service->GetFilePath(prefs::kDownloadDefaultDirectory),
1422c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      &info,
1423c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      0,
1424c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      base::FilePath::StringType(),
1425010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      web_ui()->GetWebContents()->GetTopLevelNativeWindow(),
1426c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      NULL);
14275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
14285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void BrowserOptionsHandler::FileSelected(const base::FilePath& path, int index,
14305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         void* params) {
14315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::RecordAction(UserMetricsAction("Options_SetDownloadDirectory"));
14325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs();
14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pref_service->SetFilePath(prefs::kDownloadDefaultDirectory, path);
1434868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  pref_service->SetFilePath(prefs::kSaveFileDefaultDirectory, path);
14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
14365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
14385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::TouchpadExists(bool exists) {
14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::FundamentalValue val(exists);
14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction("BrowserOptions.showTouchpadControls", val);
14415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::MouseExists(bool exists) {
14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::FundamentalValue val(exists);
14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction("BrowserOptions.showMouseControls", val);
14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1447a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
1448a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void BrowserOptionsHandler::OnUserImagePolicyChanged(
1449a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const base::Value* previous_policy,
1450a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const base::Value* current_policy) {
1451a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  const bool had_policy = previous_policy;
1452a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  const bool has_policy = current_policy;
1453a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  if (had_policy != has_policy)
1454a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    OnAccountPictureManagedChanged(has_policy);
1455a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
1456a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
1457a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void BrowserOptionsHandler::OnWallpaperPolicyChanged(
1458a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    const base::Value* previous_policy,
1459a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    const base::Value* current_policy) {
1460a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  const bool had_policy = previous_policy;
1461a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  const bool has_policy = current_policy;
1462a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  if (had_policy != has_policy)
1463a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    OnWallpaperManagedChanged(has_policy);
1464a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
1465a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1466effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid BrowserOptionsHandler::OnPowerwashDialogShow(
1467effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch     const base::ListValue* args) {
1468effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  UMA_HISTOGRAM_ENUMERATION(
1469effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      "Reset.ChromeOS.PowerwashDialogShown",
1470effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      chromeos::reset::DIALOG_FROM_OPTIONS,
1471effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      chromeos::reset::DIALOG_VIEW_TYPE_SIZE);
1472effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
1473effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1474a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif  // defined(OS_CHROMEOS)
14755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14763240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdochvoid BrowserOptionsHandler::UpdateSyncState() {
14773240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  web_ui()->CallJavascriptFunction("BrowserOptions.updateSyncState",
14783240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch                                   *GetSyncStateDictionary());
14793240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch}
14803240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch
14813240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdochvoid BrowserOptionsHandler::OnSigninAllowedPrefChange() {
14823240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  UpdateSyncState();
14833240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch}
14843240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch
14855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::HandleAutoOpenButton(const base::ListValue* args) {
14865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::RecordAction(UserMetricsAction("Options_ResetAutoOpenFiles"));
14875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DownloadManager* manager = BrowserContext::GetDownloadManager(
14885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_ui()->GetWebContents()->GetBrowserContext());
14895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (manager)
14905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DownloadPrefs::FromDownloadManager(manager)->ResetAutoOpen();
14915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
14925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::HandleDefaultFontSize(const base::ListValue* args) {
14945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int font_size;
14955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (ExtractIntegerValue(args, &font_size)) {
14965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (font_size > 0) {
149790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs();
149890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      pref_service->SetInteger(prefs::kWebKitDefaultFontSize, font_size);
14995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SetupFontSizeSelector();
15005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
15015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
15025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
15035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::HandleDefaultZoomFactor(
15055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::ListValue* args) {
15065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  double zoom_factor;
15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (ExtractDoubleValue(args, &zoom_factor)) {
150858e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch    default_zoom_level_.SetValue(content::ZoomFactorToZoomLevel(zoom_factor));
15095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
15105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
15115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::HandleRestartBrowser(const base::ListValue* args) {
1513f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(OS_WIN) && defined(USE_ASH)
1514f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // If hardware acceleration is disabled then we need to force restart
1515f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // browser in desktop mode.
1516f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // TODO(shrikant): Remove this once we fix start mode logic for browser.
1517f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Currently there are issues with determining correct browser mode
1518f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // at startup.
1519f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (chrome::GetActiveDesktop() == chrome::HOST_DESKTOP_TYPE_ASH) {
1520f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    PrefService* pref_service = g_browser_process->local_state();
1521f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    if (!pref_service->GetBoolean(prefs::kHardwareAccelerationModeEnabled)) {
1522f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      chrome::AttemptRestartToDesktopMode();
1523f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      return;
1524f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    }
1525f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
1526f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif
1527f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
15285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(OS_WIN)
15295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // On Windows Breakpad will upload crash reports if the breakpad pipe name
15305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // environment variable is defined. So we undefine this environment variable
15315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // before restarting, as the restarted processes will inherit their
15325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // environment variables from ours, thus suppressing crash uploads.
15335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  PrefService* pref_service = g_browser_process->local_state();
15345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (!pref_service->GetBoolean(prefs::kMetricsReportingEnabled)) {
15355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    HMODULE exe_module = GetModuleHandle(chrome::kBrowserProcessExecutableName);
15365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (exe_module) {
15375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      typedef void (__cdecl *ClearBreakpadPipeEnvVar)();
15385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      ClearBreakpadPipeEnvVar clear = reinterpret_cast<ClearBreakpadPipeEnvVar>(
15395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          GetProcAddress(exe_module, "ClearBreakpadPipeEnvironmentVariable"));
15405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      if (clear)
15415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        clear();
15425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
15435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
15445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
15455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
15462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  chrome::AttemptRestart();
15472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
15482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
15495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::HandleRequestProfilesInfo(
15505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::ListValue* args) {
1551ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  SendProfilesInfo();
1552ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
1553ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
15545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_CHROMEOS)
15555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::ShowNetworkProxySettings(
15565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::ListValue* args) {
15575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::RecordAction(UserMetricsAction("Options_ShowProxySettings"));
15585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AdvancedOptionsUtilities::ShowNetworkProxySettings(
15595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_ui()->GetWebContents());
15605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
15615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
15625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(USE_NSS) && !defined(USE_OPENSSL)
15645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::ShowManageSSLCertificates(
15655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::ListValue* args) {
15665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::RecordAction(UserMetricsAction("Options_ManageSSLCertificates"));
15675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AdvancedOptionsUtilities::ShowManageSSLCertificates(
15685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_ui()->GetWebContents());
15695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
15705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
15715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
157223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#if defined(ENABLE_SERVICE_DISCOVERY)
157368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
15745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::ShowCloudPrintDevicesPage(
15755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::ListValue* args) {
157668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  content::RecordAction(UserMetricsAction("Options_CloudPrintDevicesPage"));
157768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Navigate in current tab to devices page.
157868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  OpenURLParams params(
157968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      GURL(chrome::kChromeUIDevicesURL), Referrer(),
158068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      CURRENT_TAB, content::PAGE_TRANSITION_LINK, false);
158168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  web_ui()->GetWebContents()->OpenURL(params);
158268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
158368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
158468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#endif
158568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
15865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::HandleRequestHotwordAvailable(
15875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::ListValue* args) {
15885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Profile* profile = Profile::FromWebUI(web_ui());
15895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::string group = base::FieldTrialList::FindFullName("VoiceTrigger");
15906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  base::FundamentalValue enabled(
15916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      profile->GetPrefs()->GetBoolean(prefs::kHotwordSearchEnabled));
1592116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (group != "" && group != "Disabled" &&
1593116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      HotwordServiceFactory::IsHotwordAllowed(profile)) {
1594116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // Update the current error value.
1595116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    HotwordServiceFactory::IsServiceAvailable(profile);
1596116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    int error = HotwordServiceFactory::GetCurrentError(profile);
1597116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    if (!error) {
15986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      web_ui()->CallJavascriptFunction("BrowserOptions.showHotwordSection",
15996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                                       enabled);
1600116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    } else {
1601cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      base::string16 hotword_help_url =
1602cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          base::ASCIIToUTF16(chrome::kHotwordLearnMoreURL);
1603116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      base::StringValue error_message(l10n_util::GetStringUTF16(error));
1604116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      if (error == IDS_HOTWORD_GENERIC_ERROR_MESSAGE) {
1605116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        error_message = base::StringValue(
1606116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            l10n_util::GetStringFUTF16(error, hotword_help_url));
1607116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      }
1608cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      web_ui()->CallJavascriptFunction("BrowserOptions.showHotwordSection",
1609116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                       enabled, error_message);
1610cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    }
16116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    if (CommandLine::ForCurrentProcess()->HasSwitch(
16126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            switches::kEnableExperimentalHotwording)) {
16136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      web_ui()->CallJavascriptFunction(
16146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          "BrowserOptions.showHotwordAlwaysOnSection");
16156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
16165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
16175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
16185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
161923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void BrowserOptionsHandler::HandleLaunchEasyUnlockSetup(
162023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    const base::ListValue* args) {
16215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EasyUnlockService::Get(Profile::FromWebUI(web_ui()))->LaunchSetup();
162223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
162323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1624010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void BrowserOptionsHandler::HandleRefreshExtensionControlIndicators(
1625010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    const base::ListValue* args) {
1626010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  SetupExtensionControlledIndicators();
1627010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
1628010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
16295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
16305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::HandleOpenWallpaperManager(
16315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::ListValue* args) {
1632c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ash::Shell::GetInstance()->user_wallpaper_delegate()->OpenSetWallpaperPage();
16335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
16345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::VirtualKeyboardChangeCallback(
16365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::ListValue* args) {
16375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool enabled = false;
16385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  args->GetBoolean(0, &enabled);
16395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chromeos::accessibility::EnableVirtualKeyboard(enabled);
16415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
16425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BrowserOptionsHandler::PerformFactoryResetRestart(
16445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::ListValue* args) {
16455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  policy::BrowserPolicyConnectorChromeOS* connector =
16465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      g_browser_process->platform_part()->browser_policy_connector_chromeos();
16475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (connector->IsEnterpriseManaged())
16485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
16495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* prefs = g_browser_process->local_state();
16515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs->SetBoolean(prefs::kFactoryResetRequested, true);
16525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs->CommitPendingWrite();
16535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Perform sign out. Current chrome process will then terminate, new one will
16555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // be launched (as if it was a restart).
16565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart();
16575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
16585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::SetupAccessibilityFeatures() {
16605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* pref_service = g_browser_process->local_state();
16615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::FundamentalValue virtual_keyboard_enabled(
1662f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      pref_service->GetBoolean(prefs::kAccessibilityVirtualKeyboardEnabled));
16635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction(
16645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "BrowserOptions.setVirtualKeyboardCheckboxState",
16655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      virtual_keyboard_enabled);
16665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
16675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
16685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::SetupMetricsReportingSettingVisibility() {
16705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(GOOGLE_CHROME_BUILD)
16715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Don't show the reporting setting if we are in the guest mode.
16725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (Profile::FromWebUI(web_ui())->IsGuestSession()) {
16735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::FundamentalValue visible(false);
16745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    web_ui()->CallJavascriptFunction(
16755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "BrowserOptions.setMetricsReportingSettingVisibility", visible);
16765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
16775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
16785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
16795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void BrowserOptionsHandler::SetupNetworkPredictionControl() {
16816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs();
16826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
16836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  base::DictionaryValue dict;
16846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dict.SetInteger("value",
16856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                  pref_service->GetInteger(prefs::kNetworkPredictionOptions));
16866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dict.SetBoolean("disabled",
16876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                  !pref_service->IsUserModifiablePreference(
16886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                      prefs::kNetworkPredictionOptions));
16896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
16906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  web_ui()->CallJavascriptFunction("BrowserOptions.setNetworkPredictionValue",
16916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                                   dict);
16926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
16936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
16945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::SetupFontSizeSelector() {
169590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs();
169690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  const PrefService::Preference* default_font_size =
169790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      pref_service->FindPreference(prefs::kWebKitDefaultFontSize);
169890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  const PrefService::Preference* default_fixed_font_size =
169990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      pref_service->FindPreference(prefs::kWebKitDefaultFixedFontSize);
170090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
17015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::DictionaryValue dict;
170290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  dict.SetInteger("value",
170390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                  pref_service->GetInteger(prefs::kWebKitDefaultFontSize));
170490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
170590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // The font size control displays the value of the default font size, but
170690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // setting it alters both the default font size and the default fixed font
170790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // size. So it must be disabled when either of those prefs is not user
170890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // modifiable.
170990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  dict.SetBoolean("disabled",
171090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      !default_font_size->IsUserModifiable() ||
171190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      !default_fixed_font_size->IsUserModifiable());
171290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
171390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // This is a poor man's version of CoreOptionsHandler::CreateValueForPref,
171490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // adapted to consider two prefs. It may be better to refactor
171590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // CreateValueForPref so it can be called from here.
171690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  if (default_font_size->IsManaged() || default_fixed_font_size->IsManaged()) {
171790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      dict.SetString("controlledBy", "policy");
171890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  } else if (default_font_size->IsExtensionControlled() ||
171990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)             default_fixed_font_size->IsExtensionControlled()) {
172090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      dict.SetString("controlledBy", "extension");
172190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  }
172290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
172390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  web_ui()->CallJavascriptFunction("BrowserOptions.setFontSize", dict);
17245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
17255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::SetupPageZoomSelector() {
17275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs();
17285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  double default_zoom_level = pref_service->GetDouble(prefs::kDefaultZoomLevel);
17295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  double default_zoom_factor =
173058e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch      content::ZoomLevelToZoomFactor(default_zoom_level);
17315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Generate a vector of zoom factors from an array of known presets along with
17335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the default factor added if necessary.
17345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<double> zoom_factors =
17355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      chrome_page_zoom::PresetZoomFactors(default_zoom_factor);
17365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Iterate through the zoom factors and and build the contents of the
17385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // selector that will be sent to the javascript handler.
17395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Each item in the list has the following parameters:
17405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // 1. Title (string).
17415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // 2. Value (double).
17425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // 3. Is selected? (bool).
17435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::ListValue zoom_factors_value;
17445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (std::vector<double>::const_iterator i = zoom_factors.begin();
17455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       i != zoom_factors.end(); ++i) {
17465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    base::ListValue* option = new base::ListValue();
17475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    double factor = *i;
17485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int percent = static_cast<int>(factor * 100 + 0.5);
17492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    option->Append(new base::StringValue(
17505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        l10n_util::GetStringFUTF16Int(IDS_ZOOM_PERCENT, percent)));
17512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    option->Append(new base::FundamentalValue(factor));
17525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool selected = content::ZoomValuesEqual(factor, default_zoom_factor);
17532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    option->Append(new base::FundamentalValue(selected));
17545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    zoom_factors_value.Append(option);
17555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
17565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction(
17585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "BrowserOptions.setupPageZoomSelector", zoom_factors_value);
17595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
17605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::SetupAutoOpenFileTypes() {
17625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set the hidden state for the AutoOpenFileTypesResetToDefault button.
17635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We show the button if the user has any auto-open file types registered.
17645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DownloadManager* manager = BrowserContext::GetDownloadManager(
17655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_ui()->GetWebContents()->GetBrowserContext());
17665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool display = manager &&
17675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      DownloadPrefs::FromDownloadManager(manager)->IsAutoOpenUsed();
17685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::FundamentalValue value(display);
17695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction(
17705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "BrowserOptions.setAutoOpenFileTypesDisplayed", value);
17715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
17725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserOptionsHandler::SetupProxySettingsSection() {
17745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_CHROMEOS)
17754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Disable the button if proxy settings are managed by a sysadmin, overridden
17764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // by an extension, or the browser is running in Windows Ash (on Windows the
17774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // proxy settings dialog will open on the Windows desktop and be invisible
17784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // to a user in Ash).
17794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  bool is_win_ash = false;
17804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_WIN)
1781f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  chrome::HostDesktopType desktop_type = helper::GetDesktopType(web_ui());
1782f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  is_win_ash = (desktop_type == chrome::HOST_DESKTOP_TYPE_ASH);
17834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif
17845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs();
17855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const PrefService::Preference* proxy_config =
17865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      pref_service->FindPreference(prefs::kProxy);
17875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_extension_controlled = (proxy_config &&
17885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  proxy_config->IsExtensionControlled());
17895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::FundamentalValue disabled(is_win_ash || (proxy_config &&
17914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                  !proxy_config->IsUserModifiable()));
17922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FundamentalValue extension_controlled(is_extension_controlled);
179346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  web_ui()->CallJavascriptFunction("BrowserOptions.setupProxySettingsButton",
17942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   disabled, extension_controlled);
17955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
179646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if defined(OS_WIN)
179746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SetupExtensionControlledIndicators();
179846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif  // defined(OS_WIN)
179946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
18005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // !defined(OS_CHROMEOS)
18015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
18025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1803f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void BrowserOptionsHandler::SetupManageCertificatesSection() {
1804f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(OS_WIN)
1805f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Disable the button if the settings page is displayed in Windows Ash,
1806f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // otherwise the proxy settings dialog will open on the Windows desktop and
1807f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // be invisible to a user in Ash.
1808f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (helper::GetDesktopType(web_ui()) == chrome::HOST_DESKTOP_TYPE_ASH) {
1809f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    base::FundamentalValue enabled(false);
1810f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    web_ui()->CallJavascriptFunction("BrowserOptions.enableCertificateButton",
1811f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                     enabled);
1812f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
1813f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif  // defined(OS_WIN)
1814f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
1815f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
18160f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)void BrowserOptionsHandler::SetupManagingSupervisedUsers() {
18170f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  bool has_users = !Profile::FromWebUI(web_ui())->
1818f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      GetPrefs()->GetDictionary(prefs::kSupervisedUsers)->empty();
18190f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  base::FundamentalValue has_users_value(has_users);
18200f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  web_ui()->CallJavascriptFunction(
18210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      "BrowserOptions.updateManagesSupervisedUsers",
18220f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      has_users_value);
18230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}
18240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
182523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void BrowserOptionsHandler::SetupEasyUnlock() {
18266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // TODO(xiyuan): Update when pairing data is really availble.
18276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  const base::ListValue* devices =
18286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      EasyUnlockService::Get(Profile::FromWebUI(web_ui()))->GetRemoteDevices();
18296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  bool has_pairing = devices && !devices->empty();
183023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  base::FundamentalValue has_pairing_value(has_pairing);
183123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  web_ui()->CallJavascriptFunction(
183223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      "BrowserOptions.updateEasyUnlock",
183323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      has_pairing_value);
183423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
183523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1836010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void BrowserOptionsHandler::SetupExtensionControlledIndicators() {
1837c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_WIN)
1838010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  base::DictionaryValue extension_controlled;
1839010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
1840010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Check if an extension is overriding the Search Engine.
184146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  const extensions::Extension* extension =
184246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      extensions::GetExtensionOverridingSearchEngine(
1843f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)          Profile::FromWebUI(web_ui()));
1844010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  AppendExtensionData("searchEngine", extension, &extension_controlled);
1845c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
1846010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Check if an extension is overriding the Home page.
184746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  extension = extensions::GetExtensionOverridingHomepage(
1848f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      Profile::FromWebUI(web_ui()));
1849010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  AppendExtensionData("homePage", extension, &extension_controlled);
1850c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
1851010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Check if an extension is overriding the Startup pages.
185246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  extension = extensions::GetExtensionOverridingStartupPages(
1853f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      Profile::FromWebUI(web_ui()));
1854010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  AppendExtensionData("startUpPage", extension, &extension_controlled);
1855010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
1856010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Check if an extension is overriding the NTP page.
1857010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  GURL ntp_url(chrome::kChromeUINewTabURL);
1858010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  bool ignored_param;
1859010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  extension = NULL;
1860010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  content::BrowserURLHandler::GetInstance()->RewriteURLIfNecessary(
1861010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      &ntp_url,
1862010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      web_ui()->GetWebContents()->GetBrowserContext(),
1863010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      &ignored_param);
1864010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  if (ntp_url.SchemeIs("chrome-extension")) {
1865010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    using extensions::ExtensionRegistry;
1866010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    ExtensionRegistry* registry = ExtensionRegistry::Get(
1867010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        Profile::FromWebUI(web_ui()));
1868010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    extension = registry->GetExtensionById(ntp_url.host(),
1869010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                           ExtensionRegistry::ENABLED);
1870010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
1871010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  AppendExtensionData("newTabPage", extension, &extension_controlled);
1872010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
187346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Check if an extension is overwriting the proxy setting.
187446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  extension = extensions::GetExtensionOverridingProxy(
187546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      Profile::FromWebUI(web_ui()));
187646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  AppendExtensionData("proxy", extension, &extension_controlled);
187746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
1878010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  web_ui()->CallJavascriptFunction("BrowserOptions.toggleExtensionIndicators",
1879010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                   extension_controlled);
1880c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif  // defined(OS_WIN)
1881010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
1882c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
18835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace options
1884