Chromium Code Reviews| Index: chrome/browser/profiles/profile_shortcut_manager_win.cc |
| diff --git a/chrome/browser/profiles/profile_shortcut_manager_win.cc b/chrome/browser/profiles/profile_shortcut_manager_win.cc |
| index 9db08f1a2081df10cf51e98b8e2ac5f9c8e47005..14d64cc80418ae54cfd53303287bacb979b5f0e9 100644 |
| --- a/chrome/browser/profiles/profile_shortcut_manager_win.cc |
| +++ b/chrome/browser/profiles/profile_shortcut_manager_win.cc |
| @@ -23,6 +23,8 @@ |
| #include "chrome/browser/app_icon_win.h" |
| #include "chrome/browser/browser_process.h" |
| #include "chrome/browser/chrome_notification_types.h" |
| +#include "chrome/browser/profiles/profile_attributes_entry.h" |
| +#include "chrome/browser/profiles/profile_attributes_storage.h" |
| #include "chrome/browser/profiles/profile_avatar_icon_util.h" |
| #include "chrome/browser/profiles/profile_info_cache_observer.h" |
| #include "chrome/browser/profiles/profile_manager.h" |
| @@ -664,11 +666,11 @@ ProfileShortcutManagerWin::ProfileShortcutManagerWin(ProfileManager* manager) |
| registrar_.Add(this, chrome::NOTIFICATION_PROFILE_CREATED, |
| content::NotificationService::AllSources()); |
| - profile_manager_->GetProfileInfoCache().AddObserver(this); |
| + profile_manager_->GetProfileAttributesStorage().AddObserver(this); |
| } |
| ProfileShortcutManagerWin::~ProfileShortcutManagerWin() { |
| - profile_manager_->GetProfileInfoCache().RemoveObserver(this); |
| + profile_manager_->GetProfileAttributesStorage().RemoveObserver(this); |
| } |
| void ProfileShortcutManagerWin::CreateOrUpdateProfileIcon( |
| @@ -710,14 +712,18 @@ void ProfileShortcutManagerWin::GetShortcutProperties( |
| return; |
| } |
| - const ProfileInfoCache& cache = profile_manager_->GetProfileInfoCache(); |
| - size_t profile_index = cache.GetIndexOfProfileWithPath(profile_path); |
| - DCHECK_LT(profile_index, cache.GetNumberOfProfiles()); |
| + ProfileAttributesStorage& storage = |
| + profile_manager_->GetProfileAttributesStorage(); |
| + ProfileAttributesEntry* entry; |
| + if (!storage.GetProfileAttributesWithPath(profile_path, &entry)) { |
|
Mike Lerman
2015/08/06 16:06:20
Isn't this equivalent to DCHECK(storage.GetProfile
|
| + NOTREACHED(); |
| + return; |
| + } |
| // The used profile name should be empty if there is only 1 profile. |
| base::string16 shortcut_profile_name; |
| - if (cache.GetNumberOfProfiles() > 1) |
| - shortcut_profile_name = cache.GetNameOfProfileAtIndex(profile_index); |
| + if (storage.GetNumberOfProfiles() > 1) |
| + shortcut_profile_name = entry->GetName(); |
| *name = base::FilePath(profiles::internal::GetShortcutFilenameForProfile( |
| shortcut_profile_name, |
| @@ -732,7 +738,8 @@ void ProfileShortcutManagerWin::GetShortcutProperties( |
| void ProfileShortcutManagerWin::OnProfileAdded( |
| const base::FilePath& profile_path) { |
| CreateOrUpdateProfileIcon(profile_path); |
| - if (profile_manager_->GetProfileInfoCache().GetNumberOfProfiles() == 2) { |
| + if (profile_manager_->GetProfileAttributesStorage(). |
| + GetNumberOfProfiles() == 2) { |
| // When the second profile is added, make existing non-profile shortcuts |
| // point to the first profile and be badged/named appropriately. |
| CreateOrUpdateShortcutsForProfileAtPath(GetOtherProfilePath(profile_path), |
| @@ -744,13 +751,19 @@ void ProfileShortcutManagerWin::OnProfileAdded( |
| void ProfileShortcutManagerWin::OnProfileWasRemoved( |
| const base::FilePath& profile_path, |
| const base::string16& profile_name) { |
| - const ProfileInfoCache& cache = profile_manager_->GetProfileInfoCache(); |
| + ProfileAttributesStorage& storage = |
| + profile_manager_->GetProfileAttributesStorage(); |
| // If there is only one profile remaining, remove the badging information |
| // from an existing shortcut. |
| - const bool deleting_down_to_last_profile = (cache.GetNumberOfProfiles() == 1); |
| + const bool deleting_down_to_last_profile = storage.GetNumberOfProfiles() == 1; |
| + |
| if (deleting_down_to_last_profile) { |
| + // The remaining profile should be the last one still in |storage|. |
| + std::vector<ProfileAttributesEntry*> entries = |
| + storage.GetAllProfilesAttributes(); |
| + DCHECK_EQ(1U, entries.size()); |
|
Mike Lerman
2015/08/06 16:06:20
We're only in this condition if NumberOfProfiles()
|
| // This is needed to unbadge the icon. |
| - CreateOrUpdateShortcutsForProfileAtPath(cache.GetPathOfProfileAtIndex(0), |
| + CreateOrUpdateShortcutsForProfileAtPath(entries[0]->GetPath(), |
| UPDATE_EXISTING_ONLY, |
| IGNORE_NON_PROFILE_SHORTCUTS); |
| } |
| @@ -775,13 +788,24 @@ void ProfileShortcutManagerWin::OnProfileAvatarChanged( |
| base::FilePath ProfileShortcutManagerWin::GetOtherProfilePath( |
| const base::FilePath& profile_path) { |
| - const ProfileInfoCache& cache = profile_manager_->GetProfileInfoCache(); |
| - DCHECK_EQ(2U, cache.GetNumberOfProfiles()); |
| + ProfileAttributesStorage& storage = |
| + profile_manager_->GetProfileAttributesStorage(); |
| + DCHECK_EQ(2U, storage.GetNumberOfProfiles()); |
| // Get the index of the current profile, in order to find the index of the |
| // other profile. |
| - size_t current_profile_index = cache.GetIndexOfProfileWithPath(profile_path); |
| - size_t other_profile_index = (current_profile_index == 0) ? 1 : 0; |
| - return cache.GetPathOfProfileAtIndex(other_profile_index); |
| + ProfileAttributesEntry* current_entry; |
|
Mike Lerman
2015/08/06 16:06:20
I don't think you need all the extra checks. I thi
|
| + if (!storage.GetProfileAttributesWithPath(profile_path, ¤t_entry)) { |
| + NOTREACHED(); |
| + return base::FilePath(); |
| + } |
| + |
| + std::vector<ProfileAttributesEntry*> entries = |
| + storage.GetAllProfilesAttributes(); |
| + DCHECK_EQ(2U, entries.size()); |
|
Mike Lerman
2015/08/06 16:06:20
you checked number of profiles == 2 at line 793, d
|
| + ProfileAttributesEntry* other_entry = |
| + entries[0]->GetPath() == current_entry->GetPath() ? |
| + entries[1] : entries[0]; |
| + return other_entry->GetPath(); |
| } |
| void ProfileShortcutManagerWin::CreateOrUpdateShortcutsForProfileAtPath( |
| @@ -792,14 +816,15 @@ void ProfileShortcutManagerWin::CreateOrUpdateShortcutsForProfileAtPath( |
| BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| CreateOrUpdateShortcutsParams params(profile_path, create_mode, action); |
| - ProfileInfoCache* cache = &profile_manager_->GetProfileInfoCache(); |
| - size_t profile_index = cache->GetIndexOfProfileWithPath(profile_path); |
| - if (profile_index == std::string::npos) |
| + ProfileAttributesStorage& storage = |
| + profile_manager_->GetProfileAttributesStorage(); |
| + ProfileAttributesEntry* entry; |
| + if (!storage.GetProfileAttributesWithPath(profile_path, &entry)) { |
|
Mike Lerman
2015/08/06 16:06:20
{ curlies }?
|
| return; |
| - bool remove_badging = cache->GetNumberOfProfiles() == 1; |
| + } |
| + bool remove_badging = storage.GetNumberOfProfiles() == 1; |
| - params.old_profile_name = |
| - cache->GetShortcutNameOfProfileAtIndex(profile_index); |
| + params.old_profile_name = entry->GetShortcutName(); |
| // Exit early if the mode is to update existing profile shortcuts only and |
| // none were ever created for this profile, per the shortcut name not being |
| @@ -811,14 +836,13 @@ void ProfileShortcutManagerWin::CreateOrUpdateShortcutsForProfileAtPath( |
| } |
| if (!remove_badging) { |
| - params.profile_name = cache->GetNameOfProfileAtIndex(profile_index); |
| + params.profile_name = entry->GetName(); |
| // The profile might be using the Gaia avatar, which is not in the |
| // resources array. |
| bool has_gaia_image = false; |
| - if (cache->IsUsingGAIAPictureOfProfileAtIndex(profile_index)) { |
| - const gfx::Image* image = |
| - cache->GetGAIAPictureOfProfileAtIndex(profile_index); |
| + if (entry->IsUsingGAIAPicture()) { |
| + const gfx::Image* image = entry->GetGAIAPicture(); |
| if (image) { |
| params.avatar_image_1x = GetSkBitmapCopy(*image); |
| // Gaia images are 256px, which makes them big enough to use in the |
| @@ -832,8 +856,7 @@ void ProfileShortcutManagerWin::CreateOrUpdateShortcutsForProfileAtPath( |
| // If the profile isn't using a Gaia image, or if the Gaia image did not |
| // exist, revert to the previously used avatar icon. |
| if (!has_gaia_image) { |
| - const size_t icon_index = |
| - cache->GetAvatarIconIndexOfProfileAtIndex(profile_index); |
| + const size_t icon_index = entry->GetAvatarIconIndex(); |
| const int resource_id_1x = |
| profiles::GetDefaultAvatarIconResourceIDAtIndex(icon_index); |
| const int resource_id_2x = kProfileAvatarIconResources2x[icon_index]; |
| @@ -847,8 +870,7 @@ void ProfileShortcutManagerWin::CreateOrUpdateShortcutsForProfileAtPath( |
| BrowserThread::FILE, FROM_HERE, |
| base::Bind(&CreateOrUpdateDesktopShortcutsAndIconForProfile, params)); |
| - cache->SetShortcutNameOfProfileAtIndex(profile_index, |
| - params.profile_name); |
| + entry->SetShortcutName(params.profile_name); |
| } |
| void ProfileShortcutManagerWin::Observe( |