Index: chrome/browser/profiles/profile_info_cache.cc |
diff --git a/chrome/browser/profiles/profile_info_cache.cc b/chrome/browser/profiles/profile_info_cache.cc |
index 8aaa047c963dfd8f409d9fe59c13bb508ecdfc4b..464f994ba19dd387961c0dccb15a6f24a9797a8a 100644 |
--- a/chrome/browser/profiles/profile_info_cache.cc |
+++ b/chrome/browser/profiles/profile_info_cache.cc |
@@ -169,13 +169,10 @@ ProfileInfoCache::ProfileInfoCache(PrefService* prefs, |
} |
} |
- // If needed, start downloading the high-res avatars. |
- if (switches::IsNewAvatarMenu()) { |
- for (size_t i = 0; i < GetNumberOfProfiles(); i++) { |
- DownloadHighResAvatar(GetAvatarIconIndexOfProfileAtIndex(i), |
- GetPathOfProfileAtIndex(i)); |
- } |
- } |
+ // If needed, start downloading the high-res avatars and migrate any legacy |
+ // profile names. |
+ if (switches::IsNewAvatarMenu()) |
+ MigrateLegacyProfileNamesAndDownloadAvatars(); |
} |
ProfileInfoCache::~ProfileInfoCache() { |
@@ -1067,3 +1064,47 @@ void ProfileInfoCache::OnAvatarPictureSaved( |
delete avatar_images_downloads_in_progress_[file_name]; |
avatar_images_downloads_in_progress_[file_name] = NULL; |
} |
+ |
+void ProfileInfoCache::MigrateLegacyProfileNamesAndDownloadAvatars() { |
+ DCHECK(switches::IsNewAvatarMenu()); |
+ |
+ // Only do this on desktop platforms. |
+#if defined(OS_ANDROID) || defined(OS_IOS) || defined(OS_CHROMEOS) |
+ return; |
+#endif |
Roger Tawa OOO till Jul 10th
2014/08/22 15:28:04
reverse condition and put #ifdef around all the co
noms (inactive)
2014/08/22 20:44:35
Done.
|
+ |
+ // Migrate any legacy profile names ("First user", "Default Profile") to |
+ // new style default names ("Person 1"). The problem here is that every |
+ // time you rename a profile, the ProfileInfoCache sorts itself, so |
+ // whatever you were iterating through is no longer valid. We need to |
+ // save a list of the profile paths (which thankfully do not change) that |
+ // need to be renamed. We also can't pre-compute the new names, as they |
+ // depend on the names of all the other profiles in the info cache, so they |
+ // need to be re-computed after each rename. |
+ std::vector<base::FilePath> profiles_to_rename; |
+ |
+ const base::string16 default_profile_name = base::i18n::ToLower( |
+ l10n_util::GetStringUTF16(IDS_DEFAULT_PROFILE_NAME)); |
+ const base::string16 default_legacy_profile_name = base::i18n::ToLower( |
+ l10n_util::GetStringUTF16(IDS_LEGACY_DEFAULT_PROFILE_NAME)); |
+ |
+ for (size_t i = 0; i < GetNumberOfProfiles(); i++) { |
+ // If needed, start downloading the high-res avatar for this profile. |
+ DownloadHighResAvatar(GetAvatarIconIndexOfProfileAtIndex(i), |
+ GetPathOfProfileAtIndex(i)); |
+ |
+ base::string16 name = base::i18n::ToLower(GetNameOfProfileAtIndex(i)); |
+ if (name == default_profile_name || name == default_legacy_profile_name) |
+ profiles_to_rename.push_back(GetPathOfProfileAtIndex(i)); |
+ } |
+ |
+ // Rename the necessary profiles. |
+ std::vector<base::FilePath>::const_iterator it; |
+ for (it = profiles_to_rename.begin(); it != profiles_to_rename.end(); ++it) { |
+ size_t profile_index = GetIndexOfProfileWithPath(*it); |
+ SetProfileIsUsingDefaultNameAtIndex(profile_index, true); |
+ // This will assign a new "Person %d" type name and re-sort the cache. |
+ SetNameOfProfileAtIndex(profile_index, ChooseNameForNewProfile( |
+ GetAvatarIconIndexOfProfileAtIndex(profile_index))); |
+ } |
+} |