| 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_manager.h" | 5 #include "chrome/browser/profiles/profile_manager.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 367 // is on a read-only volume (preventing Chrome from making a new one). | 367 // is on a read-only volume (preventing Chrome from making a new one). |
| 368 // However, most callers of this function immediately dereference the result | 368 // However, most callers of this function immediately dereference the result |
| 369 // which would lead to crashes in a variety of call sites. Assert here to | 369 // which would lead to crashes in a variety of call sites. Assert here to |
| 370 // figure out how common this is. http://crbug.com/383019 | 370 // figure out how common this is. http://crbug.com/383019 |
| 371 CHECK(profile) << profile_manager->user_data_dir().AsUTF8Unsafe(); | 371 CHECK(profile) << profile_manager->user_data_dir().AsUTF8Unsafe(); |
| 372 return profile; | 372 return profile; |
| 373 } | 373 } |
| 374 | 374 |
| 375 Profile* ProfileManager::GetProfile(const base::FilePath& profile_dir) { | 375 Profile* ProfileManager::GetProfile(const base::FilePath& profile_dir) { |
| 376 TRACE_EVENT0("browser", "ProfileManager::GetProfile"); | 376 TRACE_EVENT0("browser", "ProfileManager::GetProfile"); |
| 377 SCOPED_UMA_HISTOGRAM_TIMER("Profile.GetProfile"); | |
| 378 | 377 |
| 379 // If the profile is already loaded (e.g., chrome.exe launched twice), just | 378 // If the profile is already loaded (e.g., chrome.exe launched twice), just |
| 380 // return it. | 379 // return it. |
| 381 Profile* profile = GetProfileByPath(profile_dir); | 380 Profile* profile = GetProfileByPath(profile_dir); |
| 382 if (NULL != profile) | 381 if (NULL != profile) |
| 383 return profile; | 382 return profile; |
| 383 return SetupProfile(profile_dir); |
| 384 } |
| 384 | 385 |
| 385 profile = CreateProfileHelper(profile_dir); | 386 Profile* ProfileManager::SetupProfile(const base::FilePath& profile_dir) { |
| 387 TRACE_EVENT0("browser", "ProfileManager::SetupProfile"); |
| 388 SCOPED_UMA_HISTOGRAM_LONG_TIMER("Profile.SetupProfile"); |
| 389 Profile* profile = CreateProfileHelper(profile_dir); |
| 386 DCHECK(profile); | 390 DCHECK(profile); |
| 387 if (profile) { | 391 if (profile) { |
| 388 bool result = AddProfile(profile); | 392 bool result = AddProfile(profile); |
| 389 DCHECK(result); | 393 DCHECK(result); |
| 390 } | 394 } |
| 391 return profile; | 395 return profile; |
| 392 } | 396 } |
| 393 | 397 |
| 394 size_t ProfileManager::GetNumberOfProfiles() { | 398 size_t ProfileManager::GetNumberOfProfiles() { |
| 395 return GetProfileInfoCache().GetNumberOfProfiles(); | 399 return GetProfileInfoCache().GetNumberOfProfiles(); |
| 396 } | 400 } |
| 397 | 401 |
| 398 void ProfileManager::CreateProfileAsync( | 402 void ProfileManager::CreateProfileAsync( |
| 399 const base::FilePath& profile_path, | 403 const base::FilePath& profile_path, |
| 400 const CreateCallback& callback, | 404 const CreateCallback& callback, |
| 401 const base::string16& name, | 405 const base::string16& name, |
| 402 const base::string16& icon_url, | 406 const base::string16& icon_url, |
| 403 const std::string& supervised_user_id) { | 407 const std::string& supervised_user_id) { |
| 404 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 408 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 405 TRACE_EVENT1("startup", | 409 TRACE_EVENT1("browser,startup", |
| 406 "ProfileManager::CreateProfileAsync", | 410 "ProfileManager::CreateProfileAsync", |
| 407 "profile_path", | 411 "profile_path", |
| 408 profile_path.value().c_str()); | 412 profile_path.MaybeAsASCII()); |
| 409 | 413 |
| 410 // Make sure that this profile is not pending deletion. | 414 // Make sure that this profile is not pending deletion. |
| 411 if (IsProfileMarkedForDeletion(profile_path)) { | 415 if (IsProfileMarkedForDeletion(profile_path)) { |
| 412 if (!callback.is_null()) | 416 if (!callback.is_null()) |
| 413 callback.Run(NULL, Profile::CREATE_STATUS_LOCAL_FAIL); | 417 callback.Run(NULL, Profile::CREATE_STATUS_LOCAL_FAIL); |
| 414 return; | 418 return; |
| 415 } | 419 } |
| 416 | 420 |
| 417 // Create the profile if needed and collect its ProfileInfo. | 421 // Create the profile if needed and collect its ProfileInfo. |
| 418 ProfilesInfoMap::iterator iter = profiles_info_.find(profile_path); | 422 ProfilesInfoMap::iterator iter = profiles_info_.find(profile_path); |
| (...skipping 650 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1069 | 1073 |
| 1070 // Log the profile size after a reasonable startup delay. | 1074 // Log the profile size after a reasonable startup delay. |
| 1071 BrowserThread::PostDelayedTask( | 1075 BrowserThread::PostDelayedTask( |
| 1072 BrowserThread::FILE, FROM_HERE, | 1076 BrowserThread::FILE, FROM_HERE, |
| 1073 base::Bind(&ProfileSizeTask, profile->GetPath(), enabled_app_count), | 1077 base::Bind(&ProfileSizeTask, profile->GetPath(), enabled_app_count), |
| 1074 base::TimeDelta::FromSeconds(112)); | 1078 base::TimeDelta::FromSeconds(112)); |
| 1075 } | 1079 } |
| 1076 | 1080 |
| 1077 Profile* ProfileManager::CreateProfileHelper(const base::FilePath& path) { | 1081 Profile* ProfileManager::CreateProfileHelper(const base::FilePath& path) { |
| 1078 TRACE_EVENT0("browser", "ProfileManager::CreateProfileHelper"); | 1082 TRACE_EVENT0("browser", "ProfileManager::CreateProfileHelper"); |
| 1083 SCOPED_UMA_HISTOGRAM_TIMER("Profile.CreateProfileHelperTime"); |
| 1084 |
| 1079 return Profile::CreateProfile(path, NULL, Profile::CREATE_MODE_SYNCHRONOUS); | 1085 return Profile::CreateProfile(path, NULL, Profile::CREATE_MODE_SYNCHRONOUS); |
| 1080 } | 1086 } |
| 1081 | 1087 |
| 1082 Profile* ProfileManager::CreateProfileAsyncHelper(const base::FilePath& path, | 1088 Profile* ProfileManager::CreateProfileAsyncHelper(const base::FilePath& path, |
| 1083 Delegate* delegate) { | 1089 Delegate* delegate) { |
| 1084 return Profile::CreateProfile(path, | 1090 return Profile::CreateProfile(path, |
| 1085 delegate, | 1091 delegate, |
| 1086 Profile::CREATE_MODE_ASYNCHRONOUS); | 1092 Profile::CREATE_MODE_ASYNCHRONOUS); |
| 1087 } | 1093 } |
| 1088 | 1094 |
| (...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1378 last_non_supervised_profile_path.BaseName().MaybeAsASCII()); | 1384 last_non_supervised_profile_path.BaseName().MaybeAsASCII()); |
| 1379 FinishDeletingProfile(profile_to_delete_path); | 1385 FinishDeletingProfile(profile_to_delete_path); |
| 1380 } | 1386 } |
| 1381 } | 1387 } |
| 1382 } | 1388 } |
| 1383 #endif | 1389 #endif |
| 1384 | 1390 |
| 1385 ProfileManagerWithoutInit::ProfileManagerWithoutInit( | 1391 ProfileManagerWithoutInit::ProfileManagerWithoutInit( |
| 1386 const base::FilePath& user_data_dir) : ProfileManager(user_data_dir) { | 1392 const base::FilePath& user_data_dir) : ProfileManager(user_data_dir) { |
| 1387 } | 1393 } |
| OLD | NEW |