OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/profiles/profile_impl.h" | 5 #include "chrome/browser/profiles/profile_impl.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/callback.h" | 8 #include "base/callback.h" |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 #include "chrome/browser/net/chrome_url_request_context.h" | 48 #include "chrome/browser/net/chrome_url_request_context.h" |
49 #include "chrome/browser/net/net_pref_observer.h" | 49 #include "chrome/browser/net/net_pref_observer.h" |
50 #include "chrome/browser/net/predictor.h" | 50 #include "chrome/browser/net/predictor.h" |
51 #include "chrome/browser/net/proxy_service_factory.h" | 51 #include "chrome/browser/net/proxy_service_factory.h" |
52 #include "chrome/browser/net/ssl_config_service_manager.h" | 52 #include "chrome/browser/net/ssl_config_service_manager.h" |
53 #include "chrome/browser/net/url_fixer_upper.h" | 53 #include "chrome/browser/net/url_fixer_upper.h" |
54 #include "chrome/browser/plugins/chrome_plugin_service_filter.h" | 54 #include "chrome/browser/plugins/chrome_plugin_service_filter.h" |
55 #include "chrome/browser/plugins/plugin_prefs.h" | 55 #include "chrome/browser/plugins/plugin_prefs.h" |
56 #include "chrome/browser/prefs/browser_prefs.h" | 56 #include "chrome/browser/prefs/browser_prefs.h" |
57 #include "chrome/browser/prefs/chrome_pref_service_factory.h" | 57 #include "chrome/browser/prefs/chrome_pref_service_factory.h" |
| 58 #include "chrome/browser/prefs/pref_registry_syncable.h" |
| 59 #include "chrome/browser/prefs/pref_service_syncable.h" |
58 #include "chrome/browser/prefs/scoped_user_pref_update.h" | 60 #include "chrome/browser/prefs/scoped_user_pref_update.h" |
59 #include "chrome/browser/prerender/prerender_manager_factory.h" | 61 #include "chrome/browser/prerender/prerender_manager_factory.h" |
60 #include "chrome/browser/profiles/bookmark_model_loaded_observer.h" | 62 #include "chrome/browser/profiles/bookmark_model_loaded_observer.h" |
61 #include "chrome/browser/profiles/chrome_version_service.h" | 63 #include "chrome/browser/profiles/chrome_version_service.h" |
62 #include "chrome/browser/profiles/gaia_info_update_service_factory.h" | 64 #include "chrome/browser/profiles/gaia_info_update_service_factory.h" |
63 #include "chrome/browser/profiles/profile_dependency_manager.h" | 65 #include "chrome/browser/profiles/profile_dependency_manager.h" |
64 #include "chrome/browser/profiles/profile_destroyer.h" | 66 #include "chrome/browser/profiles/profile_destroyer.h" |
65 #include "chrome/browser/profiles/profile_info_cache.h" | 67 #include "chrome/browser/profiles/profile_info_cache.h" |
66 #include "chrome/browser/profiles/profile_manager.h" | 68 #include "chrome/browser/profiles/profile_manager.h" |
67 #include "chrome/browser/search_engines/template_url_fetcher.h" | 69 #include "chrome/browser/search_engines/template_url_fetcher.h" |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
263 return new ProfileImpl(path, delegate, create_mode, sequenced_task_runner); | 265 return new ProfileImpl(path, delegate, create_mode, sequenced_task_runner); |
264 } | 266 } |
265 | 267 |
266 // static | 268 // static |
267 int ProfileImpl::create_readme_delay_ms = 60000; | 269 int ProfileImpl::create_readme_delay_ms = 60000; |
268 | 270 |
269 // static | 271 // static |
270 const char* const ProfileImpl::kPrefExitTypeNormal = "Normal"; | 272 const char* const ProfileImpl::kPrefExitTypeNormal = "Normal"; |
271 | 273 |
272 // static | 274 // static |
273 void ProfileImpl::RegisterUserPrefs(PrefServiceSyncable* prefs) { | 275 void ProfileImpl::RegisterUserPrefs(PrefRegistrySyncable* registry) { |
274 prefs->RegisterBooleanPref(prefs::kSavingBrowserHistoryDisabled, | 276 registry->RegisterBooleanPref(prefs::kSavingBrowserHistoryDisabled, |
275 false, | 277 false, |
276 PrefServiceSyncable::UNSYNCABLE_PREF); | 278 PrefRegistrySyncable::UNSYNCABLE_PREF); |
277 prefs->RegisterBooleanPref(prefs::kForceSafeSearch, | 279 registry->RegisterBooleanPref(prefs::kForceSafeSearch, |
278 false, | 280 false, |
279 PrefServiceSyncable::UNSYNCABLE_PREF); | 281 PrefRegistrySyncable::UNSYNCABLE_PREF); |
280 prefs->RegisterIntegerPref(prefs::kProfileAvatarIndex, | 282 registry->RegisterIntegerPref(prefs::kProfileAvatarIndex, |
281 -1, | 283 -1, |
282 PrefServiceSyncable::SYNCABLE_PREF); | 284 PrefRegistrySyncable::SYNCABLE_PREF); |
283 prefs->RegisterStringPref(prefs::kProfileName, | 285 registry->RegisterStringPref(prefs::kProfileName, |
284 "", | 286 "", |
285 PrefServiceSyncable::SYNCABLE_PREF); | 287 PrefRegistrySyncable::SYNCABLE_PREF); |
286 prefs->RegisterBooleanPref(prefs::kProfileIsManaged, | 288 registry->RegisterBooleanPref(prefs::kProfileIsManaged, |
287 false, | 289 false, |
288 PrefServiceSyncable::SYNCABLE_PREF); | 290 PrefRegistrySyncable::SYNCABLE_PREF); |
289 prefs->RegisterStringPref(prefs::kHomePage, | 291 registry->RegisterStringPref(prefs::kHomePage, |
290 std::string(), | 292 std::string(), |
291 PrefServiceSyncable::SYNCABLE_PREF); | 293 PrefRegistrySyncable::SYNCABLE_PREF); |
292 #if defined(ENABLE_PRINTING) | 294 #if defined(ENABLE_PRINTING) |
293 prefs->RegisterBooleanPref(prefs::kPrintingEnabled, | 295 registry->RegisterBooleanPref(prefs::kPrintingEnabled, |
294 true, | 296 true, |
295 PrefServiceSyncable::UNSYNCABLE_PREF); | 297 PrefRegistrySyncable::UNSYNCABLE_PREF); |
296 #endif | 298 #endif |
297 prefs->RegisterBooleanPref(prefs::kPrintPreviewDisabled, | 299 registry->RegisterBooleanPref(prefs::kPrintPreviewDisabled, |
298 #if defined(GOOGLE_CHROME_BUILD) | 300 #if defined(GOOGLE_CHROME_BUILD) |
299 false, | 301 false, |
300 #else | 302 #else |
301 true, | 303 true, |
302 #endif | 304 #endif |
303 PrefServiceSyncable::UNSYNCABLE_PREF); | 305 PrefRegistrySyncable::UNSYNCABLE_PREF); |
304 | 306 |
305 // Initialize the cache prefs. | 307 // Initialize the cache prefs. |
306 prefs->RegisterFilePathPref(prefs::kDiskCacheDir, | 308 registry->RegisterFilePathPref(prefs::kDiskCacheDir, |
307 base::FilePath(), | 309 base::FilePath(), |
308 PrefServiceSyncable::UNSYNCABLE_PREF); | 310 PrefRegistrySyncable::UNSYNCABLE_PREF); |
309 prefs->RegisterIntegerPref(prefs::kDiskCacheSize, | 311 registry->RegisterIntegerPref(prefs::kDiskCacheSize, |
310 0, | 312 0, |
311 PrefServiceSyncable::UNSYNCABLE_PREF); | 313 PrefRegistrySyncable::UNSYNCABLE_PREF); |
312 prefs->RegisterIntegerPref(prefs::kMediaCacheSize, | 314 registry->RegisterIntegerPref(prefs::kMediaCacheSize, |
313 0, | 315 0, |
314 PrefServiceSyncable::UNSYNCABLE_PREF); | 316 PrefRegistrySyncable::UNSYNCABLE_PREF); |
315 | 317 |
316 // Deprecated. Kept around for migration. | 318 // Deprecated. Kept around for migration. |
317 prefs->RegisterBooleanPref(prefs::kClearSiteDataOnExit, | 319 registry->RegisterBooleanPref(prefs::kClearSiteDataOnExit, |
318 false, | 320 false, |
319 PrefServiceSyncable::SYNCABLE_PREF); | 321 PrefRegistrySyncable::SYNCABLE_PREF); |
320 } | 322 } |
321 | 323 |
322 ProfileImpl::ProfileImpl( | 324 ProfileImpl::ProfileImpl( |
323 const base::FilePath& path, | 325 const base::FilePath& path, |
324 Delegate* delegate, | 326 Delegate* delegate, |
325 CreateMode create_mode, | 327 CreateMode create_mode, |
326 base::SequencedTaskRunner* sequenced_task_runner) | 328 base::SequencedTaskRunner* sequenced_task_runner) |
327 : zoom_callback_(base::Bind(&ProfileImpl::OnZoomLevelChanged, | 329 : zoom_callback_(base::Bind(&ProfileImpl::OnZoomLevelChanged, |
328 base::Unretained(this))), | 330 base::Unretained(this))), |
329 path_(path), | 331 path_(path), |
| 332 pref_registry_(new PrefRegistrySyncable), |
330 ALLOW_THIS_IN_INITIALIZER_LIST(io_data_(this)), | 333 ALLOW_THIS_IN_INITIALIZER_LIST(io_data_(this)), |
331 host_content_settings_map_(NULL), | 334 host_content_settings_map_(NULL), |
332 last_session_exit_type_(EXIT_NORMAL), | 335 last_session_exit_type_(EXIT_NORMAL), |
333 start_time_(Time::Now()), | 336 start_time_(Time::Now()), |
334 delegate_(delegate), | 337 delegate_(delegate), |
335 predictor_(NULL) { | 338 predictor_(NULL) { |
336 DCHECK(!path.empty()) << "Using an empty path will attempt to write " << | 339 DCHECK(!path.empty()) << "Using an empty path will attempt to write " << |
337 "profile files to the root directory!"; | 340 "profile files to the root directory!"; |
338 | 341 |
339 #if defined(ENABLE_SESSION_SERVICE) | 342 #if defined(ENABLE_SESSION_SERVICE) |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
375 policy_service_ = | 378 policy_service_ = |
376 g_browser_process->browser_policy_connector()->CreatePolicyService(this); | 379 g_browser_process->browser_policy_connector()->CreatePolicyService(this); |
377 #else | 380 #else |
378 policy_service_.reset(new policy::PolicyServiceStub()); | 381 policy_service_.reset(new policy::PolicyServiceStub()); |
379 #endif | 382 #endif |
380 | 383 |
381 DCHECK(create_mode == CREATE_MODE_ASYNCHRONOUS || | 384 DCHECK(create_mode == CREATE_MODE_ASYNCHRONOUS || |
382 create_mode == CREATE_MODE_SYNCHRONOUS); | 385 create_mode == CREATE_MODE_SYNCHRONOUS); |
383 bool async_prefs = create_mode == CREATE_MODE_ASYNCHRONOUS; | 386 bool async_prefs = create_mode == CREATE_MODE_ASYNCHRONOUS; |
384 | 387 |
| 388 Profile::RegisterUserPrefs(pref_registry_); |
| 389 |
385 { | 390 { |
386 // On startup, preference loading is always synchronous so a scoped timer | 391 // On startup, preference loading is always synchronous so a scoped timer |
387 // will work here. | 392 // will work here. |
388 startup_metric_utils::ScopedSlowStartupUMA | 393 startup_metric_utils::ScopedSlowStartupUMA |
389 scoped_timer("Startup.SlowStartupPreferenceLoading"); | 394 scoped_timer("Startup.SlowStartupPreferenceLoading"); |
390 prefs_.reset(chrome_prefs::CreateProfilePrefs( | 395 prefs_.reset(chrome_prefs::CreateProfilePrefs( |
391 GetPrefFilePath(), | 396 GetPrefFilePath(), |
392 sequenced_task_runner, | 397 sequenced_task_runner, |
393 policy_service_.get(), | 398 policy_service_.get(), |
394 new ExtensionPrefStore( | 399 new ExtensionPrefStore( |
395 ExtensionPrefValueMapFactory::GetForProfile(this), false), | 400 ExtensionPrefValueMapFactory::GetForProfile(this), false), |
| 401 pref_registry_, |
396 async_prefs)); | 402 async_prefs)); |
397 } | 403 } |
398 | 404 |
399 startup_metric_utils::ScopedSlowStartupUMA | 405 startup_metric_utils::ScopedSlowStartupUMA |
400 scoped_timer("Startup.SlowStartupFinalProfileInit"); | 406 scoped_timer("Startup.SlowStartupFinalProfileInit"); |
401 if (async_prefs) { | 407 if (async_prefs) { |
402 // Wait for the notification that prefs has been loaded | 408 // Wait for the notification that prefs has been loaded |
403 // (successfully or not). Note that we can use base::Unretained | 409 // (successfully or not). Note that we can use base::Unretained |
404 // because the PrefService is owned by this class and lives on | 410 // because the PrefService is owned by this class and lives on |
405 // the same thread. | 411 // the same thread. |
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
693 return extension_special_storage_policy_.get(); | 699 return extension_special_storage_policy_.get(); |
694 } | 700 } |
695 | 701 |
696 void ProfileImpl::OnPrefsLoaded(bool success) { | 702 void ProfileImpl::OnPrefsLoaded(bool success) { |
697 if (!success) { | 703 if (!success) { |
698 if (delegate_) | 704 if (delegate_) |
699 delegate_->OnProfileCreated(this, false, false); | 705 delegate_->OnProfileCreated(this, false, false); |
700 return; | 706 return; |
701 } | 707 } |
702 | 708 |
703 // The Profile class and ProfileManager class may read some prefs so | 709 // TODO(joi): Registration can move to the constructor once it |
704 // register known prefs as soon as possible. | 710 // doesn't need the PrefService parameter. |
705 Profile::RegisterUserPrefs(prefs_.get()); | 711 chrome::RegisterUserPrefs(prefs_.get(), pref_registry_); |
706 chrome::RegisterUserPrefs(prefs_.get()); | 712 |
707 // TODO(mirandac): remove migration code after 6 months (crbug.com/69995). | 713 // TODO(mirandac): remove migration code after 6 months (crbug.com/69995). |
708 if (g_browser_process->local_state()) | 714 if (g_browser_process->local_state()) |
709 chrome::MigrateBrowserPrefs(this, g_browser_process->local_state()); | 715 chrome::MigrateBrowserPrefs(this, g_browser_process->local_state()); |
710 // TODO(ivankr): remove cleanup code eventually (crbug.com/165672). | 716 // TODO(ivankr): remove cleanup code eventually (crbug.com/165672). |
711 chrome::MigrateUserPrefs(this); | 717 chrome::MigrateUserPrefs(this); |
712 | 718 |
713 // |kSessionExitType| was added after |kSessionExitedCleanly|. If the pref | 719 // |kSessionExitType| was added after |kSessionExitedCleanly|. If the pref |
714 // value is empty fallback to checking for |kSessionExitedCleanly|. | 720 // value is empty fallback to checking for |kSessionExitedCleanly|. |
715 const std::string exit_type_pref_value( | 721 const std::string exit_type_pref_value( |
716 prefs_->GetString(prefs::kSessionExitType)); | 722 prefs_->GetString(prefs::kSessionExitType)); |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
779 #else | 785 #else |
780 return NULL; | 786 return NULL; |
781 #endif | 787 #endif |
782 } | 788 } |
783 | 789 |
784 policy::PolicyService* ProfileImpl::GetPolicyService() { | 790 policy::PolicyService* ProfileImpl::GetPolicyService() { |
785 DCHECK(policy_service_.get()); // Should explicitly be initialized. | 791 DCHECK(policy_service_.get()); // Should explicitly be initialized. |
786 return policy_service_.get(); | 792 return policy_service_.get(); |
787 } | 793 } |
788 | 794 |
789 PrefServiceSyncable* ProfileImpl::GetPrefs() { | 795 PrefService* ProfileImpl::GetPrefs() { |
790 DCHECK(prefs_.get()); // Should explicitly be initialized. | 796 DCHECK(prefs_.get()); // Should explicitly be initialized. |
791 return prefs_.get(); | 797 return prefs_.get(); |
792 } | 798 } |
793 | 799 |
794 PrefServiceSyncable* ProfileImpl::GetOffTheRecordPrefs() { | 800 PrefService* ProfileImpl::GetOffTheRecordPrefs() { |
| 801 DCHECK(prefs_.get()); |
795 if (!otr_prefs_.get()) { | 802 if (!otr_prefs_.get()) { |
796 // The new ExtensionPrefStore is ref_counted and the new PrefService | 803 // The new ExtensionPrefStore is ref_counted and the new PrefService |
797 // stores a reference so that we do not leak memory here. | 804 // stores a reference so that we do not leak memory here. |
798 otr_prefs_.reset(GetPrefs()->CreateIncognitoPrefService( | 805 otr_prefs_.reset(prefs_->CreateIncognitoPrefService( |
799 new ExtensionPrefStore( | 806 new ExtensionPrefStore( |
800 ExtensionPrefValueMapFactory::GetForProfile(this), true))); | 807 ExtensionPrefValueMapFactory::GetForProfile(this), true))); |
801 } | 808 } |
802 return otr_prefs_.get(); | 809 return otr_prefs_.get(); |
803 } | 810 } |
804 | 811 |
805 base::FilePath ProfileImpl::GetPrefFilePath() { | 812 base::FilePath ProfileImpl::GetPrefFilePath() { |
806 base::FilePath pref_file_path = path_; | 813 base::FilePath pref_file_path = path_; |
807 pref_file_path = pref_file_path.Append(chrome::kPreferencesFilename); | 814 pref_file_path = pref_file_path.Append(chrome::kPreferencesFilename); |
808 return pref_file_path; | 815 return pref_file_path; |
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1077 } | 1084 } |
1078 | 1085 |
1079 void ProfileImpl::SetupChromeOSEnterpriseExtensionObserver() { | 1086 void ProfileImpl::SetupChromeOSEnterpriseExtensionObserver() { |
1080 DCHECK(!chromeos_enterprise_extension_observer_.get()); | 1087 DCHECK(!chromeos_enterprise_extension_observer_.get()); |
1081 chromeos_enterprise_extension_observer_.reset( | 1088 chromeos_enterprise_extension_observer_.reset( |
1082 new chromeos::EnterpriseExtensionObserver(this)); | 1089 new chromeos::EnterpriseExtensionObserver(this)); |
1083 } | 1090 } |
1084 | 1091 |
1085 void ProfileImpl::InitChromeOSPreferences() { | 1092 void ProfileImpl::InitChromeOSPreferences() { |
1086 chromeos_preferences_.reset(new chromeos::Preferences()); | 1093 chromeos_preferences_.reset(new chromeos::Preferences()); |
1087 chromeos_preferences_->Init(GetPrefs()); | 1094 chromeos_preferences_->Init(PrefServiceSyncable::FromProfile(this)); |
1088 } | 1095 } |
1089 #endif // defined(OS_CHROMEOS) | 1096 #endif // defined(OS_CHROMEOS) |
1090 | 1097 |
1091 PrefProxyConfigTracker* ProfileImpl::GetProxyConfigTracker() { | 1098 PrefProxyConfigTracker* ProfileImpl::GetProxyConfigTracker() { |
1092 if (!pref_proxy_config_tracker_.get()) { | 1099 if (!pref_proxy_config_tracker_.get()) { |
1093 pref_proxy_config_tracker_.reset( | 1100 pref_proxy_config_tracker_.reset( |
1094 ProxyServiceFactory::CreatePrefProxyConfigTracker(GetPrefs())); | 1101 ProxyServiceFactory::CreatePrefProxyConfigTracker(GetPrefs())); |
1095 } | 1102 } |
1096 return pref_proxy_config_tracker_.get(); | 1103 return pref_proxy_config_tracker_.get(); |
1097 } | 1104 } |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1174 base::FilePath* cache_path, | 1181 base::FilePath* cache_path, |
1175 int* max_size) { | 1182 int* max_size) { |
1176 DCHECK(cache_path); | 1183 DCHECK(cache_path); |
1177 DCHECK(max_size); | 1184 DCHECK(max_size); |
1178 base::FilePath path(prefs_->GetFilePath(prefs::kDiskCacheDir)); | 1185 base::FilePath path(prefs_->GetFilePath(prefs::kDiskCacheDir)); |
1179 if (!path.empty()) | 1186 if (!path.empty()) |
1180 *cache_path = path; | 1187 *cache_path = path; |
1181 *max_size = is_media_context ? prefs_->GetInteger(prefs::kMediaCacheSize) : | 1188 *max_size = is_media_context ? prefs_->GetInteger(prefs::kMediaCacheSize) : |
1182 prefs_->GetInteger(prefs::kDiskCacheSize); | 1189 prefs_->GetInteger(prefs::kDiskCacheSize); |
1183 } | 1190 } |
OLD | NEW |