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 543 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
554 std::vector<Profile*> profiles; | 554 std::vector<Profile*> profiles; |
555 for (ProfilesInfoMap::const_iterator iter = profiles_info_.begin(); | 555 for (ProfilesInfoMap::const_iterator iter = profiles_info_.begin(); |
556 iter != profiles_info_.end(); ++iter) { | 556 iter != profiles_info_.end(); ++iter) { |
557 if (iter->second->created) | 557 if (iter->second->created) |
558 profiles.push_back(iter->second->profile.get()); | 558 profiles.push_back(iter->second->profile.get()); |
559 } | 559 } |
560 return profiles; | 560 return profiles; |
561 } | 561 } |
562 | 562 |
563 Profile* ProfileManager::GetProfileByPath(const base::FilePath& path) const { | 563 Profile* ProfileManager::GetProfileByPath(const base::FilePath& path) const { |
| 564 TRACE_EVENT0("browser", "ProfileManager::GetProfileByPath"); |
564 ProfileInfo* profile_info = GetProfileInfoByPath(path); | 565 ProfileInfo* profile_info = GetProfileInfoByPath(path); |
565 return profile_info ? profile_info->profile.get() : NULL; | 566 return profile_info ? profile_info->profile.get() : NULL; |
566 } | 567 } |
567 | 568 |
568 // static | 569 // static |
569 base::FilePath ProfileManager::CreateMultiProfileAsync( | 570 base::FilePath ProfileManager::CreateMultiProfileAsync( |
570 const base::string16& name, | 571 const base::string16& name, |
571 const base::string16& icon_url, | 572 const base::string16& icon_url, |
572 const CreateCallback& callback, | 573 const CreateCallback& callback, |
573 const std::string& supervised_user_id) { | 574 const std::string& supervised_user_id) { |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
619 #if defined(OS_WIN) | 620 #if defined(OS_WIN) |
620 new_path = new_path.Append(base::ASCIIToUTF16(profile_name)); | 621 new_path = new_path.Append(base::ASCIIToUTF16(profile_name)); |
621 #else | 622 #else |
622 new_path = new_path.Append(profile_name); | 623 new_path = new_path.Append(profile_name); |
623 #endif | 624 #endif |
624 local_state->SetInteger(prefs::kProfilesNumCreated, ++next_directory); | 625 local_state->SetInteger(prefs::kProfilesNumCreated, ++next_directory); |
625 return new_path; | 626 return new_path; |
626 } | 627 } |
627 | 628 |
628 ProfileInfoCache& ProfileManager::GetProfileInfoCache() { | 629 ProfileInfoCache& ProfileManager::GetProfileInfoCache() { |
| 630 TRACE_EVENT0("browser", "ProfileManager::GetProfileInfoCache"); |
629 if (!profile_info_cache_) { | 631 if (!profile_info_cache_) { |
630 profile_info_cache_.reset(new ProfileInfoCache( | 632 profile_info_cache_.reset(new ProfileInfoCache( |
631 g_browser_process->local_state(), user_data_dir_)); | 633 g_browser_process->local_state(), user_data_dir_)); |
632 } | 634 } |
633 return *profile_info_cache_.get(); | 635 return *profile_info_cache_.get(); |
634 } | 636 } |
635 | 637 |
636 ProfileShortcutManager* ProfileManager::profile_shortcut_manager() { | 638 ProfileShortcutManager* ProfileManager::profile_shortcut_manager() { |
637 return profile_shortcut_manager_.get(); | 639 return profile_shortcut_manager_.get(); |
638 } | 640 } |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
757 if (cache.GetBackgroundStatusOfProfileAtIndex(p)) { | 759 if (cache.GetBackgroundStatusOfProfileAtIndex(p)) { |
758 // If status is true, that profile is running background apps. By calling | 760 // If status is true, that profile is running background apps. By calling |
759 // GetProfile, we automatically cause the profile to be loaded which will | 761 // GetProfile, we automatically cause the profile to be loaded which will |
760 // register it with the BackgroundModeManager. | 762 // register it with the BackgroundModeManager. |
761 GetProfile(cache.GetPathOfProfileAtIndex(p)); | 763 GetProfile(cache.GetPathOfProfileAtIndex(p)); |
762 } | 764 } |
763 } | 765 } |
764 } | 766 } |
765 | 767 |
766 void ProfileManager::InitProfileUserPrefs(Profile* profile) { | 768 void ProfileManager::InitProfileUserPrefs(Profile* profile) { |
| 769 TRACE_EVENT0("browser", "ProfileManager::InitProfileUserPrefs"); |
767 ProfileInfoCache& cache = GetProfileInfoCache(); | 770 ProfileInfoCache& cache = GetProfileInfoCache(); |
768 | 771 |
769 if (profile->GetPath().DirName() != cache.GetUserDataDir()) | 772 if (profile->GetPath().DirName() != cache.GetUserDataDir()) |
770 return; | 773 return; |
771 | 774 |
772 size_t avatar_index; | 775 size_t avatar_index; |
773 std::string profile_name; | 776 std::string profile_name; |
774 std::string supervised_user_id; | 777 std::string supervised_user_id; |
775 if (profile->IsGuestSession()) { | 778 if (profile->IsGuestSession()) { |
776 profile_name = l10n_util::GetStringUTF8(IDS_PROFILES_GUEST_PROFILE_NAME); | 779 profile_name = l10n_util::GetStringUTF8(IDS_PROFILES_GUEST_PROFILE_NAME); |
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
993 RunCallbacks(callbacks, profile, Profile::CREATE_STATUS_CREATED); | 996 RunCallbacks(callbacks, profile, Profile::CREATE_STATUS_CREATED); |
994 } | 997 } |
995 | 998 |
996 // Invoke INITIALIZED or FAIL for all profiles. | 999 // Invoke INITIALIZED or FAIL for all profiles. |
997 RunCallbacks(callbacks, profile, | 1000 RunCallbacks(callbacks, profile, |
998 profile ? Profile::CREATE_STATUS_INITIALIZED : | 1001 profile ? Profile::CREATE_STATUS_INITIALIZED : |
999 Profile::CREATE_STATUS_LOCAL_FAIL); | 1002 Profile::CREATE_STATUS_LOCAL_FAIL); |
1000 } | 1003 } |
1001 | 1004 |
1002 void ProfileManager::DoFinalInit(Profile* profile, bool go_off_the_record) { | 1005 void ProfileManager::DoFinalInit(Profile* profile, bool go_off_the_record) { |
| 1006 TRACE_EVENT0("browser", "ProfileManager::DoFinalInit"); |
1003 DoFinalInitForServices(profile, go_off_the_record); | 1007 DoFinalInitForServices(profile, go_off_the_record); |
1004 AddProfileToCache(profile); | 1008 AddProfileToCache(profile); |
1005 DoFinalInitLogging(profile); | 1009 DoFinalInitLogging(profile); |
1006 | 1010 |
1007 ProfileMetrics::LogNumberOfProfiles(this); | 1011 ProfileMetrics::LogNumberOfProfiles(this); |
1008 content::NotificationService::current()->Notify( | 1012 content::NotificationService::current()->Notify( |
1009 chrome::NOTIFICATION_PROFILE_ADDED, | 1013 chrome::NOTIFICATION_PROFILE_ADDED, |
1010 content::Source<Profile>(profile), | 1014 content::Source<Profile>(profile), |
1011 content::NotificationService::NoDetails()); | 1015 content::NotificationService::NoDetails()); |
1012 } | 1016 } |
1013 | 1017 |
1014 void ProfileManager::DoFinalInitForServices(Profile* profile, | 1018 void ProfileManager::DoFinalInitForServices(Profile* profile, |
1015 bool go_off_the_record) { | 1019 bool go_off_the_record) { |
| 1020 TRACE_EVENT0("browser", "ProfileManager::DoFinalInitForServices"); |
1016 #if defined(ENABLE_EXTENSIONS) | 1021 #if defined(ENABLE_EXTENSIONS) |
1017 ProfileInfoCache& cache = GetProfileInfoCache(); | 1022 ProfileInfoCache& cache = GetProfileInfoCache(); |
1018 extensions::ExtensionSystem::Get(profile)->InitForRegularProfile( | 1023 extensions::ExtensionSystem::Get(profile)->InitForRegularProfile( |
1019 !go_off_the_record); | 1024 !go_off_the_record); |
1020 // During tests, when |profile| is an instance of TestingProfile, | 1025 // During tests, when |profile| is an instance of TestingProfile, |
1021 // ExtensionSystem might not create an ExtensionService. | 1026 // ExtensionSystem might not create an ExtensionService. |
1022 if (extensions::ExtensionSystem::Get(profile)->extension_service()) { | 1027 if (extensions::ExtensionSystem::Get(profile)->extension_service()) { |
1023 extensions::ExtensionSystem::Get(profile)->extension_service()-> | 1028 extensions::ExtensionSystem::Get(profile)->extension_service()-> |
1024 RegisterContentSettings(profile->GetHostContentSettingsMap()); | 1029 RegisterContentSettings(profile->GetHostContentSettingsMap()); |
1025 } | 1030 } |
(...skipping 22 matching lines...) Expand all Loading... |
1048 // Activate data reduction proxy. This creates a request context and makes a | 1053 // Activate data reduction proxy. This creates a request context and makes a |
1049 // URL request to check if the data reduction proxy server is reachable. | 1054 // URL request to check if the data reduction proxy server is reachable. |
1050 DataReductionProxyChromeSettingsFactory::GetForBrowserContext(profile)-> | 1055 DataReductionProxyChromeSettingsFactory::GetForBrowserContext(profile)-> |
1051 MaybeActivateDataReductionProxy(true); | 1056 MaybeActivateDataReductionProxy(true); |
1052 | 1057 |
1053 AccountTrackerServiceFactory::GetForProfile(profile)->EnableNetworkFetches(); | 1058 AccountTrackerServiceFactory::GetForProfile(profile)->EnableNetworkFetches(); |
1054 AccountReconcilorFactory::GetForProfile(profile); | 1059 AccountReconcilorFactory::GetForProfile(profile); |
1055 } | 1060 } |
1056 | 1061 |
1057 void ProfileManager::DoFinalInitLogging(Profile* profile) { | 1062 void ProfileManager::DoFinalInitLogging(Profile* profile) { |
| 1063 TRACE_EVENT0("browser", "ProfileManager::DoFinalInitLogging"); |
1058 // Count number of extensions in this profile. | 1064 // Count number of extensions in this profile. |
1059 int enabled_app_count = -1; | 1065 int enabled_app_count = -1; |
1060 #if defined(ENABLE_EXTENSIONS) | 1066 #if defined(ENABLE_EXTENSIONS) |
1061 enabled_app_count = GetEnabledAppCount(profile); | 1067 enabled_app_count = GetEnabledAppCount(profile); |
1062 #endif | 1068 #endif |
1063 | 1069 |
1064 // Log the profile size after a reasonable startup delay. | 1070 // Log the profile size after a reasonable startup delay. |
1065 BrowserThread::PostDelayedTask( | 1071 BrowserThread::PostDelayedTask( |
1066 BrowserThread::FILE, FROM_HERE, | 1072 BrowserThread::FILE, FROM_HERE, |
1067 base::Bind(&ProfileSizeTask, profile->GetPath(), enabled_app_count), | 1073 base::Bind(&ProfileSizeTask, profile->GetPath(), enabled_app_count), |
1068 base::TimeDelta::FromSeconds(112)); | 1074 base::TimeDelta::FromSeconds(112)); |
1069 } | 1075 } |
1070 | 1076 |
1071 Profile* ProfileManager::CreateProfileHelper(const base::FilePath& path) { | 1077 Profile* ProfileManager::CreateProfileHelper(const base::FilePath& path) { |
| 1078 TRACE_EVENT0("browser", "ProfileManager::CreateProfileHelper"); |
1072 return Profile::CreateProfile(path, NULL, Profile::CREATE_MODE_SYNCHRONOUS); | 1079 return Profile::CreateProfile(path, NULL, Profile::CREATE_MODE_SYNCHRONOUS); |
1073 } | 1080 } |
1074 | 1081 |
1075 Profile* ProfileManager::CreateProfileAsyncHelper(const base::FilePath& path, | 1082 Profile* ProfileManager::CreateProfileAsyncHelper(const base::FilePath& path, |
1076 Delegate* delegate) { | 1083 Delegate* delegate) { |
1077 return Profile::CreateProfile(path, | 1084 return Profile::CreateProfile(path, |
1078 delegate, | 1085 delegate, |
1079 Profile::CREATE_MODE_ASYNCHRONOUS); | 1086 Profile::CREATE_MODE_ASYNCHRONOUS); |
1080 } | 1087 } |
1081 | 1088 |
(...skipping 28 matching lines...) Expand all Loading... |
1110 return profile->GetOffTheRecordProfile(); | 1117 return profile->GetOffTheRecordProfile(); |
1111 return profile; | 1118 return profile; |
1112 #else | 1119 #else |
1113 base::FilePath default_profile_dir(user_data_dir); | 1120 base::FilePath default_profile_dir(user_data_dir); |
1114 default_profile_dir = default_profile_dir.Append(GetInitialProfileDir()); | 1121 default_profile_dir = default_profile_dir.Append(GetInitialProfileDir()); |
1115 return GetProfile(default_profile_dir); | 1122 return GetProfile(default_profile_dir); |
1116 #endif | 1123 #endif |
1117 } | 1124 } |
1118 | 1125 |
1119 bool ProfileManager::AddProfile(Profile* profile) { | 1126 bool ProfileManager::AddProfile(Profile* profile) { |
| 1127 TRACE_EVENT0("browser", "ProfileManager::AddProfile"); |
1120 DCHECK(profile); | 1128 DCHECK(profile); |
1121 | 1129 |
1122 // Make sure that we're not loading a profile with the same ID as a profile | 1130 // Make sure that we're not loading a profile with the same ID as a profile |
1123 // that's already loaded. | 1131 // that's already loaded. |
1124 if (GetProfileByPath(profile->GetPath())) { | 1132 if (GetProfileByPath(profile->GetPath())) { |
1125 NOTREACHED() << "Attempted to add profile with the same path (" << | 1133 NOTREACHED() << "Attempted to add profile with the same path (" << |
1126 profile->GetPath().value() << | 1134 profile->GetPath().value() << |
1127 ") as an already-loaded profile."; | 1135 ") as an already-loaded profile."; |
1128 return false; | 1136 return false; |
1129 } | 1137 } |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1175 } | 1183 } |
1176 | 1184 |
1177 QueueProfileDirectoryForDeletion(profile_dir); | 1185 QueueProfileDirectoryForDeletion(profile_dir); |
1178 cache.DeleteProfileFromCache(profile_dir); | 1186 cache.DeleteProfileFromCache(profile_dir); |
1179 ProfileMetrics::UpdateReportedProfilesStatistics(this); | 1187 ProfileMetrics::UpdateReportedProfilesStatistics(this); |
1180 } | 1188 } |
1181 | 1189 |
1182 ProfileManager::ProfileInfo* ProfileManager::RegisterProfile( | 1190 ProfileManager::ProfileInfo* ProfileManager::RegisterProfile( |
1183 Profile* profile, | 1191 Profile* profile, |
1184 bool created) { | 1192 bool created) { |
| 1193 TRACE_EVENT0("browser", "ProfileManager::RegisterProfile"); |
1185 ProfileInfo* info = new ProfileInfo(profile, created); | 1194 ProfileInfo* info = new ProfileInfo(profile, created); |
1186 profiles_info_.insert( | 1195 profiles_info_.insert( |
1187 std::make_pair(profile->GetPath(), linked_ptr<ProfileInfo>(info))); | 1196 std::make_pair(profile->GetPath(), linked_ptr<ProfileInfo>(info))); |
1188 return info; | 1197 return info; |
1189 } | 1198 } |
1190 | 1199 |
1191 ProfileManager::ProfileInfo* ProfileManager::GetProfileInfoByPath( | 1200 ProfileManager::ProfileInfo* ProfileManager::GetProfileInfoByPath( |
1192 const base::FilePath& path) const { | 1201 const base::FilePath& path) const { |
1193 ProfilesInfoMap::const_iterator iter = profiles_info_.find(path); | 1202 ProfilesInfoMap::const_iterator iter = profiles_info_.find(path); |
1194 return (iter == profiles_info_.end()) ? NULL : iter->second.get(); | 1203 return (iter == profiles_info_.end()) ? NULL : iter->second.get(); |
1195 } | 1204 } |
1196 | 1205 |
1197 void ProfileManager::AddProfileToCache(Profile* profile) { | 1206 void ProfileManager::AddProfileToCache(Profile* profile) { |
| 1207 TRACE_EVENT0("browser", "ProfileManager::AddProfileToCache"); |
1198 if (profile->IsGuestSession() || profile->IsSystemProfile()) | 1208 if (profile->IsGuestSession() || profile->IsSystemProfile()) |
1199 return; | 1209 return; |
1200 ProfileInfoCache& cache = GetProfileInfoCache(); | 1210 ProfileInfoCache& cache = GetProfileInfoCache(); |
1201 if (profile->GetPath().DirName() != cache.GetUserDataDir()) | 1211 if (profile->GetPath().DirName() != cache.GetUserDataDir()) |
1202 return; | 1212 return; |
1203 | 1213 |
1204 SigninManagerBase* signin_manager = | 1214 SigninManagerBase* signin_manager = |
1205 SigninManagerFactory::GetForProfile(profile); | 1215 SigninManagerFactory::GetForProfile(profile); |
1206 base::string16 username = base::UTF8ToUTF16( | 1216 base::string16 username = base::UTF8ToUTF16( |
1207 signin_manager->GetAuthenticatedUsername()); | 1217 signin_manager->GetAuthenticatedUsername()); |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1368 last_non_supervised_profile_path.BaseName().MaybeAsASCII()); | 1378 last_non_supervised_profile_path.BaseName().MaybeAsASCII()); |
1369 FinishDeletingProfile(profile_to_delete_path); | 1379 FinishDeletingProfile(profile_to_delete_path); |
1370 } | 1380 } |
1371 } | 1381 } |
1372 } | 1382 } |
1373 #endif | 1383 #endif |
1374 | 1384 |
1375 ProfileManagerWithoutInit::ProfileManagerWithoutInit( | 1385 ProfileManagerWithoutInit::ProfileManagerWithoutInit( |
1376 const base::FilePath& user_data_dir) : ProfileManager(user_data_dir) { | 1386 const base::FilePath& user_data_dir) : ProfileManager(user_data_dir) { |
1377 } | 1387 } |
OLD | NEW |