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 0ae399f5310c4395719e44bcea6adb0de3df6d3d..b06aaaf79163211884753dd2dfe1f3d431b45122 100644 |
--- a/chrome/browser/profiles/profile_info_cache.cc |
+++ b/chrome/browser/profiles/profile_info_cache.cc |
@@ -44,6 +44,7 @@ const char kGAIANameKey[] = "gaia_name"; |
const char kGAIAGivenNameKey[] = "gaia_given_name"; |
const char kUseGAIANameKey[] = "use_gaia_name"; |
const char kUserNameKey[] = "user_name"; |
+const char kIsUsingDefaultName[] = "is_using_default_name"; |
const char kAvatarIconKey[] = "avatar_icon"; |
const char kAuthCredentialsKey[] = "local_auth_credentials"; |
const char kUseGAIAPictureKey[] = "use_gaia_picture"; |
@@ -173,6 +174,29 @@ void DeleteBitmap(const base::FilePath& image_path) { |
base::DeleteFile(image_path, false); |
} |
+bool IsDefaultName(const base::string16& name) { |
+ // Check if it's a "First user" old-style name. |
+ if (name == l10n_util::GetStringUTF16(IDS_DEFAULT_PROFILE_NAME)) |
+ return true; |
+ |
+ // Check if it's one of the old-style profile names. |
+ for (size_t i = 0; i < arraysize(kDefaultNames); ++i) { |
+ if (name == l10n_util::GetStringUTF16(kDefaultNames[i])) |
+ return true; |
+ } |
+ |
+ // Check whether it's one of the "Person %d" style names. |
+ std::string default_name_format = l10n_util::GetStringFUTF8( |
+ IDS_NEW_NUMBERED_PROFILE_NAME, base::string16()) + "%d"; |
+ |
+ int generic_profile_number; // Unused. Just a placeholder for sscanf. |
+ int assignments = sscanf(base::UTF16ToUTF8(name).c_str(), |
+ default_name_format.c_str(), |
+ &generic_profile_number); |
+ // Unless it matched the format, this is a custom name. |
+ return assignments == 1; |
+} |
+ |
} // namespace |
ProfileInfoCache::ProfileInfoCache(PrefService* prefs, |
@@ -196,6 +220,7 @@ ProfileInfoCache::ProfileInfoCache(PrefService* prefs, |
info->Remove(kIsManagedKey, NULL); |
info->SetString(kManagedUserId, is_managed ? "DUMMY_ID" : std::string()); |
} |
+ info->SetBoolean(kIsUsingDefaultName, IsDefaultName(name)); |
} |
} |
@@ -222,6 +247,7 @@ void ProfileInfoCache::AddProfileToCache(const base::FilePath& profile_path, |
info->SetString(kManagedUserId, managed_user_id); |
info->SetBoolean(kIsOmittedFromProfileListKey, !managed_user_id.empty()); |
info->SetBoolean(kProfileIsEphemeral, false); |
+ info->SetBoolean(kIsUsingDefaultName, IsDefaultName(name)); |
cache->SetWithoutPathExpansion(key, info.release()); |
sorted_keys_.insert(FindPositionForProfile(key, name), key); |
@@ -291,11 +317,13 @@ size_t ProfileInfoCache::GetIndexOfProfileWithPath( |
base::string16 ProfileInfoCache::GetNameOfProfileAtIndex(size_t index) const { |
base::string16 name; |
- if (IsUsingGAIANameOfProfileAtIndex(index)) { |
+ // Unless the user has customized the profile name, we should use the |
+ // profile's Gaia given name, if it's available. |
+ if (IsUsingGAIANameOfProfileAtIndex(index) && |
+ ProfileIsUsingDefaultNameAtIndex(index)) { |
base::string16 given_name = GetGAIAGivenNameOfProfileAtIndex(index); |
name = given_name.empty() ? GetGAIANameOfProfileAtIndex(index) : given_name; |
} |
- |
if (name.empty()) |
GetInfoForProfileAtIndex(index)->GetString(kNameKey, &name); |
return name; |
@@ -441,6 +469,12 @@ bool ProfileInfoCache::ProfileIsEphemeralAtIndex(size_t index) const { |
return value; |
} |
+bool ProfileInfoCache::ProfileIsUsingDefaultNameAtIndex(size_t index) const { |
+ bool value = false; |
+ GetInfoForProfileAtIndex(index)->GetBoolean(kIsUsingDefaultName, &value); |
+ return value; |
+} |
+ |
void ProfileInfoCache::OnGAIAPictureLoaded(const base::FilePath& path, |
gfx::Image** image) const { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
@@ -513,6 +547,8 @@ void ProfileInfoCache::SetNameOfProfileAtIndex(size_t index, |
base::string16 old_display_name = GetNameOfProfileAtIndex(index); |
info->SetString(kNameKey, name); |
+ info->SetBoolean(kIsUsingDefaultName, false); |
+ |
// This takes ownership of |info|. |
SetInfoForProfileAtIndex(index, info.release()); |
base::string16 new_display_name = GetNameOfProfileAtIndex(index); |
@@ -762,6 +798,18 @@ void ProfileInfoCache::SetProfileIsEphemeralAtIndex(size_t index, bool value) { |
SetInfoForProfileAtIndex(index, info.release()); |
} |
+void ProfileInfoCache::SetProfileIsUsingDefaultNameAtIndex( |
+ size_t index, bool value) { |
+ if (value == ProfileIsUsingDefaultNameAtIndex(index)) |
+ return; |
+ |
+ scoped_ptr<base::DictionaryValue> info( |
+ GetInfoForProfileAtIndex(index)->DeepCopy()); |
+ info->SetBoolean(kIsUsingDefaultName, value); |
+ // This takes ownership of |info|. |
+ SetInfoForProfileAtIndex(index, info.release()); |
+} |
+ |
base::string16 ProfileInfoCache::ChooseNameForNewProfile( |
size_t icon_index) const { |
base::string16 name; |