Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(418)

Side by Side Diff: chrome/browser/profiles/profile_info_cache.cc

Issue 476993002: [Profiles] Fix the usage of custom/default names and avatars (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: all rebase all the time Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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_info_cache.h" 5 #include "chrome/browser/profiles/profile_info_cache.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/i18n/case_conversion.h" 9 #include "base/i18n/case_conversion.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 } 130 }
131 131
132 *out_image = new gfx::Image(image); 132 *out_image = new gfx::Image(image);
133 } 133 }
134 134
135 void DeleteBitmap(const base::FilePath& image_path) { 135 void DeleteBitmap(const base::FilePath& image_path) {
136 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 136 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
137 base::DeleteFile(image_path, false); 137 base::DeleteFile(image_path, false);
138 } 138 }
139 139
140 bool IsDefaultName(const base::string16& name) {
141 // Check if it's a "First user" old-style name.
142 if (name == l10n_util::GetStringUTF16(IDS_DEFAULT_PROFILE_NAME) ||
143 name == l10n_util::GetStringUTF16(IDS_LEGACY_DEFAULT_PROFILE_NAME))
144 return true;
145
146 // Check if it's one of the old-style profile names.
147 for (size_t i = 0; i < arraysize(kDefaultNames); ++i) {
148 if (name == l10n_util::GetStringUTF16(kDefaultNames[i]))
149 return true;
150 }
151
152 // Check whether it's one of the "Person %d" style names.
153 std::string default_name_format = l10n_util::GetStringFUTF8(
154 IDS_NEW_NUMBERED_PROFILE_NAME, base::string16()) + "%d";
155
156 int generic_profile_number; // Unused. Just a placeholder for sscanf.
157 int assignments = sscanf(base::UTF16ToUTF8(name).c_str(),
158 default_name_format.c_str(),
159 &generic_profile_number);
160 // Unless it matched the format, this is a custom name.
161 return assignments == 1;
162 }
163
164 } // namespace 140 } // namespace
165 141
166 ProfileInfoCache::ProfileInfoCache(PrefService* prefs, 142 ProfileInfoCache::ProfileInfoCache(PrefService* prefs,
167 const base::FilePath& user_data_dir) 143 const base::FilePath& user_data_dir)
168 : prefs_(prefs), 144 : prefs_(prefs),
169 user_data_dir_(user_data_dir) { 145 user_data_dir_(user_data_dir) {
170 // Populate the cache 146 // Populate the cache
171 DictionaryPrefUpdate update(prefs_, prefs::kProfileInfoCache); 147 DictionaryPrefUpdate update(prefs_, prefs::kProfileInfoCache);
172 base::DictionaryValue* cache = update.Get(); 148 base::DictionaryValue* cache = update.Get();
173 for (base::DictionaryValue::Iterator it(*cache); 149 for (base::DictionaryValue::Iterator it(*cache);
174 !it.IsAtEnd(); it.Advance()) { 150 !it.IsAtEnd(); it.Advance()) {
175 base::DictionaryValue* info = NULL; 151 base::DictionaryValue* info = NULL;
176 cache->GetDictionaryWithoutPathExpansion(it.key(), &info); 152 cache->GetDictionaryWithoutPathExpansion(it.key(), &info);
177 base::string16 name; 153 base::string16 name;
178 info->GetString(kNameKey, &name); 154 info->GetString(kNameKey, &name);
179 sorted_keys_.insert(FindPositionForProfile(it.key(), name), it.key()); 155 sorted_keys_.insert(FindPositionForProfile(it.key(), name), it.key());
180 bool using_default_name = IsDefaultName(name); 156
181 info->SetBoolean(kIsUsingDefaultNameKey, using_default_name); 157 bool using_default_name;
158 if (!info->GetBoolean(kIsUsingDefaultNameKey, &using_default_name)) {
159 // If the preference hasn't been set, and the name is default, assume
160 // that the user hasn't done this on purpose.
161 using_default_name = IsDefaultProfileName(name);
162 info->SetBoolean(kIsUsingDefaultNameKey, using_default_name);
163 }
164
182 // For profiles that don't have the "using default avatar" state set yet, 165 // For profiles that don't have the "using default avatar" state set yet,
183 // assume it's the same as the "using default name" state. 166 // assume it's the same as the "using default name" state.
184 if (!info->HasKey(kIsUsingDefaultAvatarKey)) { 167 if (!info->HasKey(kIsUsingDefaultAvatarKey)) {
185 info->SetBoolean(kIsUsingDefaultAvatarKey, using_default_name); 168 info->SetBoolean(kIsUsingDefaultAvatarKey, using_default_name);
186 } 169 }
187 } 170 }
188 171
189 // If needed, start downloading the high-res avatars. 172 // If needed, start downloading the high-res avatars.
190 if (switches::IsNewAvatarMenu()) { 173 if (switches::IsNewAvatarMenu()) {
191 for (size_t i = 0; i < GetNumberOfProfiles(); i++) { 174 for (size_t i = 0; i < GetNumberOfProfiles(); i++) {
(...skipping 24 matching lines...) Expand all
216 scoped_ptr<base::DictionaryValue> info(new base::DictionaryValue); 199 scoped_ptr<base::DictionaryValue> info(new base::DictionaryValue);
217 info->SetString(kNameKey, name); 200 info->SetString(kNameKey, name);
218 info->SetString(kUserNameKey, username); 201 info->SetString(kUserNameKey, username);
219 info->SetString(kAvatarIconKey, 202 info->SetString(kAvatarIconKey,
220 profiles::GetDefaultAvatarIconUrl(icon_index)); 203 profiles::GetDefaultAvatarIconUrl(icon_index));
221 // Default value for whether background apps are running is false. 204 // Default value for whether background apps are running is false.
222 info->SetBoolean(kBackgroundAppsKey, false); 205 info->SetBoolean(kBackgroundAppsKey, false);
223 info->SetString(kSupervisedUserId, supervised_user_id); 206 info->SetString(kSupervisedUserId, supervised_user_id);
224 info->SetBoolean(kIsOmittedFromProfileListKey, !supervised_user_id.empty()); 207 info->SetBoolean(kIsOmittedFromProfileListKey, !supervised_user_id.empty());
225 info->SetBoolean(kProfileIsEphemeral, false); 208 info->SetBoolean(kProfileIsEphemeral, false);
226 info->SetBoolean(kIsUsingDefaultNameKey, IsDefaultName(name)); 209 info->SetBoolean(kIsUsingDefaultNameKey, IsDefaultProfileName(name));
227 // Assume newly created profiles use a default avatar. 210 // Assume newly created profiles use a default avatar.
228 info->SetBoolean(kIsUsingDefaultAvatarKey, true); 211 info->SetBoolean(kIsUsingDefaultAvatarKey, true);
229 cache->SetWithoutPathExpansion(key, info.release()); 212 cache->SetWithoutPathExpansion(key, info.release());
230 213
231 sorted_keys_.insert(FindPositionForProfile(key, name), key); 214 sorted_keys_.insert(FindPositionForProfile(key, name), key);
232 215
233 if (switches::IsNewAvatarMenu()) 216 if (switches::IsNewAvatarMenu())
234 DownloadHighResAvatar(icon_index, profile_path); 217 DownloadHighResAvatar(icon_index, profile_path);
235 218
236 FOR_EACH_OBSERVER(ProfileInfoCacheObserver, 219 FOR_EACH_OBSERVER(ProfileInfoCacheObserver,
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
482 const base::string16& name) { 465 const base::string16& name) {
483 scoped_ptr<base::DictionaryValue> info( 466 scoped_ptr<base::DictionaryValue> info(
484 GetInfoForProfileAtIndex(index)->DeepCopy()); 467 GetInfoForProfileAtIndex(index)->DeepCopy());
485 base::string16 current_name; 468 base::string16 current_name;
486 info->GetString(kNameKey, &current_name); 469 info->GetString(kNameKey, &current_name);
487 if (name == current_name) 470 if (name == current_name)
488 return; 471 return;
489 472
490 base::string16 old_display_name = GetNameOfProfileAtIndex(index); 473 base::string16 old_display_name = GetNameOfProfileAtIndex(index);
491 info->SetString(kNameKey, name); 474 info->SetString(kNameKey, name);
492 info->SetBoolean(kIsUsingDefaultNameKey, false);
493 475
494 // This takes ownership of |info|. 476 // This takes ownership of |info|.
495 SetInfoForProfileAtIndex(index, info.release()); 477 SetInfoForProfileAtIndex(index, info.release());
478
496 base::string16 new_display_name = GetNameOfProfileAtIndex(index); 479 base::string16 new_display_name = GetNameOfProfileAtIndex(index);
497 base::FilePath profile_path = GetPathOfProfileAtIndex(index); 480 base::FilePath profile_path = GetPathOfProfileAtIndex(index);
498 UpdateSortForProfileIndex(index); 481 UpdateSortForProfileIndex(index);
499 482
500 if (old_display_name != new_display_name) { 483 if (old_display_name != new_display_name) {
501 FOR_EACH_OBSERVER(ProfileInfoCacheObserver, 484 FOR_EACH_OBSERVER(ProfileInfoCacheObserver,
502 observer_list_, 485 observer_list_,
503 OnProfileNameChanged(profile_path, old_display_name)); 486 OnProfileNameChanged(profile_path, old_display_name));
504 } 487 }
505 } 488 }
(...skipping 25 matching lines...) Expand all
531 514
532 void ProfileInfoCache::SetAvatarIconOfProfileAtIndex(size_t index, 515 void ProfileInfoCache::SetAvatarIconOfProfileAtIndex(size_t index,
533 size_t icon_index) { 516 size_t icon_index) {
534 scoped_ptr<base::DictionaryValue> info( 517 scoped_ptr<base::DictionaryValue> info(
535 GetInfoForProfileAtIndex(index)->DeepCopy()); 518 GetInfoForProfileAtIndex(index)->DeepCopy());
536 info->SetString(kAvatarIconKey, 519 info->SetString(kAvatarIconKey,
537 profiles::GetDefaultAvatarIconUrl(icon_index)); 520 profiles::GetDefaultAvatarIconUrl(icon_index));
538 // This takes ownership of |info|. 521 // This takes ownership of |info|.
539 SetInfoForProfileAtIndex(index, info.release()); 522 SetInfoForProfileAtIndex(index, info.release());
540 523
541 SetProfileIsUsingDefaultAvatarAtIndex(index, false);
542
543 base::FilePath profile_path = GetPathOfProfileAtIndex(index); 524 base::FilePath profile_path = GetPathOfProfileAtIndex(index);
544 525
545 // If needed, start downloading the high-res avatar. 526 // If needed, start downloading the high-res avatar.
546 if (switches::IsNewAvatarMenu()) 527 if (switches::IsNewAvatarMenu())
547 DownloadHighResAvatar(icon_index, profile_path); 528 DownloadHighResAvatar(icon_index, profile_path);
548 529
549 FOR_EACH_OBSERVER(ProfileInfoCacheObserver, 530 FOR_EACH_OBSERVER(ProfileInfoCacheObserver,
550 observer_list_, 531 observer_list_,
551 OnProfileAvatarChanged(profile_path)); 532 OnProfileAvatarChanged(profile_path));
552 } 533 }
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
751 if (value == ProfileIsUsingDefaultAvatarAtIndex(index)) 732 if (value == ProfileIsUsingDefaultAvatarAtIndex(index))
752 return; 733 return;
753 734
754 scoped_ptr<base::DictionaryValue> info( 735 scoped_ptr<base::DictionaryValue> info(
755 GetInfoForProfileAtIndex(index)->DeepCopy()); 736 GetInfoForProfileAtIndex(index)->DeepCopy());
756 info->SetBoolean(kIsUsingDefaultAvatarKey, value); 737 info->SetBoolean(kIsUsingDefaultAvatarKey, value);
757 // This takes ownership of |info|. 738 // This takes ownership of |info|.
758 SetInfoForProfileAtIndex(index, info.release()); 739 SetInfoForProfileAtIndex(index, info.release());
759 } 740 }
760 741
742 bool ProfileInfoCache::IsDefaultProfileName(const base::string16& name) {
743 // Check if it's a "First user" old-style name.
744 if (name == l10n_util::GetStringUTF16(IDS_DEFAULT_PROFILE_NAME) ||
745 name == l10n_util::GetStringUTF16(IDS_LEGACY_DEFAULT_PROFILE_NAME))
746 return true;
747
748 // Check if it's one of the old-style profile names.
749 for (size_t i = 0; i < arraysize(kDefaultNames); ++i) {
750 if (name == l10n_util::GetStringUTF16(kDefaultNames[i]))
751 return true;
752 }
753
754 // Check whether it's one of the "Person %d" style names.
755 std::string default_name_format = l10n_util::GetStringFUTF8(
756 IDS_NEW_NUMBERED_PROFILE_NAME, base::ASCIIToUTF16("%d"));
757
758 int generic_profile_number; // Unused. Just a placeholder for sscanf.
759 int assignments = sscanf(base::UTF16ToUTF8(name).c_str(),
760 default_name_format.c_str(),
761 &generic_profile_number);
762 // Unless it matched the format, this is a custom name.
763 return assignments == 1;
764 }
765
761 base::string16 ProfileInfoCache::ChooseNameForNewProfile( 766 base::string16 ProfileInfoCache::ChooseNameForNewProfile(
762 size_t icon_index) const { 767 size_t icon_index) const {
763 base::string16 name; 768 base::string16 name;
764 for (int name_index = 1; ; ++name_index) { 769 for (int name_index = 1; ; ++name_index) {
765 if (switches::IsNewAvatarMenu()) { 770 if (switches::IsNewAvatarMenu()) {
766 name = l10n_util::GetStringFUTF16Int(IDS_NEW_NUMBERED_PROFILE_NAME, 771 name = l10n_util::GetStringFUTF16Int(IDS_NEW_NUMBERED_PROFILE_NAME,
767 name_index); 772 name_index);
768 } else if (icon_index < profiles::GetGenericAvatarIconCount()) { 773 } else if (icon_index < profiles::GetGenericAvatarIconCount()) {
769 name = l10n_util::GetStringFUTF16Int(IDS_NUMBERED_PROFILE_NAME, 774 name = l10n_util::GetStringFUTF16Int(IDS_NUMBERED_PROFILE_NAME,
770 name_index); 775 name_index);
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
1055 OnProfileAvatarChanged(profile_path)); 1060 OnProfileAvatarChanged(profile_path));
1056 1061
1057 // Remove the file from the list of downloads in progress. Note that this list 1062 // Remove the file from the list of downloads in progress. Note that this list
1058 // only contains the high resolution avatars, and not the Gaia profile images. 1063 // only contains the high resolution avatars, and not the Gaia profile images.
1059 if (!avatar_images_downloads_in_progress_[file_name]) 1064 if (!avatar_images_downloads_in_progress_[file_name])
1060 return; 1065 return;
1061 1066
1062 delete avatar_images_downloads_in_progress_[file_name]; 1067 delete avatar_images_downloads_in_progress_[file_name];
1063 avatar_images_downloads_in_progress_[file_name] = NULL; 1068 avatar_images_downloads_in_progress_[file_name] = NULL;
1064 } 1069 }
OLDNEW
« no previous file with comments | « chrome/browser/profiles/profile_info_cache.h ('k') | chrome/browser/profiles/profile_info_cache_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698