blob: 69b2c86849a157d592113fed8b0d2582c525abf5 [file] [log] [blame]
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +00001// Copyright 2012 The Chromium Authors. All rights reserved.
Torne (Richard Coles)58218062012-11-14 11:43:16 +00002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/prefs/browser_prefs.h"
6
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +00007#include "apps/prefs.h"
Torne (Richard Coles)868fa2f2013-06-11 10:57:03 +01008#include "base/debug/trace_event.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +00009#include "base/prefs/pref_registry_simple.h"
10#include "base/prefs/pref_service.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000011#include "chrome/browser/about_flags.h"
12#include "chrome/browser/accessibility/invert_bubble_prefs.h"
Torne (Richard Coles)4e180b62013-10-18 15:46:22 +010013#include "chrome/browser/apps/shortcut_manager.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000014#include "chrome/browser/background/background_mode_manager.h"
15#include "chrome/browser/bookmarks/bookmark_prompt_prefs.h"
16#include "chrome/browser/bookmarks/bookmark_utils.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000017#include "chrome/browser/browser_process_impl.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000018#include "chrome/browser/browser_shutdown.h"
19#include "chrome/browser/chrome_content_browser_client.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000020#include "chrome/browser/component_updater/recovery_component_installer.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000021#include "chrome/browser/content_settings/host_content_settings_map.h"
22#include "chrome/browser/custom_handlers/protocol_handler_registry.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000023#include "chrome/browser/devtools/devtools_window.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000024#include "chrome/browser/download/download_prefs.h"
Torne (Richard Coles)3551c9c2013-08-23 16:39:15 +010025#include "chrome/browser/extensions/activity_log/activity_log.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000026#include "chrome/browser/extensions/api/commands/command_service.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000027#include "chrome/browser/extensions/api/tabs/tabs_api.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000028#include "chrome/browser/extensions/extension_prefs.h"
29#include "chrome/browser/extensions/extension_web_ui.h"
30#include "chrome/browser/external_protocol/external_protocol_handler.h"
31#include "chrome/browser/first_run/first_run.h"
32#include "chrome/browser/geolocation/geolocation_prefs.h"
33#include "chrome/browser/google/google_url_tracker.h"
34#include "chrome/browser/google/google_url_tracker_factory.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000035#include "chrome/browser/gpu/gl_string_manager.h"
36#include "chrome/browser/gpu/gpu_mode_manager.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000037#include "chrome/browser/intranet_redirect_detector.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000038#include "chrome/browser/io_thread.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000039#include "chrome/browser/media/media_capture_devices_dispatcher.h"
40#include "chrome/browser/media/media_stream_devices_controller.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000041#include "chrome/browser/metrics/metrics_log.h"
42#include "chrome/browser/metrics/metrics_service.h"
43#include "chrome/browser/metrics/variations/variations_service.h"
44#include "chrome/browser/net/http_server_properties_manager.h"
45#include "chrome/browser/net/net_pref_observer.h"
46#include "chrome/browser/net/predictor.h"
Ben Murdochca12bfa2013-07-23 11:17:05 +010047#include "chrome/browser/net/pref_proxy_config_tracker_impl.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000048#include "chrome/browser/net/ssl_config_service_manager.h"
Torne (Richard Coles)4e180b62013-10-18 15:46:22 +010049#include "chrome/browser/network_time/network_time_service.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000050#include "chrome/browser/notifications/desktop_notification_service.h"
51#include "chrome/browser/notifications/notification_prefs_manager.h"
Torne (Richard Coles)d0247b12013-09-19 22:36:51 +010052#if !defined(OS_ANDROID)
53#include "chrome/browser/notifications/sync_notifier/chrome_notifier_service.h"
54#endif // OS_ANDROID
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010055#include "chrome/browser/password_manager/password_generation_manager.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000056#include "chrome/browser/password_manager/password_manager.h"
57#include "chrome/browser/pepper_flash_settings_manager.h"
58#include "chrome/browser/plugins/plugin_finder.h"
59#include "chrome/browser/prefs/incognito_mode_prefs.h"
Torne (Richard Coles)58537e22013-09-12 12:10:22 +010060#include "chrome/browser/prefs/pref_metrics_service.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000061#include "chrome/browser/prefs/pref_service_syncable.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000062#include "chrome/browser/prefs/session_startup_pref.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000063#include "chrome/browser/printing/cloud_print/cloud_print_url.h"
64#include "chrome/browser/printing/print_dialog_cloud.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000065#include "chrome/browser/profiles/chrome_version_service.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000066#include "chrome/browser/profiles/profile.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000067#include "chrome/browser/profiles/profile_impl.h"
68#include "chrome/browser/profiles/profile_info_cache.h"
Ben Murdoch9ab55632013-07-18 11:57:30 +010069#include "chrome/browser/profiles/profiles_state.h"
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010070#include "chrome/browser/renderer_host/pepper/device_id_fetcher.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000071#include "chrome/browser/renderer_host/web_cache_manager.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000072#include "chrome/browser/search/search.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000073#include "chrome/browser/search_engines/template_url_prepopulate_data.h"
74#include "chrome/browser/signin/signin_manager_factory.h"
Torne (Richard Coles)a36e5922013-08-05 13:57:33 +010075#include "chrome/browser/signin/signin_promo.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000076#include "chrome/browser/sync/sync_prefs.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000077#include "chrome/browser/task_manager/task_manager.h"
78#include "chrome/browser/translate/translate_prefs.h"
79#include "chrome/browser/ui/alternate_error_tab_observer.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000080#include "chrome/browser/ui/app_list/app_list_service.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000081#include "chrome/browser/ui/browser_ui_prefs.h"
82#include "chrome/browser/ui/network_profile_bubble.h"
83#include "chrome/browser/ui/prefs/prefs_tab_helper.h"
84#include "chrome/browser/ui/search_engines/keyword_editor_controller.h"
85#include "chrome/browser/ui/startup/autolaunch_prompt.h"
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010086#include "chrome/browser/ui/startup/default_browser_prompt.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000087#include "chrome/browser/ui/tabs/pinned_tab_codec.h"
88#include "chrome/browser/ui/webui/extensions/extension_settings_handler.h"
89#include "chrome/browser/ui/webui/flags_ui.h"
90#include "chrome/browser/ui/webui/instant_ui.h"
91#include "chrome/browser/ui/webui/ntp/new_tab_ui.h"
92#include "chrome/browser/ui/webui/plugins_ui.h"
93#include "chrome/browser/ui/webui/print_preview/sticky_settings.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000094#include "chrome/browser/ui/window_snapshot/window_snapshot.h"
95#include "chrome/browser/upgrade_detector.h"
96#include "chrome/browser/web_resource/promo_resource_service.h"
Torne (Richard Coles)a36e5922013-08-05 13:57:33 +010097#include "chrome/common/metrics/caching_permuted_entropy_provider.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000098#include "chrome/common/pref_names.h"
Ben Murdocheb525c52013-07-10 11:40:50 +010099#include "components/autofill/core/browser/autofill_manager.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000100#include "components/user_prefs/pref_registry_syncable.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000101#include "content/public/browser/render_process_host.h"
102
Ben Murdochba5b9a62013-08-12 14:20:17 +0100103#if defined(ENABLE_AUTOFILL_DIALOG)
104#include "chrome/browser/ui/autofill/autofill_dialog_controller.h"
105#endif
106
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000107#if defined(ENABLE_CONFIGURATION_POLICY)
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000108#include "chrome/browser/policy/browser_policy_connector.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000109#include "chrome/browser/policy/policy_statistics_collector.h"
110#include "chrome/browser/policy/url_blacklist_manager.h"
111#endif
112
Torne (Richard Coles)90dce4d2013-05-29 14:40:03 +0100113#if defined(ENABLE_MANAGED_USERS)
Torne (Richard Coles)90dce4d2013-05-29 14:40:03 +0100114#include "chrome/browser/managed_mode/managed_user_service.h"
Torne (Richard Coles)a36e5922013-08-05 13:57:33 +0100115#include "chrome/browser/managed_mode/managed_user_sync_service.h"
Torne (Richard Coles)90dce4d2013-05-29 14:40:03 +0100116#endif
117
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000118#if defined(OS_MACOSX)
119#include "chrome/browser/ui/cocoa/confirm_quit.h"
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100120#include "chrome/browser/ui/cocoa/extensions/browser_actions_controller_prefs.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000121#endif
122
Torne (Richard Coles)68043e12013-09-26 13:24:57 +0100123#if defined(ENABLE_MDNS)
124#include "chrome/browser/ui/webui/local_discovery/local_discovery_ui.h"
125#endif
126
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000127#if defined(TOOLKIT_VIEWS)
128#include "chrome/browser/ui/browser_view_prefs.h"
129#include "chrome/browser/ui/tabs/tab_strip_layout_type_prefs.h"
130#endif
131
132#if defined(TOOLKIT_GTK)
133#include "chrome/browser/ui/gtk/browser_window_gtk.h"
134#endif
135
136#if defined(OS_CHROMEOS)
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000137#include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h"
Torne (Richard Coles)58537e22013-09-12 12:10:22 +0100138#include "chrome/browser/chromeos/attestation/platform_verification_flow.h"
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100139#include "chrome/browser/chromeos/audio/audio_devices_pref_handler_impl.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000140#include "chrome/browser/chromeos/customization_document.h"
141#include "chrome/browser/chromeos/display/display_preferences.h"
Torne (Richard Coles)424c4d72013-08-30 15:14:49 +0100142#include "chrome/browser/chromeos/extensions/echo_private_api.h"
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100143#include "chrome/browser/chromeos/login/default_pinned_apps_field_trial.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000144#include "chrome/browser/chromeos/login/login_utils.h"
Torne (Richard Coles)68043e12013-09-26 13:24:57 +0100145#include "chrome/browser/chromeos/login/multi_profile_first_run_notification.h"
146#include "chrome/browser/chromeos/login/multi_profile_user_controller.h"
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100147#include "chrome/browser/chromeos/login/startup_utils.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000148#include "chrome/browser/chromeos/login/user_image_manager.h"
Torne (Richard Coles)3551c9c2013-08-23 16:39:15 +0100149#include "chrome/browser/chromeos/login/user_image_sync_observer.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000150#include "chrome/browser/chromeos/login/user_manager.h"
151#include "chrome/browser/chromeos/login/wallpaper_manager.h"
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100152#include "chrome/browser/chromeos/net/proxy_config_handler.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000153#include "chrome/browser/chromeos/policy/auto_enrollment_client.h"
Torne (Richard Coles)868fa2f2013-06-11 10:57:03 +0100154#include "chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000155#include "chrome/browser/chromeos/policy/device_status_collector.h"
Ben Murdoch9ab55632013-07-18 11:57:30 +0100156#include "chrome/browser/chromeos/power/power_prefs.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000157#include "chrome/browser/chromeos/preferences.h"
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100158#include "chrome/browser/chromeos/settings/device_oauth2_token_service.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000159#include "chrome/browser/chromeos/settings/device_settings_cache.h"
160#include "chrome/browser/chromeos/status/data_promo_notification.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000161#include "chrome/browser/chromeos/system/automatic_reboot_manager.h"
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100162#include "chrome/browser/extensions/api/enterprise_platform_keys_private/enterprise_platform_keys_private_api.h"
Ben Murdocha3f7b4e2013-07-24 10:36:34 +0100163#include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000164#else
165#include "chrome/browser/extensions/default_apps.h"
166#endif
167
168#if defined(USE_ASH)
169#include "chrome/browser/ui/ash/chrome_launcher_prefs.h"
170#endif
171
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000172#if defined(OS_ANDROID)
173#include "chrome/browser/ui/webui/ntp/android/promo_handler.h"
Ben Murdochba5b9a62013-08-12 14:20:17 +0100174#else
Torne (Richard Coles)4e180b62013-10-18 15:46:22 +0100175#include "chrome/browser/profile_resetter/automatic_profile_resetter_factory.h"
Ben Murdochba5b9a62013-08-12 14:20:17 +0100176#include "chrome/browser/ui/autofill/generated_credit_card_bubble_controller.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000177#endif
178
179#if defined(ENABLE_PLUGIN_INSTALLATION)
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000180#include "chrome/browser/plugins/plugins_resource_service.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000181#endif
182
Torne (Richard Coles)4e180b62013-10-18 15:46:22 +0100183#if defined(OS_WIN)
184#include "chrome/browser/apps/app_launch_for_metro_restart_win.h"
185#endif
186
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000187namespace {
188
189enum MigratedPreferences {
190 NO_PREFS = 0,
191 DNS_PREFS = 1 << 0,
192 WINDOWS_PREFS = 1 << 1,
193 GOOGLE_URL_TRACKER_PREFS = 1 << 2,
194};
195
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000196// A previous feature (see
197// chrome/browser/protector/protected_prefs_watcher.cc in source
198// control history) used this string as a prefix for various prefs it
199// registered. We keep it here for now to clear out those old prefs in
200// MigrateUserPrefs.
201const char kBackupPref[] = "backup";
202
Ben Murdochbb1529c2013-08-08 10:24:53 +0100203#if !defined(OS_ANDROID)
204// The sync promo error message preference has been removed; this pref will
205// be cleared from user data.
206const char kSyncPromoErrorMessage[] = "sync_promo.error_message";
207#endif
208
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000209} // namespace
210
211namespace chrome {
212
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000213void RegisterLocalState(PrefRegistrySimple* registry) {
214 // Prefs in Local State.
215 registry->RegisterIntegerPref(prefs::kMultipleProfilePrefMigration, 0);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000216
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000217 // Please keep this list alphabetized.
218 AppListService::RegisterPrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000219 browser_shutdown::RegisterPrefs(registry);
220 BrowserProcessImpl::RegisterPrefs(registry);
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100221 RegisterScreenshotPrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000222 ExternalProtocolHandler::RegisterPrefs(registry);
223 FlagsUI::RegisterPrefs(registry);
224 geolocation::RegisterPrefs(registry);
225 GLStringManager::RegisterPrefs(registry);
226 GpuModeManager::RegisterPrefs(registry);
227 IntranetRedirectDetector::RegisterPrefs(registry);
228 IOThread::RegisterPrefs(registry);
229 KeywordEditorController::RegisterPrefs(registry);
230 MetricsLog::RegisterPrefs(registry);
231 MetricsService::RegisterPrefs(registry);
Torne (Richard Coles)b2df76e2013-05-13 16:52:09 +0100232 metrics::CachingPermutedEntropyProvider::RegisterPrefs(registry);
Torne (Richard Coles)58537e22013-09-12 12:10:22 +0100233 PrefMetricsService::RegisterPrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000234 PrefProxyConfigTrackerImpl::RegisterPrefs(registry);
235 ProfileInfoCache::RegisterPrefs(registry);
Ben Murdoch9ab55632013-07-18 11:57:30 +0100236 profiles::RegisterPrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000237 PromoResourceService::RegisterPrefs(registry);
238 RegisterPrefsForRecoveryComponent(registry);
239 SigninManagerFactory::RegisterPrefs(registry);
240 SSLConfigServiceManager::RegisterPrefs(registry);
241 UpgradeDetector::RegisterPrefs(registry);
242 WebCacheManager::RegisterPrefs(registry);
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100243 chrome_variations::VariationsService::RegisterPrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000244
245#if defined(ENABLE_PLUGINS)
246 PluginFinder::RegisterPrefs(registry);
247#endif
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000248
249#if defined(ENABLE_PLUGIN_INSTALLATION)
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000250 PluginsResourceService::RegisterPrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000251#endif
252
253#if defined(ENABLE_CONFIGURATION_POLICY)
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000254 policy::BrowserPolicyConnector::RegisterPrefs(registry);
255 policy::PolicyStatisticsCollector::RegisterPrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000256#endif
257
258#if defined(ENABLE_NOTIFICATIONS)
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000259 NotificationPrefsManager::RegisterPrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000260#endif
261
262#if defined(ENABLE_TASK_MANAGER)
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000263 TaskManager::RegisterPrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000264#endif // defined(ENABLE_TASK_MANAGER)
265
266#if defined(TOOLKIT_VIEWS)
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000267 RegisterBrowserViewPrefs(registry);
268 RegisterTabStripLayoutTypePrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000269#endif
270
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000271#if !defined(OS_ANDROID)
Torne (Richard Coles)4e180b62013-10-18 15:46:22 +0100272 AutomaticProfileResetterFactory::RegisterPrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000273 BackgroundModeManager::RegisterPrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000274 RegisterBrowserPrefs(registry);
Torne (Richard Coles)d0247b12013-09-19 22:36:51 +0100275#if !defined(OS_CHROMEOS)
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100276 RegisterDefaultBrowserPromptPrefs(registry);
Torne (Richard Coles)d0247b12013-09-19 22:36:51 +0100277#endif // !defined(OS_CHROMEOS)
278#endif // !defined(OS_ANDROID)
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000279
280#if defined(OS_CHROMEOS)
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100281 chromeos::AudioDevicesPrefHandlerImpl::RegisterPrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000282 chromeos::DataPromoNotification::RegisterPrefs(registry);
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100283 chromeos::DeviceOAuth2TokenService::RegisterPrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000284 chromeos::device_settings_cache::RegisterPrefs(registry);
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100285 chromeos::default_pinned_apps_field_trial::RegisterPrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000286 chromeos::language_prefs::RegisterPrefs(registry);
287 chromeos::KioskAppManager::RegisterPrefs(registry);
288 chromeos::LoginUtils::RegisterPrefs(registry);
Torne (Richard Coles)68043e12013-09-26 13:24:57 +0100289 chromeos::MultiProfileUserController::RegisterPrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000290 chromeos::Preferences::RegisterPrefs(registry);
Ben Murdochca12bfa2013-07-23 11:17:05 +0100291 chromeos::proxy_config::RegisterPrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000292 chromeos::RegisterDisplayLocalStatePrefs(registry);
293 chromeos::ServicesCustomizationDocument::RegisterPrefs(registry);
Ben Murdocha3f7b4e2013-07-24 10:36:34 +0100294 chromeos::SigninScreenHandler::RegisterPrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000295 chromeos::system::AutomaticRebootManager::RegisterPrefs(registry);
296 chromeos::UserImageManager::RegisterPrefs(registry);
297 chromeos::UserManager::RegisterPrefs(registry);
298 chromeos::WallpaperManager::RegisterPrefs(registry);
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100299 chromeos::StartupUtils::RegisterPrefs(registry);
Torne (Richard Coles)424c4d72013-08-30 15:14:49 +0100300 chromeos::echo_offer::RegisterPrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000301 policy::AutoEnrollmentClient::RegisterPrefs(registry);
Torne (Richard Coles)868fa2f2013-06-11 10:57:03 +0100302 policy::DeviceCloudPolicyManagerChromeOS::RegisterPrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000303 policy::DeviceStatusCollector::RegisterPrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000304#endif
305
306#if defined(OS_MACOSX)
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000307 confirm_quit::RegisterLocalState(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000308#endif
Torne (Richard Coles)4e180b62013-10-18 15:46:22 +0100309
310#if defined(OS_WIN)
311 app_metro_launch::RegisterPrefs(registry);
312#endif
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000313}
314
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100315// Register prefs applicable to all profiles.
316void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
Torne (Richard Coles)868fa2f2013-06-11 10:57:03 +0100317 TRACE_EVENT0("browser", "chrome::RegisterUserPrefs");
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000318 // User prefs. Please keep this list alphabetized.
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100319 AlternateErrorPageTabObserver::RegisterProfilePrefs(registry);
320 apps::RegisterProfilePrefs(registry);
Torne (Richard Coles)4e180b62013-10-18 15:46:22 +0100321#if !defined(OS_ANDROID)
322 AppShortcutManager::RegisterProfilePrefs(registry);
323#endif
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100324 autofill::AutofillManager::RegisterProfilePrefs(registry);
Ben Murdochba5b9a62013-08-12 14:20:17 +0100325#if !defined(OS_ANDROID)
326 autofill::GeneratedCreditCardBubbleController::RegisterUserPrefs(registry);
327#endif
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100328 BookmarkPromptPrefs::RegisterProfilePrefs(registry);
329 bookmark_utils::RegisterProfilePrefs(registry);
330 browser_sync::SyncPrefs::RegisterProfilePrefs(registry);
331 ChromeContentBrowserClient::RegisterProfilePrefs(registry);
332 ChromeVersionService::RegisterProfilePrefs(registry);
333 chrome_browser_net::HttpServerPropertiesManager::RegisterProfilePrefs(
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000334 registry);
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100335 chrome_browser_net::Predictor::RegisterProfilePrefs(registry);
336 DownloadPrefs::RegisterProfilePrefs(registry);
337 extensions::ExtensionPrefs::RegisterProfilePrefs(registry);
338 ExtensionWebUI::RegisterProfilePrefs(registry);
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100339 HostContentSettingsMap::RegisterProfilePrefs(registry);
340 IncognitoModePrefs::RegisterProfilePrefs(registry);
341 InstantUI::RegisterProfilePrefs(registry);
342 MediaCaptureDevicesDispatcher::RegisterProfilePrefs(registry);
343 MediaStreamDevicesController::RegisterProfilePrefs(registry);
344 NetPrefObserver::RegisterProfilePrefs(registry);
Torne (Richard Coles)4e180b62013-10-18 15:46:22 +0100345 NetworkTimeService::RegisterProfilePrefs(registry);
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100346 NewTabUI::RegisterProfilePrefs(registry);
Torne (Richard Coles)d0247b12013-09-19 22:36:51 +0100347#if !defined(OS_ANDROID)
348 notifier::ChromeNotifierService::RegisterProfilePrefs(registry);
349#endif // OS_ANDROID
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100350 PasswordGenerationManager::RegisterProfilePrefs(registry);
351 PasswordManager::RegisterProfilePrefs(registry);
352 PrefProxyConfigTrackerImpl::RegisterProfilePrefs(registry);
353 PrefsTabHelper::RegisterProfilePrefs(registry);
354 Profile::RegisterProfilePrefs(registry);
355 ProfileImpl::RegisterProfilePrefs(registry);
356 PromoResourceService::RegisterProfilePrefs(registry);
357 ProtocolHandlerRegistry::RegisterProfilePrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000358 RegisterBrowserUserPrefs(registry);
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100359 SessionStartupPref::RegisterProfilePrefs(registry);
360 TemplateURLPrepopulateData::RegisterProfilePrefs(registry);
361 TranslatePrefs::RegisterProfilePrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000362
Ben Murdochba5b9a62013-08-12 14:20:17 +0100363#if defined(ENABLE_AUTOFILL_DIALOG)
364 autofill::AutofillDialogController::RegisterProfilePrefs(registry);
365#endif
366
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000367#if defined(ENABLE_CONFIGURATION_POLICY)
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100368 policy::URLBlacklistManager::RegisterProfilePrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000369#endif
370
Torne (Richard Coles)68043e12013-09-26 13:24:57 +0100371#if defined(ENABLE_EXTENSIONS)
372 extensions::ActivityLog::RegisterProfilePrefs(registry);
373#endif
374
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000375#if defined(ENABLE_MANAGED_USERS)
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100376 ManagedUserService::RegisterProfilePrefs(registry);
Torne (Richard Coles)a36e5922013-08-05 13:57:33 +0100377 ManagedUserSyncService::RegisterProfilePrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000378#endif
379
380#if defined(ENABLE_NOTIFICATIONS)
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100381 DesktopNotificationService::RegisterProfilePrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000382#endif
383
384#if defined(TOOLKIT_VIEWS)
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000385 RegisterInvertBubbleUserPrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000386#elif defined(TOOLKIT_GTK)
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100387 BrowserWindowGtk::RegisterProfilePrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000388#endif
389
Ben Murdochc2db58b2013-08-14 11:51:42 +0100390#if defined(ENABLE_FULL_PRINTING)
391 print_dialog_cloud::RegisterProfilePrefs(registry);
392 printing::StickySettings::RegisterProfilePrefs(registry);
393 CloudPrintURL::RegisterProfilePrefs(registry);
394#endif
395
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000396#if defined(OS_ANDROID)
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100397 PromoHandler::RegisterProfilePrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000398#endif
399
400#if defined(USE_ASH)
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000401 ash::RegisterChromeLauncherUserPrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000402#endif
403
404#if !defined(OS_ANDROID)
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100405 DeviceIDFetcher::RegisterProfilePrefs(registry);
406 DevToolsWindow::RegisterProfilePrefs(registry);
407 extensions::CommandService::RegisterProfilePrefs(registry);
Torne (Richard Coles)a36e5922013-08-05 13:57:33 +0100408 extensions::ExtensionSettingsHandler::RegisterProfilePrefs(registry);
Ben Murdoch32409262013-08-07 11:04:47 +0100409 extensions::TabsCaptureVisibleTabFunction::RegisterProfilePrefs(registry);
410 first_run::RegisterProfilePrefs(registry);
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100411 PepperFlashSettingsManager::RegisterProfilePrefs(registry);
412 PinnedTabCodec::RegisterProfilePrefs(registry);
413 PluginsUI::RegisterProfilePrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000414 RegisterAutolaunchUserPrefs(registry);
Torne (Richard Coles)a36e5922013-08-05 13:57:33 +0100415 signin::RegisterProfilePrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000416#endif
417
418#if !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100419 default_apps::RegisterProfilePrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000420#endif
421
422#if defined(OS_CHROMEOS)
Torne (Richard Coles)58537e22013-09-12 12:10:22 +0100423 chromeos::attestation::PlatformVerificationFlow::RegisterProfilePrefs(
424 registry);
Torne (Richard Coles)68043e12013-09-26 13:24:57 +0100425 chromeos::MultiProfileFirstRunNotification::RegisterProfilePrefs(registry);
426 chromeos::MultiProfileUserController::RegisterProfilePrefs(registry);
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100427 chromeos::Preferences::RegisterProfilePrefs(registry);
428 chromeos::proxy_config::RegisterProfilePrefs(registry);
Torne (Richard Coles)58537e22013-09-12 12:10:22 +0100429 chromeos::UserImageSyncObserver::RegisterProfilePrefs(registry);
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100430 extensions::EnterprisePlatformKeysPrivateChallengeUserKeyFunction::
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100431 RegisterProfilePrefs(registry);
432 FlagsUI::RegisterProfilePrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000433#endif
434
435#if defined(OS_WIN)
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100436 NetworkProfileBubble::RegisterProfilePrefs(registry);
437#endif
438
439#if defined(OS_MACOSX)
440 RegisterBrowserActionsControllerProfilePrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000441#endif
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000442
443 // Prefs registered only for migration (clearing or moving to a new
444 // key) go here.
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100445 registry->RegisterDictionaryPref(
446 kBackupPref,
447 new DictionaryValue(),
448 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
Ben Murdochbb1529c2013-08-08 10:24:53 +0100449#if !defined(OS_ANDROID)
450 registry->RegisterStringPref(
451 kSyncPromoErrorMessage,
452 std::string(),
453 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
454#endif
Torne (Richard Coles)68043e12013-09-26 13:24:57 +0100455
456#if defined(ENABLE_MDNS)
457 LocalDiscoveryUI::RegisterProfilePrefs(registry);
458#endif
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000459}
460
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100461void RegisterUserProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
462 RegisterProfilePrefs(registry);
Ben Murdoch9ab55632013-07-18 11:57:30 +0100463
464#if defined(OS_CHROMEOS)
465 chromeos::PowerPrefs::RegisterUserProfilePrefs(registry);
466#endif
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100467}
468
469#if defined(OS_CHROMEOS)
470void RegisterLoginProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
471 RegisterProfilePrefs(registry);
Ben Murdoch9ab55632013-07-18 11:57:30 +0100472
473 chromeos::PowerPrefs::RegisterLoginProfilePrefs(registry);
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100474}
475#endif
476
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000477void MigrateUserPrefs(Profile* profile) {
478 PrefService* prefs = profile->GetPrefs();
479
480 // Cleanup prefs from now-removed protector feature.
481 prefs->ClearPref(kBackupPref);
482
Ben Murdochbb1529c2013-08-08 10:24:53 +0100483#if !defined(OS_ANDROID)
484 // Cleanup now-removed sync promo error message preference.
485 // TODO(fdoray): Remove this when it's safe to do so (crbug.com/268442).
486 prefs->ClearPref(kSyncPromoErrorMessage);
487#endif
488
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000489 PromoResourceService::MigrateUserPrefs(prefs);
490 TranslatePrefs::MigrateUserPrefs(prefs);
Torne (Richard Coles)3551c9c2013-08-23 16:39:15 +0100491
492#if defined(ENABLE_MANAGED_USERS)
493 ManagedUserService::MigrateUserPrefs(prefs);
494#endif
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000495}
496
497void MigrateBrowserPrefs(Profile* profile, PrefService* local_state) {
498 // Copy pref values which have been migrated to user_prefs from local_state,
499 // or remove them from local_state outright, if copying is not required.
500 int current_version =
501 local_state->GetInteger(prefs::kMultipleProfilePrefMigration);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000502 PrefRegistrySimple* registry = static_cast<PrefRegistrySimple*>(
503 local_state->DeprecatedGetPrefRegistry());
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000504
505 if (!(current_version & DNS_PREFS)) {
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000506 registry->RegisterListPref(prefs::kDnsStartupPrefetchList);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000507 local_state->ClearPref(prefs::kDnsStartupPrefetchList);
508
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000509 registry->RegisterListPref(prefs::kDnsHostReferralList);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000510 local_state->ClearPref(prefs::kDnsHostReferralList);
511
512 current_version |= DNS_PREFS;
513 local_state->SetInteger(prefs::kMultipleProfilePrefMigration,
514 current_version);
515 }
516
517 PrefService* user_prefs = profile->GetPrefs();
518 if (!(current_version & WINDOWS_PREFS)) {
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000519 registry->RegisterIntegerPref(prefs::kDevToolsHSplitLocation, -1);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000520 if (local_state->HasPrefPath(prefs::kDevToolsHSplitLocation)) {
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000521 user_prefs->SetInteger(
522 prefs::kDevToolsHSplitLocation,
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000523 local_state->GetInteger(prefs::kDevToolsHSplitLocation));
524 }
525 local_state->ClearPref(prefs::kDevToolsHSplitLocation);
526
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000527 registry->RegisterDictionaryPref(prefs::kBrowserWindowPlacement);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000528 if (local_state->HasPrefPath(prefs::kBrowserWindowPlacement)) {
529 const PrefService::Preference* pref =
530 local_state->FindPreference(prefs::kBrowserWindowPlacement);
531 DCHECK(pref);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000532 user_prefs->Set(prefs::kBrowserWindowPlacement,
533 *(pref->GetValue()));
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000534 }
535 local_state->ClearPref(prefs::kBrowserWindowPlacement);
536
537 current_version |= WINDOWS_PREFS;
538 local_state->SetInteger(prefs::kMultipleProfilePrefMigration,
539 current_version);
540 }
541
542 if (!(current_version & GOOGLE_URL_TRACKER_PREFS)) {
Torne (Richard Coles)90dce4d2013-05-29 14:40:03 +0100543 GoogleURLTrackerFactory::GetInstance()->RegisterUserPrefsOnBrowserContext(
544 profile);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000545 registry->RegisterStringPref(prefs::kLastKnownGoogleURL,
546 GoogleURLTracker::kDefaultGoogleHomepage);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000547 if (local_state->HasPrefPath(prefs::kLastKnownGoogleURL)) {
548 user_prefs->SetString(prefs::kLastKnownGoogleURL,
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000549 local_state->GetString(prefs::kLastKnownGoogleURL));
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000550 }
551 local_state->ClearPref(prefs::kLastKnownGoogleURL);
552
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000553 registry->RegisterStringPref(prefs::kLastPromptedGoogleURL,
554 std::string());
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000555 if (local_state->HasPrefPath(prefs::kLastPromptedGoogleURL)) {
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000556 user_prefs->SetString(
557 prefs::kLastPromptedGoogleURL,
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000558 local_state->GetString(prefs::kLastPromptedGoogleURL));
559 }
560 local_state->ClearPref(prefs::kLastPromptedGoogleURL);
561
562 current_version |= GOOGLE_URL_TRACKER_PREFS;
563 local_state->SetInteger(prefs::kMultipleProfilePrefMigration,
564 current_version);
565 }
566}
567
568} // namespace chrome