Index: chrome/browser/profiles/profile_manager.cc |
diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc |
index 67acac17bb9292879caed2b9e2b9722271896fc3..3ea9b0bbccbe047875f02cfc192acde7747665bd 100644 |
--- a/chrome/browser/profiles/profile_manager.cc |
+++ b/chrome/browser/profiles/profile_manager.cc |
@@ -31,6 +31,7 @@ |
#include "chrome/browser/password_manager/password_store_factory.h" |
#include "chrome/browser/prefs/incognito_mode_prefs.h" |
#include "chrome/browser/profiles/bookmark_model_loaded_observer.h" |
+#include "chrome/browser/profiles/profile_attributes_storage.h" |
#include "chrome/browser/profiles/profile_avatar_icon_util.h" |
#include "chrome/browser/profiles/profile_destroyer.h" |
#include "chrome/browser/profiles/profile_info_cache.h" |
@@ -649,6 +650,10 @@ ProfileInfoCache& ProfileManager::GetProfileInfoCache() { |
return *profile_info_cache_.get(); |
} |
+ProfileAttributesStorage& ProfileManager::GetProfileAttributesStorage() { |
+ return GetProfileInfoCache(); |
+} |
+ |
ProfileShortcutManager* ProfileManager::profile_shortcut_manager() { |
return profile_shortcut_manager_.get(); |
} |
@@ -810,16 +815,13 @@ void ProfileManager::InitProfileUserPrefs(Profile* profile) { |
profile_name = l10n_util::GetStringUTF8(IDS_PROFILES_GUEST_PROFILE_NAME); |
avatar_index = 0; |
} else { |
- size_t profile_cache_index = |
- cache.GetIndexOfProfileWithPath(profile->GetPath()); |
+ ProfileAttributesEntry* entry; |
// If the cache has an entry for this profile, use the cache data. |
- if (profile_cache_index != std::string::npos) { |
- avatar_index = |
- cache.GetAvatarIconIndexOfProfileAtIndex(profile_cache_index); |
- profile_name = |
- base::UTF16ToUTF8(cache.GetNameOfProfileAtIndex(profile_cache_index)); |
- supervised_user_id = |
- cache.GetSupervisedUserIdOfProfileAtIndex(profile_cache_index); |
+ if (GetProfileAttributesStorage().GetProfileAttributesWithPath( |
+ profile->GetPath(), &entry)) { |
+ avatar_index = entry->GetAvatarIconIndex(); |
+ profile_name = base::UTF16ToUTF8(entry->GetName()); |
+ supervised_user_id = entry->GetSupervisedUserId(); |
} else if (profile->GetPath() == |
profiles::GetDefaultProfileDir(cache.GetUserDataDir())) { |
// The --new-avatar-menu flag no longer uses the "First User" name. |
@@ -1054,7 +1056,6 @@ void ProfileManager::DoFinalInitForServices(Profile* profile, |
TRACK_SCOPED_REGION("Startup", "ProfileManager::DoFinalInitForServices"); |
#if defined(ENABLE_EXTENSIONS) |
- ProfileInfoCache& cache = GetProfileInfoCache(); |
extensions::ExtensionSystem::Get(profile)->InitForRegularProfile( |
!go_off_the_record); |
// During tests, when |profile| is an instance of TestingProfile, |
@@ -1065,9 +1066,10 @@ void ProfileManager::DoFinalInitForServices(Profile* profile, |
} |
// Set the block extensions bit on the ExtensionService. There likely are no |
// blockable extensions to block. |
- size_t profile_index = cache.GetIndexOfProfileWithPath(profile->GetPath()); |
- if (profile_index != std::string::npos && |
- cache.ProfileIsSigninRequiredAtIndex(profile_index)) { |
+ ProfileAttributesStorage& storage = GetProfileAttributesStorage(); |
+ ProfileAttributesEntry* entry; |
+ if (storage.GetProfileAttributesWithPath(profile->GetPath(), &entry) && |
+ entry->IsSigninRequired()) { |
extensions::ExtensionSystem::Get(profile) |
->extension_service() |
->BlockAllExtensions(); |
@@ -1219,10 +1221,13 @@ void ProfileManager::FinishDeletingProfile( |
profiles::SetLastUsedProfile( |
new_active_profile_dir.BaseName().MaybeAsASCII()); |
- ProfileInfoCache& cache = GetProfileInfoCache(); |
// TODO(sail): Due to bug 88586 we don't delete the profile instance. Once we |
// start deleting the profile instance we need to close background apps too. |
Profile* profile = GetProfileByPath(profile_dir); |
+ ProfileAttributesStorage& storage = GetProfileAttributesStorage(); |
+ ProfileAttributesEntry* entry; |
+ bool profile_in_storage = |
+ storage.GetProfileAttributesWithPath(profile_dir, &entry); |
if (profile) { |
// TODO: Migrate additional code in this block to observe this notification |
@@ -1245,8 +1250,9 @@ void ProfileManager::FinishDeletingProfile( |
profile)->RequestStop(ProfileSyncService::CLEAR_DATA); |
} |
- ProfileMetrics::LogProfileDelete(cache.ProfileIsAuthenticatedAtIndex( |
- cache.GetIndexOfProfileWithPath(profile_dir))); |
+ |
+ if (profile_in_storage) |
+ ProfileMetrics::LogProfileDelete(entry->IsAuthenticated()); |
// Some platforms store passwords in keychains. They should be removed. |
scoped_refptr<password_manager::PasswordStore> password_store = |
PasswordStoreFactory::GetForProfile( |
@@ -1269,7 +1275,8 @@ void ProfileManager::FinishDeletingProfile( |
// Queue even a profile that was nuked so it will be MarkedForDeletion and so |
// CreateProfileAsync can't create it. |
QueueProfileDirectoryForDeletion(profile_dir); |
- cache.DeleteProfileFromCache(profile_dir); |
+ if (profile_in_storage) |
Mike Lerman
2015/08/06 16:06:19
Why do we need this caution now? How are we ever t
|
+ storage.RemoveProfile(profile_dir); |
ProfileMetrics::UpdateReportedProfilesStatistics(this); |
} |
@@ -1306,11 +1313,11 @@ void ProfileManager::AddProfileToCache(Profile* profile) { |
signin_manager->GetAuthenticatedAccountId()); |
base::string16 username = base::UTF8ToUTF16(account_info.email); |
- size_t profile_index = cache.GetIndexOfProfileWithPath(profile->GetPath()); |
- if (profile_index != std::string::npos) { |
+ ProfileAttributesStorage& storage = GetProfileAttributesStorage(); |
+ ProfileAttributesEntry* entry; |
+ if (storage.GetProfileAttributesWithPath(profile->GetPath(), &entry)) { |
// The ProfileInfoCache's info must match the Signin Manager. |
- cache.SetAuthInfoOfProfileAtIndex(profile_index, account_info.gaia, |
- username); |
+ entry->SetAuthInfo(account_info.gaia, username); |
return; |
} |
@@ -1325,16 +1332,21 @@ void ProfileManager::AddProfileToCache(Profile* profile) { |
std::string supervised_user_id = |
profile->GetPrefs()->GetString(prefs::kSupervisedUserId); |
- cache.AddProfileToCache(profile->GetPath(), |
- profile_name, |
- account_info.gaia, |
- username, |
- icon_index, |
- supervised_user_id); |
+ storage.AddProfile(profile->GetPath(), |
+ profile_name, |
+ account_info.gaia, |
+ username, |
+ icon_index, |
+ supervised_user_id); |
+ |
+ ProfileAttributesEntry* new_entry = nullptr; |
+ if (!storage.GetProfileAttributesWithPath(profile->GetPath(), &new_entry)) { |
+ NOTREACHED(); |
Mike Lerman
2015/08/06 16:06:19
Can you add some descriptive comment at this NOTRE
|
+ return; |
+ } |
if (profile->GetPrefs()->GetBoolean(prefs::kForceEphemeralProfiles)) { |
Mike Lerman
2015/08/06 16:06:20
nit: no {}.
Can even just write new_entry->SetIsE
|
- cache.SetProfileIsEphemeralAtIndex( |
- cache.GetIndexOfProfileWithPath(profile->GetPath()), true); |
+ new_entry->SetIsEphemeral(true); |
} |
} |
@@ -1386,19 +1398,18 @@ void ProfileManager::UpdateLastUser(Profile* last_active) { |
if (profile_path_base != GetLastUsedProfileName()) |
profiles::SetLastUsedProfile(profile_path_base); |
- ProfileInfoCache& cache = GetProfileInfoCache(); |
- size_t profile_index = |
- cache.GetIndexOfProfileWithPath(last_active->GetPath()); |
- if (profile_index != std::string::npos) { |
+ ProfileAttributesStorage& storage = GetProfileAttributesStorage(); |
+ ProfileAttributesEntry* entry; |
+ |
+ if (storage.GetProfileAttributesWithPath(last_active->GetPath(), &entry)) { |
#if !defined(OS_CHROMEOS) |
// Incognito Profiles don't have ProfileKeyedServices. |
if (!last_active->IsOffTheRecord()) { |
CrossDevicePromoFactory::GetForProfile(last_active) |
- ->MaybeBrowsingSessionStarted( |
- cache.GetProfileActiveTimeAtIndex(profile_index)); |
+ ->MaybeBrowsingSessionStarted(entry->GetActiveTime()); |
} |
#endif |
- cache.SetProfileActiveTimeAtIndex(profile_index); |
+ entry->SetActiveTime(); |
} |
} |
} |