| 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/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
| 10 #include "base/environment.h" | 10 #include "base/environment.h" |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 198 } | 198 } |
| 199 | 199 |
| 200 // static | 200 // static |
| 201 int ProfileImpl::create_readme_delay_ms = 60000; | 201 int ProfileImpl::create_readme_delay_ms = 60000; |
| 202 | 202 |
| 203 // static | 203 // static |
| 204 void ProfileImpl::RegisterUserPrefs(PrefService* prefs) { | 204 void ProfileImpl::RegisterUserPrefs(PrefService* prefs) { |
| 205 prefs->RegisterBooleanPref(prefs::kSavingBrowserHistoryDisabled, | 205 prefs->RegisterBooleanPref(prefs::kSavingBrowserHistoryDisabled, |
| 206 false, | 206 false, |
| 207 PrefService::UNSYNCABLE_PREF); | 207 PrefService::UNSYNCABLE_PREF); |
| 208 prefs->RegisterBooleanPref(prefs::kClearSiteDataOnExit, | |
| 209 false, | |
| 210 PrefService::SYNCABLE_PREF); | |
| 211 prefs->RegisterBooleanPref(prefs::kProfileShortcutCreated, | 208 prefs->RegisterBooleanPref(prefs::kProfileShortcutCreated, |
| 212 false, | 209 false, |
| 213 PrefService::UNSYNCABLE_PREF); | 210 PrefService::UNSYNCABLE_PREF); |
| 214 prefs->RegisterIntegerPref(prefs::kProfileAvatarIndex, | 211 prefs->RegisterIntegerPref(prefs::kProfileAvatarIndex, |
| 215 -1, | 212 -1, |
| 216 PrefService::SYNCABLE_PREF); | 213 PrefService::SYNCABLE_PREF); |
| 217 prefs->RegisterStringPref(prefs::kProfileName, | 214 prefs->RegisterStringPref(prefs::kProfileName, |
| 218 "", | 215 "", |
| 219 PrefService::SYNCABLE_PREF); | 216 PrefService::SYNCABLE_PREF); |
| 220 prefs->RegisterBooleanPref(prefs::kRestoreSessionStateDialogShown, | 217 prefs->RegisterBooleanPref(prefs::kRestoreSessionStateDialogShown, |
| 221 false, | 218 false, |
| 222 PrefService::SYNCABLE_PREF); | 219 PrefService::SYNCABLE_PREF); |
| 220 |
| 221 // Deprecated. Kept around for migration. |
| 222 prefs->RegisterBooleanPref(prefs::kClearSiteDataOnExit, |
| 223 false, |
| 224 PrefService::SYNCABLE_PREF); |
| 223 } | 225 } |
| 224 | 226 |
| 225 ProfileImpl::ProfileImpl(const FilePath& path, | 227 ProfileImpl::ProfileImpl(const FilePath& path, |
| 226 Delegate* delegate, | 228 Delegate* delegate, |
| 227 CreateMode create_mode) | 229 CreateMode create_mode) |
| 228 : path_(path), | 230 : path_(path), |
| 229 ALLOW_THIS_IN_INITIALIZER_LIST(visited_link_event_listener_( | 231 ALLOW_THIS_IN_INITIALIZER_LIST(visited_link_event_listener_( |
| 230 new VisitedLinkEventListener(this))), | 232 new VisitedLinkEventListener(this))), |
| 231 ALLOW_THIS_IN_INITIALIZER_LIST(io_data_(this)), | 233 ALLOW_THIS_IN_INITIALIZER_LIST(io_data_(this)), |
| 232 host_content_settings_map_(NULL), | 234 host_content_settings_map_(NULL), |
| 233 history_service_created_(false), | 235 history_service_created_(false), |
| 234 favicon_service_created_(false), | 236 favicon_service_created_(false), |
| 235 clear_local_state_on_exit_(false), | |
| 236 start_time_(Time::Now()), | 237 start_time_(Time::Now()), |
| 237 delegate_(delegate), | 238 delegate_(delegate), |
| 238 predictor_(NULL), | 239 predictor_(NULL), |
| 239 session_restore_enabled_(false) { | 240 session_restore_enabled_(false) { |
| 240 DCHECK(!path.empty()) << "Using an empty path will attempt to write " << | 241 DCHECK(!path.empty()) << "Using an empty path will attempt to write " << |
| 241 "profile files to the root directory!"; | 242 "profile files to the root directory!"; |
| 242 | 243 |
| 243 #if defined(ENABLE_SESSION_SERVICE) | 244 #if defined(ENABLE_SESSION_SERVICE) |
| 244 create_session_service_timer_.Start(FROM_HERE, | 245 create_session_service_timer_.Start(FROM_HERE, |
| 245 TimeDelta::FromMilliseconds(kCreateSessionServiceDelayMS), this, | 246 TimeDelta::FromMilliseconds(kCreateSessionServiceDelayMS), this, |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 283 OnPrefsLoaded(true); | 284 OnPrefsLoaded(true); |
| 284 } else { | 285 } else { |
| 285 NOTREACHED(); | 286 NOTREACHED(); |
| 286 } | 287 } |
| 287 } | 288 } |
| 288 | 289 |
| 289 void ProfileImpl::DoFinalInit(bool is_new_profile) { | 290 void ProfileImpl::DoFinalInit(bool is_new_profile) { |
| 290 PrefService* prefs = GetPrefs(); | 291 PrefService* prefs = GetPrefs(); |
| 291 pref_change_registrar_.Init(prefs); | 292 pref_change_registrar_.Init(prefs); |
| 292 pref_change_registrar_.Add(prefs::kSpeechRecognitionFilterProfanities, this); | 293 pref_change_registrar_.Add(prefs::kSpeechRecognitionFilterProfanities, this); |
| 293 pref_change_registrar_.Add(prefs::kClearSiteDataOnExit, this); | |
| 294 pref_change_registrar_.Add(prefs::kGoogleServicesUsername, this); | 294 pref_change_registrar_.Add(prefs::kGoogleServicesUsername, this); |
| 295 pref_change_registrar_.Add(prefs::kDefaultZoomLevel, this); | 295 pref_change_registrar_.Add(prefs::kDefaultZoomLevel, this); |
| 296 pref_change_registrar_.Add(prefs::kProfileAvatarIndex, this); | 296 pref_change_registrar_.Add(prefs::kProfileAvatarIndex, this); |
| 297 pref_change_registrar_.Add(prefs::kProfileName, this); | 297 pref_change_registrar_.Add(prefs::kProfileName, this); |
| 298 | 298 |
| 299 // It would be nice to use PathService for fetching this directory, but | 299 // It would be nice to use PathService for fetching this directory, but |
| 300 // the cache directory depends on the profile directory, which isn't available | 300 // the cache directory depends on the profile directory, which isn't available |
| 301 // to PathService. | 301 // to PathService. |
| 302 chrome::GetUserCacheDirectory(path_, &base_cache_path_); | 302 chrome::GetUserCacheDirectory(path_, &base_cache_path_); |
| 303 // Always create the cache directory asynchronously. | 303 // Always create the cache directory asynchronously. |
| (...skipping 28 matching lines...) Expand all Loading... |
| 332 if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kKeepAliveForTest)) | 332 if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kKeepAliveForTest)) |
| 333 init_background_mode_manager = false; | 333 init_background_mode_manager = false; |
| 334 #endif | 334 #endif |
| 335 if (init_background_mode_manager) { | 335 if (init_background_mode_manager) { |
| 336 if (g_browser_process->background_mode_manager()) | 336 if (g_browser_process->background_mode_manager()) |
| 337 g_browser_process->background_mode_manager()->RegisterProfile(this); | 337 g_browser_process->background_mode_manager()->RegisterProfile(this); |
| 338 } | 338 } |
| 339 | 339 |
| 340 InitRegisteredProtocolHandlers(); | 340 InitRegisteredProtocolHandlers(); |
| 341 | 341 |
| 342 clear_local_state_on_exit_ = prefs->GetBoolean(prefs::kClearSiteDataOnExit); | |
| 343 if (clear_local_state_on_exit_) { | |
| 344 content::RecordAction( | |
| 345 UserMetricsAction("ClearSiteDataOnExitEnabled")); | |
| 346 } else { | |
| 347 content::RecordAction( | |
| 348 UserMetricsAction("ClearSiteDataOnExitDisabled")); | |
| 349 } | |
| 350 | |
| 351 InstantController::RecordMetrics(this); | 342 InstantController::RecordMetrics(this); |
| 352 | 343 |
| 353 FilePath cookie_path = GetPath(); | 344 FilePath cookie_path = GetPath(); |
| 354 cookie_path = cookie_path.Append(chrome::kCookieFilename); | 345 cookie_path = cookie_path.Append(chrome::kCookieFilename); |
| 355 FilePath server_bound_cert_path = GetPath(); | 346 FilePath server_bound_cert_path = GetPath(); |
| 356 server_bound_cert_path = | 347 server_bound_cert_path = |
| 357 server_bound_cert_path.Append(chrome::kOBCertFilename); | 348 server_bound_cert_path.Append(chrome::kOBCertFilename); |
| 358 FilePath cache_path = base_cache_path_; | 349 FilePath cache_path = base_cache_path_; |
| 359 int cache_max_size; | 350 int cache_max_size; |
| 360 GetCacheParameters(false, &cache_path, &cache_max_size); | 351 GetCacheParameters(false, &cache_path, &cache_max_size); |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 487 GetPrefs()->SetFilePath(prefs::kSelectFileLastDirectory, path); | 478 GetPrefs()->SetFilePath(prefs::kSelectFileLastDirectory, path); |
| 488 } | 479 } |
| 489 | 480 |
| 490 ProfileImpl::~ProfileImpl() { | 481 ProfileImpl::~ProfileImpl() { |
| 491 content::NotificationService::current()->Notify( | 482 content::NotificationService::current()->Notify( |
| 492 chrome::NOTIFICATION_PROFILE_DESTROYED, | 483 chrome::NOTIFICATION_PROFILE_DESTROYED, |
| 493 content::Source<Profile>(this), | 484 content::Source<Profile>(this), |
| 494 content::NotificationService::NoDetails()); | 485 content::NotificationService::NoDetails()); |
| 495 bool prefs_loaded = prefs_->GetInitializationStatus() != | 486 bool prefs_loaded = prefs_->GetInitializationStatus() != |
| 496 PrefService::INITIALIZATION_STATUS_WAITING; | 487 PrefService::INITIALIZATION_STATUS_WAITING; |
| 497 // Honor the "clear local state" setting. | |
| 498 if (clear_local_state_on_exit_) | |
| 499 BrowserContext::ClearLocalOnDestruction(this); | |
| 500 | 488 |
| 501 #if defined(ENABLE_SESSION_SERVICE) | 489 #if defined(ENABLE_SESSION_SERVICE) |
| 502 StopCreateSessionServiceTimer(); | 490 StopCreateSessionServiceTimer(); |
| 503 #endif | 491 #endif |
| 504 | 492 |
| 505 // Remove pref observers | 493 // Remove pref observers |
| 506 pref_change_registrar_.RemoveAll(); | 494 pref_change_registrar_.RemoveAll(); |
| 507 | 495 |
| 508 ChromePluginServiceFilter::GetInstance()->UnregisterResourceContext( | 496 ChromePluginServiceFilter::GetInstance()->UnregisterResourceContext( |
| 509 io_data_.GetResourceContextNoInit()); | 497 io_data_.GetResourceContextNoInit()); |
| (...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 922 std::string* pref_name_in = content::Details<std::string>(details).ptr(); | 910 std::string* pref_name_in = content::Details<std::string>(details).ptr(); |
| 923 PrefService* prefs = content::Source<PrefService>(source).ptr(); | 911 PrefService* prefs = content::Source<PrefService>(source).ptr(); |
| 924 DCHECK(pref_name_in && prefs); | 912 DCHECK(pref_name_in && prefs); |
| 925 if (*pref_name_in == prefs::kSpeechRecognitionFilterProfanities) { | 913 if (*pref_name_in == prefs::kSpeechRecognitionFilterProfanities) { |
| 926 content::SpeechRecognitionPreferences* speech_prefs = | 914 content::SpeechRecognitionPreferences* speech_prefs = |
| 927 GetSpeechRecognitionPreferences(); | 915 GetSpeechRecognitionPreferences(); |
| 928 if (speech_prefs) { | 916 if (speech_prefs) { |
| 929 speech_prefs->SetFilterProfanities(prefs->GetBoolean( | 917 speech_prefs->SetFilterProfanities(prefs->GetBoolean( |
| 930 prefs::kSpeechRecognitionFilterProfanities)); | 918 prefs::kSpeechRecognitionFilterProfanities)); |
| 931 } | 919 } |
| 932 } else if (*pref_name_in == prefs::kClearSiteDataOnExit) { | |
| 933 clear_local_state_on_exit_ = | |
| 934 prefs->GetBoolean(prefs::kClearSiteDataOnExit); | |
| 935 } else if (*pref_name_in == prefs::kGoogleServicesUsername) { | 920 } else if (*pref_name_in == prefs::kGoogleServicesUsername) { |
| 936 UpdateProfileUserNameCache(); | 921 UpdateProfileUserNameCache(); |
| 937 } else if (*pref_name_in == prefs::kProfileAvatarIndex) { | 922 } else if (*pref_name_in == prefs::kProfileAvatarIndex) { |
| 938 UpdateProfileAvatarCache(); | 923 UpdateProfileAvatarCache(); |
| 939 } else if (*pref_name_in == prefs::kProfileName) { | 924 } else if (*pref_name_in == prefs::kProfileName) { |
| 940 UpdateProfileNameCache(); | 925 UpdateProfileNameCache(); |
| 941 } else if (*pref_name_in == prefs::kDefaultZoomLevel) { | 926 } else if (*pref_name_in == prefs::kDefaultZoomLevel) { |
| 942 HostZoomMap::GetForBrowserContext(this)->SetDefaultZoomLevel( | 927 HostZoomMap::GetForBrowserContext(this)->SetDefaultZoomLevel( |
| 943 prefs->GetDouble(prefs::kDefaultZoomLevel)); | 928 prefs->GetDouble(prefs::kDefaultZoomLevel)); |
| 944 } | 929 } |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1166 if (!path.empty()) | 1151 if (!path.empty()) |
| 1167 *cache_path = path; | 1152 *cache_path = path; |
| 1168 *max_size = is_media_context ? prefs_->GetInteger(prefs::kMediaCacheSize) : | 1153 *max_size = is_media_context ? prefs_->GetInteger(prefs::kMediaCacheSize) : |
| 1169 prefs_->GetInteger(prefs::kDiskCacheSize); | 1154 prefs_->GetInteger(prefs::kDiskCacheSize); |
| 1170 } | 1155 } |
| 1171 | 1156 |
| 1172 base::Callback<ChromeURLDataManagerBackend*(void)> | 1157 base::Callback<ChromeURLDataManagerBackend*(void)> |
| 1173 ProfileImpl::GetChromeURLDataManagerBackendGetter() const { | 1158 ProfileImpl::GetChromeURLDataManagerBackendGetter() const { |
| 1174 return io_data_.GetChromeURLDataManagerBackendGetter(); | 1159 return io_data_.GetChromeURLDataManagerBackendGetter(); |
| 1175 } | 1160 } |
| OLD | NEW |