blob: f954807629df35883c88fcefd550948e42e9bc13 [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)58218062012-11-14 11:43:16 +000013#include "chrome/browser/background/background_mode_manager.h"
14#include "chrome/browser/bookmarks/bookmark_prompt_prefs.h"
15#include "chrome/browser/bookmarks/bookmark_utils.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000016#include "chrome/browser/browser_process_impl.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000017#include "chrome/browser/browser_shutdown.h"
18#include "chrome/browser/chrome_content_browser_client.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000019#include "chrome/browser/component_updater/recovery_component_installer.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000020#include "chrome/browser/content_settings/host_content_settings_map.h"
21#include "chrome/browser/custom_handlers/protocol_handler_registry.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000022#include "chrome/browser/devtools/devtools_window.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000023#include "chrome/browser/download/download_prefs.h"
24#include "chrome/browser/extensions/api/commands/command_service.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000025#include "chrome/browser/extensions/api/tabs/tabs_api.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000026#include "chrome/browser/extensions/extension_prefs.h"
27#include "chrome/browser/extensions/extension_web_ui.h"
28#include "chrome/browser/external_protocol/external_protocol_handler.h"
29#include "chrome/browser/first_run/first_run.h"
30#include "chrome/browser/geolocation/geolocation_prefs.h"
31#include "chrome/browser/google/google_url_tracker.h"
32#include "chrome/browser/google/google_url_tracker_factory.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000033#include "chrome/browser/gpu/gl_string_manager.h"
34#include "chrome/browser/gpu/gpu_mode_manager.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000035#include "chrome/browser/intranet_redirect_detector.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000036#include "chrome/browser/io_thread.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000037#include "chrome/browser/media/media_capture_devices_dispatcher.h"
38#include "chrome/browser/media/media_stream_devices_controller.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000039#include "chrome/browser/metrics/metrics_log.h"
40#include "chrome/browser/metrics/metrics_service.h"
41#include "chrome/browser/metrics/variations/variations_service.h"
42#include "chrome/browser/net/http_server_properties_manager.h"
43#include "chrome/browser/net/net_pref_observer.h"
44#include "chrome/browser/net/predictor.h"
Ben Murdochca12bfa2013-07-23 11:17:05 +010045#include "chrome/browser/net/pref_proxy_config_tracker_impl.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000046#include "chrome/browser/net/ssl_config_service_manager.h"
47#include "chrome/browser/notifications/desktop_notification_service.h"
48#include "chrome/browser/notifications/notification_prefs_manager.h"
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010049#include "chrome/browser/password_manager/password_generation_manager.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000050#include "chrome/browser/password_manager/password_manager.h"
51#include "chrome/browser/pepper_flash_settings_manager.h"
52#include "chrome/browser/plugins/plugin_finder.h"
53#include "chrome/browser/prefs/incognito_mode_prefs.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000054#include "chrome/browser/prefs/pref_service_syncable.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000055#include "chrome/browser/prefs/session_startup_pref.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000056#include "chrome/browser/printing/cloud_print/cloud_print_url.h"
57#include "chrome/browser/printing/print_dialog_cloud.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000058#include "chrome/browser/profiles/chrome_version_service.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000059#include "chrome/browser/profiles/profile.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000060#include "chrome/browser/profiles/profile_impl.h"
61#include "chrome/browser/profiles/profile_info_cache.h"
Ben Murdoch9ab55632013-07-18 11:57:30 +010062#include "chrome/browser/profiles/profiles_state.h"
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010063#include "chrome/browser/renderer_host/pepper/device_id_fetcher.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000064#include "chrome/browser/renderer_host/web_cache_manager.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000065#include "chrome/browser/search/search.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000066#include "chrome/browser/search_engines/template_url_prepopulate_data.h"
67#include "chrome/browser/signin/signin_manager_factory.h"
Torne (Richard Coles)a36e5922013-08-05 13:57:33 +010068#include "chrome/browser/signin/signin_promo.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000069#include "chrome/browser/sync/sync_prefs.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000070#include "chrome/browser/task_manager/task_manager.h"
71#include "chrome/browser/translate/translate_prefs.h"
72#include "chrome/browser/ui/alternate_error_tab_observer.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000073#include "chrome/browser/ui/app_list/app_list_service.h"
Ben Murdoch7dbb3d52013-07-17 14:55:54 +010074#include "chrome/browser/ui/autofill/autofill_credit_card_bubble_controller.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000075#include "chrome/browser/ui/autofill/autofill_dialog_controller_impl.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000076#include "chrome/browser/ui/browser_ui_prefs.h"
77#include "chrome/browser/ui/network_profile_bubble.h"
78#include "chrome/browser/ui/prefs/prefs_tab_helper.h"
79#include "chrome/browser/ui/search_engines/keyword_editor_controller.h"
80#include "chrome/browser/ui/startup/autolaunch_prompt.h"
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010081#include "chrome/browser/ui/startup/default_browser_prompt.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000082#include "chrome/browser/ui/tabs/pinned_tab_codec.h"
83#include "chrome/browser/ui/webui/extensions/extension_settings_handler.h"
84#include "chrome/browser/ui/webui/flags_ui.h"
85#include "chrome/browser/ui/webui/instant_ui.h"
86#include "chrome/browser/ui/webui/ntp/new_tab_ui.h"
87#include "chrome/browser/ui/webui/plugins_ui.h"
88#include "chrome/browser/ui/webui/print_preview/sticky_settings.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000089#include "chrome/browser/ui/window_snapshot/window_snapshot.h"
90#include "chrome/browser/upgrade_detector.h"
91#include "chrome/browser/web_resource/promo_resource_service.h"
Torne (Richard Coles)a36e5922013-08-05 13:57:33 +010092#include "chrome/common/metrics/caching_permuted_entropy_provider.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000093#include "chrome/common/pref_names.h"
Ben Murdocheb525c52013-07-10 11:40:50 +010094#include "components/autofill/core/browser/autofill_manager.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000095#include "components/user_prefs/pref_registry_syncable.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000096#include "content/public/browser/render_process_host.h"
97
98#if defined(ENABLE_CONFIGURATION_POLICY)
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000099#include "chrome/browser/policy/browser_policy_connector.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000100#include "chrome/browser/policy/policy_statistics_collector.h"
101#include "chrome/browser/policy/url_blacklist_manager.h"
102#endif
103
Torne (Richard Coles)90dce4d2013-05-29 14:40:03 +0100104#if defined(ENABLE_MANAGED_USERS)
Torne (Richard Coles)90dce4d2013-05-29 14:40:03 +0100105#include "chrome/browser/managed_mode/managed_user_service.h"
Torne (Richard Coles)a36e5922013-08-05 13:57:33 +0100106#include "chrome/browser/managed_mode/managed_user_sync_service.h"
Torne (Richard Coles)90dce4d2013-05-29 14:40:03 +0100107#endif
108
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000109#if defined(OS_MACOSX)
110#include "chrome/browser/ui/cocoa/confirm_quit.h"
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100111#include "chrome/browser/ui/cocoa/extensions/browser_actions_controller_prefs.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000112#endif
113
114#if defined(TOOLKIT_VIEWS)
115#include "chrome/browser/ui/browser_view_prefs.h"
116#include "chrome/browser/ui/tabs/tab_strip_layout_type_prefs.h"
117#endif
118
119#if defined(TOOLKIT_GTK)
120#include "chrome/browser/ui/gtk/browser_window_gtk.h"
121#endif
122
123#if defined(OS_CHROMEOS)
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000124#include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h"
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100125#include "chrome/browser/chromeos/audio/audio_devices_pref_handler_impl.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000126#include "chrome/browser/chromeos/customization_document.h"
127#include "chrome/browser/chromeos/display/display_preferences.h"
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100128#include "chrome/browser/chromeos/login/default_pinned_apps_field_trial.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000129#include "chrome/browser/chromeos/login/login_utils.h"
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100130#include "chrome/browser/chromeos/login/startup_utils.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000131#include "chrome/browser/chromeos/login/user_image_manager.h"
132#include "chrome/browser/chromeos/login/user_manager.h"
133#include "chrome/browser/chromeos/login/wallpaper_manager.h"
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100134#include "chrome/browser/chromeos/net/proxy_config_handler.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000135#include "chrome/browser/chromeos/policy/auto_enrollment_client.h"
Torne (Richard Coles)868fa2f2013-06-11 10:57:03 +0100136#include "chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000137#include "chrome/browser/chromeos/policy/device_status_collector.h"
Ben Murdoch9ab55632013-07-18 11:57:30 +0100138#include "chrome/browser/chromeos/power/power_prefs.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000139#include "chrome/browser/chromeos/preferences.h"
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100140#include "chrome/browser/chromeos/settings/device_oauth2_token_service.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000141#include "chrome/browser/chromeos/settings/device_settings_cache.h"
142#include "chrome/browser/chromeos/status/data_promo_notification.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000143#include "chrome/browser/chromeos/system/automatic_reboot_manager.h"
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100144#include "chrome/browser/extensions/api/enterprise_platform_keys_private/enterprise_platform_keys_private_api.h"
Ben Murdocha3f7b4e2013-07-24 10:36:34 +0100145#include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000146#else
147#include "chrome/browser/extensions/default_apps.h"
148#endif
149
150#if defined(USE_ASH)
151#include "chrome/browser/ui/ash/chrome_launcher_prefs.h"
152#endif
153
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000154#if defined(OS_ANDROID)
155#include "chrome/browser/ui/webui/ntp/android/promo_handler.h"
156#endif
157
158#if defined(ENABLE_PLUGIN_INSTALLATION)
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000159#include "chrome/browser/plugins/plugins_resource_service.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000160#endif
161
162namespace {
163
164enum MigratedPreferences {
165 NO_PREFS = 0,
166 DNS_PREFS = 1 << 0,
167 WINDOWS_PREFS = 1 << 1,
168 GOOGLE_URL_TRACKER_PREFS = 1 << 2,
169};
170
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000171// A previous feature (see
172// chrome/browser/protector/protected_prefs_watcher.cc in source
173// control history) used this string as a prefix for various prefs it
174// registered. We keep it here for now to clear out those old prefs in
175// MigrateUserPrefs.
176const char kBackupPref[] = "backup";
177
Ben Murdoch9ab55632013-07-18 11:57:30 +0100178// Chrome To Mobile has been removed; this pref will be cleared from user data.
179const char kChromeToMobilePref[] = "chrome_to_mobile.device_list";
180
Ben Murdochbb1529c2013-08-08 10:24:53 +0100181#if !defined(OS_ANDROID)
182// The sync promo error message preference has been removed; this pref will
183// be cleared from user data.
184const char kSyncPromoErrorMessage[] = "sync_promo.error_message";
185#endif
186
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000187} // namespace
188
189namespace chrome {
190
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000191void RegisterLocalState(PrefRegistrySimple* registry) {
192 // Prefs in Local State.
193 registry->RegisterIntegerPref(prefs::kMultipleProfilePrefMigration, 0);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000194
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000195 // Please keep this list alphabetized.
196 AppListService::RegisterPrefs(registry);
197 apps::RegisterPrefs(registry);
198 browser_shutdown::RegisterPrefs(registry);
199 BrowserProcessImpl::RegisterPrefs(registry);
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100200 RegisterScreenshotPrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000201 ExternalProtocolHandler::RegisterPrefs(registry);
202 FlagsUI::RegisterPrefs(registry);
203 geolocation::RegisterPrefs(registry);
204 GLStringManager::RegisterPrefs(registry);
205 GpuModeManager::RegisterPrefs(registry);
206 IntranetRedirectDetector::RegisterPrefs(registry);
207 IOThread::RegisterPrefs(registry);
208 KeywordEditorController::RegisterPrefs(registry);
209 MetricsLog::RegisterPrefs(registry);
210 MetricsService::RegisterPrefs(registry);
Torne (Richard Coles)b2df76e2013-05-13 16:52:09 +0100211 metrics::CachingPermutedEntropyProvider::RegisterPrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000212 PrefProxyConfigTrackerImpl::RegisterPrefs(registry);
213 ProfileInfoCache::RegisterPrefs(registry);
Ben Murdoch9ab55632013-07-18 11:57:30 +0100214 profiles::RegisterPrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000215 PromoResourceService::RegisterPrefs(registry);
216 RegisterPrefsForRecoveryComponent(registry);
217 SigninManagerFactory::RegisterPrefs(registry);
218 SSLConfigServiceManager::RegisterPrefs(registry);
219 UpgradeDetector::RegisterPrefs(registry);
220 WebCacheManager::RegisterPrefs(registry);
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100221 chrome_variations::VariationsService::RegisterPrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000222
223#if defined(ENABLE_PLUGINS)
224 PluginFinder::RegisterPrefs(registry);
225#endif
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000226
227#if defined(ENABLE_PLUGIN_INSTALLATION)
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000228 PluginsResourceService::RegisterPrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000229#endif
230
231#if defined(ENABLE_CONFIGURATION_POLICY)
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000232 policy::BrowserPolicyConnector::RegisterPrefs(registry);
233 policy::PolicyStatisticsCollector::RegisterPrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000234#endif
235
236#if defined(ENABLE_NOTIFICATIONS)
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000237 NotificationPrefsManager::RegisterPrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000238#endif
239
240#if defined(ENABLE_TASK_MANAGER)
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000241 TaskManager::RegisterPrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000242#endif // defined(ENABLE_TASK_MANAGER)
243
244#if defined(TOOLKIT_VIEWS)
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000245 RegisterBrowserViewPrefs(registry);
246 RegisterTabStripLayoutTypePrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000247#endif
248
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000249#if !defined(OS_ANDROID)
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000250 BackgroundModeManager::RegisterPrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000251 RegisterBrowserPrefs(registry);
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100252 RegisterDefaultBrowserPromptPrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000253#endif
254
255#if defined(OS_CHROMEOS)
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100256 chromeos::AudioDevicesPrefHandlerImpl::RegisterPrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000257 chromeos::DataPromoNotification::RegisterPrefs(registry);
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100258 chromeos::DeviceOAuth2TokenService::RegisterPrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000259 chromeos::device_settings_cache::RegisterPrefs(registry);
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100260 chromeos::default_pinned_apps_field_trial::RegisterPrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000261 chromeos::language_prefs::RegisterPrefs(registry);
262 chromeos::KioskAppManager::RegisterPrefs(registry);
263 chromeos::LoginUtils::RegisterPrefs(registry);
264 chromeos::Preferences::RegisterPrefs(registry);
Ben Murdochca12bfa2013-07-23 11:17:05 +0100265 chromeos::proxy_config::RegisterPrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000266 chromeos::RegisterDisplayLocalStatePrefs(registry);
267 chromeos::ServicesCustomizationDocument::RegisterPrefs(registry);
Ben Murdocha3f7b4e2013-07-24 10:36:34 +0100268 chromeos::SigninScreenHandler::RegisterPrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000269 chromeos::system::AutomaticRebootManager::RegisterPrefs(registry);
270 chromeos::UserImageManager::RegisterPrefs(registry);
271 chromeos::UserManager::RegisterPrefs(registry);
272 chromeos::WallpaperManager::RegisterPrefs(registry);
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100273 chromeos::StartupUtils::RegisterPrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000274 policy::AutoEnrollmentClient::RegisterPrefs(registry);
Torne (Richard Coles)868fa2f2013-06-11 10:57:03 +0100275 policy::DeviceCloudPolicyManagerChromeOS::RegisterPrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000276 policy::DeviceStatusCollector::RegisterPrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000277#endif
278
279#if defined(OS_MACOSX)
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000280 confirm_quit::RegisterLocalState(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000281#endif
282}
283
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100284// Register prefs applicable to all profiles.
285void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
Torne (Richard Coles)868fa2f2013-06-11 10:57:03 +0100286 TRACE_EVENT0("browser", "chrome::RegisterUserPrefs");
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000287 // User prefs. Please keep this list alphabetized.
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100288 AlternateErrorPageTabObserver::RegisterProfilePrefs(registry);
289 apps::RegisterProfilePrefs(registry);
290 autofill::AutofillCreditCardBubbleController::RegisterUserPrefs(registry);
291 autofill::AutofillDialogControllerImpl::RegisterProfilePrefs(registry);
292 autofill::AutofillManager::RegisterProfilePrefs(registry);
293 BookmarkPromptPrefs::RegisterProfilePrefs(registry);
294 bookmark_utils::RegisterProfilePrefs(registry);
295 browser_sync::SyncPrefs::RegisterProfilePrefs(registry);
296 ChromeContentBrowserClient::RegisterProfilePrefs(registry);
297 ChromeVersionService::RegisterProfilePrefs(registry);
298 chrome_browser_net::HttpServerPropertiesManager::RegisterProfilePrefs(
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000299 registry);
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100300 chrome_browser_net::Predictor::RegisterProfilePrefs(registry);
301 DownloadPrefs::RegisterProfilePrefs(registry);
302 extensions::ExtensionPrefs::RegisterProfilePrefs(registry);
303 ExtensionWebUI::RegisterProfilePrefs(registry);
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100304 HostContentSettingsMap::RegisterProfilePrefs(registry);
305 IncognitoModePrefs::RegisterProfilePrefs(registry);
306 InstantUI::RegisterProfilePrefs(registry);
307 MediaCaptureDevicesDispatcher::RegisterProfilePrefs(registry);
308 MediaStreamDevicesController::RegisterProfilePrefs(registry);
309 NetPrefObserver::RegisterProfilePrefs(registry);
310 NewTabUI::RegisterProfilePrefs(registry);
311 PasswordGenerationManager::RegisterProfilePrefs(registry);
312 PasswordManager::RegisterProfilePrefs(registry);
313 PrefProxyConfigTrackerImpl::RegisterProfilePrefs(registry);
314 PrefsTabHelper::RegisterProfilePrefs(registry);
315 Profile::RegisterProfilePrefs(registry);
316 ProfileImpl::RegisterProfilePrefs(registry);
317 PromoResourceService::RegisterProfilePrefs(registry);
318 ProtocolHandlerRegistry::RegisterProfilePrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000319 RegisterBrowserUserPrefs(registry);
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100320 SessionStartupPref::RegisterProfilePrefs(registry);
321 TemplateURLPrepopulateData::RegisterProfilePrefs(registry);
322 TranslatePrefs::RegisterProfilePrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000323
324#if defined(ENABLE_CONFIGURATION_POLICY)
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100325 policy::URLBlacklistManager::RegisterProfilePrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000326#endif
327
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000328#if defined(ENABLE_MANAGED_USERS)
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100329 ManagedUserService::RegisterProfilePrefs(registry);
Torne (Richard Coles)a36e5922013-08-05 13:57:33 +0100330 ManagedUserSyncService::RegisterProfilePrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000331#endif
332
333#if defined(ENABLE_NOTIFICATIONS)
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100334 DesktopNotificationService::RegisterProfilePrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000335#endif
336
337#if defined(TOOLKIT_VIEWS)
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000338 RegisterInvertBubbleUserPrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000339#elif defined(TOOLKIT_GTK)
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100340 BrowserWindowGtk::RegisterProfilePrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000341#endif
342
343#if defined(OS_ANDROID)
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100344 PromoHandler::RegisterProfilePrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000345#endif
346
347#if defined(USE_ASH)
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000348 ash::RegisterChromeLauncherUserPrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000349#endif
350
351#if !defined(OS_ANDROID)
Ben Murdoch32409262013-08-07 11:04:47 +0100352 CloudPrintURL::RegisterProfilePrefs(registry);
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100353 DeviceIDFetcher::RegisterProfilePrefs(registry);
354 DevToolsWindow::RegisterProfilePrefs(registry);
355 extensions::CommandService::RegisterProfilePrefs(registry);
Torne (Richard Coles)a36e5922013-08-05 13:57:33 +0100356 extensions::ExtensionSettingsHandler::RegisterProfilePrefs(registry);
Ben Murdoch32409262013-08-07 11:04:47 +0100357 extensions::TabsCaptureVisibleTabFunction::RegisterProfilePrefs(registry);
358 first_run::RegisterProfilePrefs(registry);
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100359 PepperFlashSettingsManager::RegisterProfilePrefs(registry);
360 PinnedTabCodec::RegisterProfilePrefs(registry);
361 PluginsUI::RegisterProfilePrefs(registry);
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100362 print_dialog_cloud::RegisterProfilePrefs(registry);
363 printing::StickySettings::RegisterProfilePrefs(registry);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000364 RegisterAutolaunchUserPrefs(registry);
Torne (Richard Coles)a36e5922013-08-05 13:57:33 +0100365 signin::RegisterProfilePrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000366#endif
367
368#if !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100369 default_apps::RegisterProfilePrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000370#endif
371
372#if defined(OS_CHROMEOS)
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100373 chromeos::Preferences::RegisterProfilePrefs(registry);
374 chromeos::proxy_config::RegisterProfilePrefs(registry);
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100375 extensions::EnterprisePlatformKeysPrivateChallengeUserKeyFunction::
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100376 RegisterProfilePrefs(registry);
377 FlagsUI::RegisterProfilePrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000378#endif
379
380#if defined(OS_WIN)
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100381 NetworkProfileBubble::RegisterProfilePrefs(registry);
382#endif
383
384#if defined(OS_MACOSX)
385 RegisterBrowserActionsControllerProfilePrefs(registry);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000386#endif
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000387
388 // Prefs registered only for migration (clearing or moving to a new
389 // key) go here.
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100390 registry->RegisterDictionaryPref(
391 kBackupPref,
392 new DictionaryValue(),
393 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
Ben Murdoch9ab55632013-07-18 11:57:30 +0100394 registry->RegisterListPref(
395 kChromeToMobilePref,
396 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
Ben Murdochbb1529c2013-08-08 10:24:53 +0100397#if !defined(OS_ANDROID)
398 registry->RegisterStringPref(
399 kSyncPromoErrorMessage,
400 std::string(),
401 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
402#endif
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000403}
404
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100405void RegisterUserProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
406 RegisterProfilePrefs(registry);
Ben Murdoch9ab55632013-07-18 11:57:30 +0100407
408#if defined(OS_CHROMEOS)
409 chromeos::PowerPrefs::RegisterUserProfilePrefs(registry);
410#endif
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100411}
412
413#if defined(OS_CHROMEOS)
414void RegisterLoginProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
415 RegisterProfilePrefs(registry);
Ben Murdoch9ab55632013-07-18 11:57:30 +0100416
417 chromeos::PowerPrefs::RegisterLoginProfilePrefs(registry);
Ben Murdoch7dbb3d52013-07-17 14:55:54 +0100418}
419#endif
420
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000421void MigrateUserPrefs(Profile* profile) {
422 PrefService* prefs = profile->GetPrefs();
423
424 // Cleanup prefs from now-removed protector feature.
425 prefs->ClearPref(kBackupPref);
426
Ben Murdoch9ab55632013-07-18 11:57:30 +0100427 // Cleanup prefs from now-removed Chrome To Mobile feature.
428 prefs->ClearPref(kChromeToMobilePref);
429
Ben Murdochbb1529c2013-08-08 10:24:53 +0100430#if !defined(OS_ANDROID)
431 // Cleanup now-removed sync promo error message preference.
432 // TODO(fdoray): Remove this when it's safe to do so (crbug.com/268442).
433 prefs->ClearPref(kSyncPromoErrorMessage);
434#endif
435
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000436 PrefsTabHelper::MigrateUserPrefs(prefs);
437 PromoResourceService::MigrateUserPrefs(prefs);
438 TranslatePrefs::MigrateUserPrefs(prefs);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000439}
440
441void MigrateBrowserPrefs(Profile* profile, PrefService* local_state) {
442 // Copy pref values which have been migrated to user_prefs from local_state,
443 // or remove them from local_state outright, if copying is not required.
444 int current_version =
445 local_state->GetInteger(prefs::kMultipleProfilePrefMigration);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000446 PrefRegistrySimple* registry = static_cast<PrefRegistrySimple*>(
447 local_state->DeprecatedGetPrefRegistry());
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000448
449 if (!(current_version & DNS_PREFS)) {
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000450 registry->RegisterListPref(prefs::kDnsStartupPrefetchList);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000451 local_state->ClearPref(prefs::kDnsStartupPrefetchList);
452
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000453 registry->RegisterListPref(prefs::kDnsHostReferralList);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000454 local_state->ClearPref(prefs::kDnsHostReferralList);
455
456 current_version |= DNS_PREFS;
457 local_state->SetInteger(prefs::kMultipleProfilePrefMigration,
458 current_version);
459 }
460
461 PrefService* user_prefs = profile->GetPrefs();
462 if (!(current_version & WINDOWS_PREFS)) {
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000463 registry->RegisterIntegerPref(prefs::kDevToolsHSplitLocation, -1);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000464 if (local_state->HasPrefPath(prefs::kDevToolsHSplitLocation)) {
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000465 user_prefs->SetInteger(
466 prefs::kDevToolsHSplitLocation,
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000467 local_state->GetInteger(prefs::kDevToolsHSplitLocation));
468 }
469 local_state->ClearPref(prefs::kDevToolsHSplitLocation);
470
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000471 registry->RegisterDictionaryPref(prefs::kBrowserWindowPlacement);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000472 if (local_state->HasPrefPath(prefs::kBrowserWindowPlacement)) {
473 const PrefService::Preference* pref =
474 local_state->FindPreference(prefs::kBrowserWindowPlacement);
475 DCHECK(pref);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000476 user_prefs->Set(prefs::kBrowserWindowPlacement,
477 *(pref->GetValue()));
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000478 }
479 local_state->ClearPref(prefs::kBrowserWindowPlacement);
480
481 current_version |= WINDOWS_PREFS;
482 local_state->SetInteger(prefs::kMultipleProfilePrefMigration,
483 current_version);
484 }
485
486 if (!(current_version & GOOGLE_URL_TRACKER_PREFS)) {
Torne (Richard Coles)90dce4d2013-05-29 14:40:03 +0100487 GoogleURLTrackerFactory::GetInstance()->RegisterUserPrefsOnBrowserContext(
488 profile);
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000489 registry->RegisterStringPref(prefs::kLastKnownGoogleURL,
490 GoogleURLTracker::kDefaultGoogleHomepage);
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000491 if (local_state->HasPrefPath(prefs::kLastKnownGoogleURL)) {
492 user_prefs->SetString(prefs::kLastKnownGoogleURL,
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000493 local_state->GetString(prefs::kLastKnownGoogleURL));
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000494 }
495 local_state->ClearPref(prefs::kLastKnownGoogleURL);
496
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000497 registry->RegisterStringPref(prefs::kLastPromptedGoogleURL,
498 std::string());
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000499 if (local_state->HasPrefPath(prefs::kLastPromptedGoogleURL)) {
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +0000500 user_prefs->SetString(
501 prefs::kLastPromptedGoogleURL,
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000502 local_state->GetString(prefs::kLastPromptedGoogleURL));
503 }
504 local_state->ClearPref(prefs::kLastPromptedGoogleURL);
505
506 current_version |= GOOGLE_URL_TRACKER_PREFS;
507 local_state->SetInteger(prefs::kMultipleProfilePrefMigration,
508 current_version);
509 }
510}
511
512} // namespace chrome