| 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 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 244 CreateMode create_mode) { | 244 CreateMode create_mode) { |
| 245 TRACE_EVENT0("browser", "Profile::CreateProfile") | 245 TRACE_EVENT0("browser", "Profile::CreateProfile") |
| 246 // Get sequenced task runner for making sure that file operations of | 246 // Get sequenced task runner for making sure that file operations of |
| 247 // this profile (defined by |path|) are executed in expected order | 247 // this profile (defined by |path|) are executed in expected order |
| 248 // (what was previously assured by the FILE thread). | 248 // (what was previously assured by the FILE thread). |
| 249 scoped_refptr<base::SequencedTaskRunner> sequenced_task_runner = | 249 scoped_refptr<base::SequencedTaskRunner> sequenced_task_runner = |
| 250 JsonPrefStore::GetTaskRunnerForFile(path, | 250 JsonPrefStore::GetTaskRunnerForFile(path, |
| 251 BrowserThread::GetBlockingPool()); | 251 BrowserThread::GetBlockingPool()); |
| 252 if (create_mode == CREATE_MODE_ASYNCHRONOUS) { | 252 if (create_mode == CREATE_MODE_ASYNCHRONOUS) { |
| 253 DCHECK(delegate); | 253 DCHECK(delegate); |
| 254 CreateProfileDirectory(sequenced_task_runner, path); | 254 CreateProfileDirectory(sequenced_task_runner.get(), path); |
| 255 } else if (create_mode == CREATE_MODE_SYNCHRONOUS) { | 255 } else if (create_mode == CREATE_MODE_SYNCHRONOUS) { |
| 256 if (!file_util::PathExists(path)) { | 256 if (!file_util::PathExists(path)) { |
| 257 // TODO(tc): http://b/1094718 Bad things happen if we can't write to the | 257 // TODO(tc): http://b/1094718 Bad things happen if we can't write to the |
| 258 // profile directory. We should eventually be able to run in this | 258 // profile directory. We should eventually be able to run in this |
| 259 // situation. | 259 // situation. |
| 260 if (!file_util::CreateDirectory(path)) | 260 if (!file_util::CreateDirectory(path)) |
| 261 return NULL; | 261 return NULL; |
| 262 } | 262 } |
| 263 } else { | 263 } else { |
| 264 NOTREACHED(); | 264 NOTREACHED(); |
| 265 } | 265 } |
| 266 | 266 |
| 267 return new ProfileImpl(path, delegate, create_mode, sequenced_task_runner); | 267 return new ProfileImpl( |
| 268 path, delegate, create_mode, sequenced_task_runner.get()); |
| 268 } | 269 } |
| 269 | 270 |
| 270 // static | 271 // static |
| 271 int ProfileImpl::create_readme_delay_ms = 60000; | 272 int ProfileImpl::create_readme_delay_ms = 60000; |
| 272 | 273 |
| 273 // static | 274 // static |
| 274 const char* const ProfileImpl::kPrefExitTypeNormal = "Normal"; | 275 const char* const ProfileImpl::kPrefExitTypeNormal = "Normal"; |
| 275 | 276 |
| 276 // static | 277 // static |
| 277 void ProfileImpl::RegisterUserPrefs( | 278 void ProfileImpl::RegisterUserPrefs( |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 389 #endif | 390 #endif |
| 390 #endif | 391 #endif |
| 391 profile_policy_connector_ = | 392 profile_policy_connector_ = |
| 392 policy::ProfilePolicyConnectorFactory::CreateForProfile( | 393 policy::ProfilePolicyConnectorFactory::CreateForProfile( |
| 393 this, force_immediate_policy_load, sequenced_task_runner); | 394 this, force_immediate_policy_load, sequenced_task_runner); |
| 394 | 395 |
| 395 DCHECK(create_mode == CREATE_MODE_ASYNCHRONOUS || | 396 DCHECK(create_mode == CREATE_MODE_ASYNCHRONOUS || |
| 396 create_mode == CREATE_MODE_SYNCHRONOUS); | 397 create_mode == CREATE_MODE_SYNCHRONOUS); |
| 397 bool async_prefs = create_mode == CREATE_MODE_ASYNCHRONOUS; | 398 bool async_prefs = create_mode == CREATE_MODE_ASYNCHRONOUS; |
| 398 | 399 |
| 399 chrome::RegisterUserPrefs(pref_registry_); | 400 chrome::RegisterUserPrefs(pref_registry_.get()); |
| 400 | 401 |
| 401 { | 402 { |
| 402 // On startup, preference loading is always synchronous so a scoped timer | 403 // On startup, preference loading is always synchronous so a scoped timer |
| 403 // will work here. | 404 // will work here. |
| 404 startup_metric_utils::ScopedSlowStartupUMA | 405 startup_metric_utils::ScopedSlowStartupUMA |
| 405 scoped_timer("Startup.SlowStartupPreferenceLoading"); | 406 scoped_timer("Startup.SlowStartupPreferenceLoading"); |
| 406 prefs_.reset(chrome_prefs::CreateProfilePrefs( | 407 prefs_.reset(chrome_prefs::CreateProfilePrefs( |
| 407 GetPrefFilePath(), | 408 GetPrefFilePath(), |
| 408 sequenced_task_runner, | 409 sequenced_task_runner, |
| 409 profile_policy_connector_->policy_service(), | 410 profile_policy_connector_->policy_service(), |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 452 base::Unretained(this))); | 453 base::Unretained(this))); |
| 453 | 454 |
| 454 // It would be nice to use PathService for fetching this directory, but | 455 // It would be nice to use PathService for fetching this directory, but |
| 455 // the cache directory depends on the profile directory, which isn't available | 456 // the cache directory depends on the profile directory, which isn't available |
| 456 // to PathService. | 457 // to PathService. |
| 457 chrome::GetUserCacheDirectory(path_, &base_cache_path_); | 458 chrome::GetUserCacheDirectory(path_, &base_cache_path_); |
| 458 // Always create the cache directory asynchronously. | 459 // Always create the cache directory asynchronously. |
| 459 scoped_refptr<base::SequencedTaskRunner> sequenced_task_runner = | 460 scoped_refptr<base::SequencedTaskRunner> sequenced_task_runner = |
| 460 JsonPrefStore::GetTaskRunnerForFile(base_cache_path_, | 461 JsonPrefStore::GetTaskRunnerForFile(base_cache_path_, |
| 461 BrowserThread::GetBlockingPool()); | 462 BrowserThread::GetBlockingPool()); |
| 462 CreateProfileDirectory(sequenced_task_runner, base_cache_path_); | 463 CreateProfileDirectory(sequenced_task_runner.get(), base_cache_path_); |
| 463 | 464 |
| 464 // Now that the profile is hooked up to receive pref change notifications to | 465 // Now that the profile is hooked up to receive pref change notifications to |
| 465 // kGoogleServicesUsername, initialize components that depend on it to reflect | 466 // kGoogleServicesUsername, initialize components that depend on it to reflect |
| 466 // the current value. | 467 // the current value. |
| 467 UpdateProfileUserNameCache(); | 468 UpdateProfileUserNameCache(); |
| 468 GAIAInfoUpdateServiceFactory::GetForProfile(this); | 469 GAIAInfoUpdateServiceFactory::GetForProfile(this); |
| 469 | 470 |
| 470 PrefService* local_state = g_browser_process->local_state(); | 471 PrefService* local_state = g_browser_process->local_state(); |
| 471 ssl_config_service_manager_.reset( | 472 ssl_config_service_manager_.reset( |
| 472 SSLConfigServiceManager::CreateDefaultManager(local_state)); | 473 SSLConfigServiceManager::CreateDefaultManager(local_state)); |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 632 ProfileDestroyer::DestroyOffTheRecordProfileNow( | 633 ProfileDestroyer::DestroyOffTheRecordProfileNow( |
| 633 off_the_record_profile_.get()); | 634 off_the_record_profile_.get()); |
| 634 } else { | 635 } else { |
| 635 ExtensionPrefValueMapFactory::GetForProfile(this)-> | 636 ExtensionPrefValueMapFactory::GetForProfile(this)-> |
| 636 ClearAllIncognitoSessionOnlyPreferences(); | 637 ClearAllIncognitoSessionOnlyPreferences(); |
| 637 } | 638 } |
| 638 | 639 |
| 639 BrowserContextDependencyManager::GetInstance()->DestroyBrowserContextServices( | 640 BrowserContextDependencyManager::GetInstance()->DestroyBrowserContextServices( |
| 640 this); | 641 this); |
| 641 | 642 |
| 642 if (top_sites_) | 643 if (top_sites_.get()) |
| 643 top_sites_->Shutdown(); | 644 top_sites_->Shutdown(); |
| 644 | 645 |
| 645 if (pref_proxy_config_tracker_) | 646 if (pref_proxy_config_tracker_) |
| 646 pref_proxy_config_tracker_->DetachFromPrefService(); | 647 pref_proxy_config_tracker_->DetachFromPrefService(); |
| 647 | 648 |
| 648 if (host_content_settings_map_) | 649 if (host_content_settings_map_.get()) |
| 649 host_content_settings_map_->ShutdownOnUIThread(); | 650 host_content_settings_map_->ShutdownOnUIThread(); |
| 650 | 651 |
| 651 // This causes the Preferences file to be written to disk. | 652 // This causes the Preferences file to be written to disk. |
| 652 if (prefs_loaded) | 653 if (prefs_loaded) |
| 653 SetExitType(EXIT_NORMAL); | 654 SetExitType(EXIT_NORMAL); |
| 654 } | 655 } |
| 655 | 656 |
| 656 std::string ProfileImpl::GetProfileName() { | 657 std::string ProfileImpl::GetProfileName() { |
| 657 return GetPrefs()->GetString(prefs::kGoogleServicesUsername); | 658 return GetPrefs()->GetString(prefs::kGoogleServicesUsername); |
| 658 } | 659 } |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 696 Profile* ProfileImpl::GetOriginalProfile() { | 697 Profile* ProfileImpl::GetOriginalProfile() { |
| 697 return this; | 698 return this; |
| 698 } | 699 } |
| 699 | 700 |
| 700 ExtensionService* ProfileImpl::GetExtensionService() { | 701 ExtensionService* ProfileImpl::GetExtensionService() { |
| 701 return extensions::ExtensionSystem::Get(this)->extension_service(); | 702 return extensions::ExtensionSystem::Get(this)->extension_service(); |
| 702 } | 703 } |
| 703 | 704 |
| 704 ExtensionSpecialStoragePolicy* | 705 ExtensionSpecialStoragePolicy* |
| 705 ProfileImpl::GetExtensionSpecialStoragePolicy() { | 706 ProfileImpl::GetExtensionSpecialStoragePolicy() { |
| 706 if (!extension_special_storage_policy_) { | 707 if (!extension_special_storage_policy_.get()) { |
| 707 TRACE_EVENT0("browser", "ProfileImpl::GetExtensionSpecialStoragePolicy") | 708 TRACE_EVENT0("browser", "ProfileImpl::GetExtensionSpecialStoragePolicy") |
| 708 extension_special_storage_policy_ = new ExtensionSpecialStoragePolicy( | 709 extension_special_storage_policy_ = new ExtensionSpecialStoragePolicy( |
| 709 CookieSettings::Factory::GetForProfile(this)); | 710 CookieSettings::Factory::GetForProfile(this)); |
| 710 } | 711 } |
| 711 return extension_special_storage_policy_.get(); | 712 return extension_special_storage_policy_.get(); |
| 712 } | 713 } |
| 713 | 714 |
| 714 void ProfileImpl::OnPrefsLoaded(bool success) { | 715 void ProfileImpl::OnPrefsLoaded(bool success) { |
| 715 TRACE_EVENT0("browser", "ProfileImpl::OnPrefsLoaded") | 716 TRACE_EVENT0("browser", "ProfileImpl::OnPrefsLoaded") |
| 716 if (!success) { | 717 if (!success) { |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 878 // BrowserContextKeyedService is trying to create a RequestContext at startup, | 879 // BrowserContextKeyedService is trying to create a RequestContext at startup, |
| 879 // but SSLConfigServiceManager is not initialized until DoFinalInit() which is | 880 // but SSLConfigServiceManager is not initialized until DoFinalInit() which is |
| 880 // invoked after all BrowserContextKeyedServices have been initialized (see | 881 // invoked after all BrowserContextKeyedServices have been initialized (see |
| 881 // http://crbug.com/171406). | 882 // http://crbug.com/171406). |
| 882 DCHECK(ssl_config_service_manager_) << | 883 DCHECK(ssl_config_service_manager_) << |
| 883 "SSLConfigServiceManager is not initialized yet"; | 884 "SSLConfigServiceManager is not initialized yet"; |
| 884 return ssl_config_service_manager_->Get(); | 885 return ssl_config_service_manager_->Get(); |
| 885 } | 886 } |
| 886 | 887 |
| 887 HostContentSettingsMap* ProfileImpl::GetHostContentSettingsMap() { | 888 HostContentSettingsMap* ProfileImpl::GetHostContentSettingsMap() { |
| 888 if (!host_content_settings_map_) { | 889 if (!host_content_settings_map_.get()) { |
| 889 host_content_settings_map_ = new HostContentSettingsMap(GetPrefs(), false); | 890 host_content_settings_map_ = new HostContentSettingsMap(GetPrefs(), false); |
| 890 } | 891 } |
| 891 return host_content_settings_map_.get(); | 892 return host_content_settings_map_.get(); |
| 892 } | 893 } |
| 893 | 894 |
| 894 content::GeolocationPermissionContext* | 895 content::GeolocationPermissionContext* |
| 895 ProfileImpl::GetGeolocationPermissionContext() { | 896 ProfileImpl::GetGeolocationPermissionContext() { |
| 896 return ChromeGeolocationPermissionContextFactory::GetForProfile(this); | 897 return ChromeGeolocationPermissionContextFactory::GetForProfile(this); |
| 897 } | 898 } |
| 898 | 899 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 919 return true; | 920 return true; |
| 920 Profile* otr_profile = off_the_record_profile_.get(); | 921 Profile* otr_profile = off_the_record_profile_.get(); |
| 921 return otr_profile && profile == otr_profile; | 922 return otr_profile && profile == otr_profile; |
| 922 } | 923 } |
| 923 | 924 |
| 924 Time ProfileImpl::GetStartTime() const { | 925 Time ProfileImpl::GetStartTime() const { |
| 925 return start_time_; | 926 return start_time_; |
| 926 } | 927 } |
| 927 | 928 |
| 928 history::TopSites* ProfileImpl::GetTopSites() { | 929 history::TopSites* ProfileImpl::GetTopSites() { |
| 929 if (!top_sites_) { | 930 if (!top_sites_.get()) { |
| 930 top_sites_ = history::TopSites::Create( | 931 top_sites_ = history::TopSites::Create( |
| 931 this, GetPath().Append(chrome::kTopSitesFilename)); | 932 this, GetPath().Append(chrome::kTopSitesFilename)); |
| 932 } | 933 } |
| 933 return top_sites_; | 934 return top_sites_.get(); |
| 934 } | 935 } |
| 935 | 936 |
| 936 history::TopSites* ProfileImpl::GetTopSitesWithoutCreating() { | 937 history::TopSites* ProfileImpl::GetTopSitesWithoutCreating() { |
| 937 return top_sites_; | 938 return top_sites_.get(); |
| 938 } | 939 } |
| 939 | 940 |
| 940 void ProfileImpl::OnDefaultZoomLevelChanged() { | 941 void ProfileImpl::OnDefaultZoomLevelChanged() { |
| 941 HostZoomMap::GetForBrowserContext(this)->SetDefaultZoomLevel( | 942 HostZoomMap::GetForBrowserContext(this)->SetDefaultZoomLevel( |
| 942 pref_change_registrar_.prefs()->GetDouble(prefs::kDefaultZoomLevel)); | 943 pref_change_registrar_.prefs()->GetDouble(prefs::kDefaultZoomLevel)); |
| 943 } | 944 } |
| 944 | 945 |
| 945 void ProfileImpl::OnZoomLevelChanged( | 946 void ProfileImpl::OnZoomLevelChanged( |
| 946 const HostZoomMap::ZoomLevelChange& change) { | 947 const HostZoomMap::ZoomLevelChange& change) { |
| 947 | 948 |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1149 base::FilePath* cache_path, | 1150 base::FilePath* cache_path, |
| 1150 int* max_size) { | 1151 int* max_size) { |
| 1151 DCHECK(cache_path); | 1152 DCHECK(cache_path); |
| 1152 DCHECK(max_size); | 1153 DCHECK(max_size); |
| 1153 base::FilePath path(prefs_->GetFilePath(prefs::kDiskCacheDir)); | 1154 base::FilePath path(prefs_->GetFilePath(prefs::kDiskCacheDir)); |
| 1154 if (!path.empty()) | 1155 if (!path.empty()) |
| 1155 *cache_path = path; | 1156 *cache_path = path; |
| 1156 *max_size = is_media_context ? prefs_->GetInteger(prefs::kMediaCacheSize) : | 1157 *max_size = is_media_context ? prefs_->GetInteger(prefs::kMediaCacheSize) : |
| 1157 prefs_->GetInteger(prefs::kDiskCacheSize); | 1158 prefs_->GetInteger(prefs::kDiskCacheSize); |
| 1158 } | 1159 } |
| OLD | NEW |