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

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

Issue 210043005: [Profiles] Use high resolution avatars if they exist (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 9 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
« no previous file with comments | « chrome/browser/profiles/profile_info_cache.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/format_macros.h" 9 #include "base/format_macros.h"
10 #include "base/i18n/case_conversion.h" 10 #include "base/i18n/case_conversion.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/scoped_ptr.h"
13 #include "base/path_service.h"
13 #include "base/prefs/pref_registry_simple.h" 14 #include "base/prefs/pref_registry_simple.h"
14 #include "base/prefs/pref_service.h" 15 #include "base/prefs/pref_service.h"
15 #include "base/prefs/scoped_user_pref_update.h" 16 #include "base/prefs/scoped_user_pref_update.h"
16 #include "base/rand_util.h" 17 #include "base/rand_util.h"
17 #include "base/stl_util.h" 18 #include "base/stl_util.h"
18 #include "base/strings/string_number_conversions.h" 19 #include "base/strings/string_number_conversions.h"
19 #include "base/strings/string_piece.h" 20 #include "base/strings/string_piece.h"
20 #include "base/strings/stringprintf.h" 21 #include "base/strings/stringprintf.h"
21 #include "base/strings/utf_string_conversions.h" 22 #include "base/strings/utf_string_conversions.h"
22 #include "base/values.h" 23 #include "base/values.h"
23 #include "chrome/browser/browser_process.h" 24 #include "chrome/browser/browser_process.h"
24 #include "chrome/browser/chrome_notification_types.h" 25 #include "chrome/browser/chrome_notification_types.h"
26 #include "chrome/common/chrome_paths.h"
25 #include "chrome/common/pref_names.h" 27 #include "chrome/common/pref_names.h"
26 #include "chrome/common/profile_management_switches.h" 28 #include "chrome/common/profile_management_switches.h"
27 #include "content/public/browser/browser_thread.h" 29 #include "content/public/browser/browser_thread.h"
28 #include "content/public/browser/notification_service.h" 30 #include "content/public/browser/notification_service.h"
29 #include "grit/generated_resources.h" 31 #include "grit/generated_resources.h"
30 #include "grit/theme_resources.h" 32 #include "grit/theme_resources.h"
31 #include "third_party/skia/include/core/SkBitmap.h" 33 #include "third_party/skia/include/core/SkBitmap.h"
32 #include "ui/base/l10n/l10n_util.h" 34 #include "ui/base/l10n/l10n_util.h"
33 #include "ui/base/resource/resource_bundle.h" 35 #include "ui/base/resource/resource_bundle.h"
34 #include "ui/gfx/image/image.h" 36 #include "ui/gfx/image/image.h"
(...skipping 18 matching lines...) Expand all
53 const char kGAIAPictureFileNameKey[] = "gaia_picture_file_name"; 55 const char kGAIAPictureFileNameKey[] = "gaia_picture_file_name";
54 const char kIsManagedKey[] = "is_managed"; 56 const char kIsManagedKey[] = "is_managed";
55 const char kIsOmittedFromProfileListKey[] = "is_omitted_from_profile_list"; 57 const char kIsOmittedFromProfileListKey[] = "is_omitted_from_profile_list";
56 const char kSigninRequiredKey[] = "signin_required"; 58 const char kSigninRequiredKey[] = "signin_required";
57 const char kManagedUserId[] = "managed_user_id"; 59 const char kManagedUserId[] = "managed_user_id";
58 const char kProfileIsEphemeral[] = "is_ephemeral"; 60 const char kProfileIsEphemeral[] = "is_ephemeral";
59 const char kActiveTimeKey[] = "active_time"; 61 const char kActiveTimeKey[] = "active_time";
60 62
61 const char kDefaultUrlPrefix[] = "chrome://theme/IDR_PROFILE_AVATAR_"; 63 const char kDefaultUrlPrefix[] = "chrome://theme/IDR_PROFILE_AVATAR_";
62 const char kGAIAPictureFileName[] = "Google Profile Picture.png"; 64 const char kGAIAPictureFileName[] = "Google Profile Picture.png";
65 const char kHighResAvatarFolderName[] = "Avatars";
63 66
64 const int kDefaultAvatarIconResources[] = { 67 const int kDefaultAvatarIconResources[] = {
65 IDR_PROFILE_AVATAR_0, 68 IDR_PROFILE_AVATAR_0,
66 IDR_PROFILE_AVATAR_1, 69 IDR_PROFILE_AVATAR_1,
67 IDR_PROFILE_AVATAR_2, 70 IDR_PROFILE_AVATAR_2,
68 IDR_PROFILE_AVATAR_3, 71 IDR_PROFILE_AVATAR_3,
69 IDR_PROFILE_AVATAR_4, 72 IDR_PROFILE_AVATAR_4,
70 IDR_PROFILE_AVATAR_5, 73 IDR_PROFILE_AVATAR_5,
71 IDR_PROFILE_AVATAR_6, 74 IDR_PROFILE_AVATAR_6,
72 IDR_PROFILE_AVATAR_7, 75 IDR_PROFILE_AVATAR_7,
(...skipping 10 matching lines...) Expand all
83 IDR_PROFILE_AVATAR_18, 86 IDR_PROFILE_AVATAR_18,
84 IDR_PROFILE_AVATAR_19, 87 IDR_PROFILE_AVATAR_19,
85 IDR_PROFILE_AVATAR_20, 88 IDR_PROFILE_AVATAR_20,
86 IDR_PROFILE_AVATAR_21, 89 IDR_PROFILE_AVATAR_21,
87 IDR_PROFILE_AVATAR_22, 90 IDR_PROFILE_AVATAR_22,
88 IDR_PROFILE_AVATAR_23, 91 IDR_PROFILE_AVATAR_23,
89 IDR_PROFILE_AVATAR_24, 92 IDR_PROFILE_AVATAR_24,
90 IDR_PROFILE_AVATAR_25, 93 IDR_PROFILE_AVATAR_25,
91 }; 94 };
92 95
96 // File names for the high-res avatar icon resources. In the same order as
97 // the avatars in kDefaultAvatarIconResources.
98 const char* kDefaultAvatarIconResourceFileNames[] = {
99 "chrome_avatar_generic.png",
100 "chrome_avatar_generic_aqua.png",
101 "chrome_avatar_generic_blue.png",
102 "chrome_avatar_generic_green.png",
103 "chrome_avatar_generic_orange.png",
104 "chrome_avatar_generic_purple.png",
105 "chrome_avatar_generic_red.png",
106 "chrome_avatar_generic_yellow.png",
107 "chrome_avatar_secret_agent.png",
108 "chrome_avatar_superhero.png",
109 "chrome_avatar_volley_ball.png",
110 "chrome_avatar_businessman.png",
111 "chrome_avatar_ninja.png",
112 "chrome_avatar_alien.png",
113 "chrome_avatar_smiley.png",
114 "chrome_avatar_flower.png",
115 "chrome_avatar_pizza.png",
116 "chrome_avatar_soccer.png",
117 "chrome_avatar_burger.png",
118 "chrome_avatar_cat.png",
119 "chrome_avatar_cupcake.png",
120 "chrome_avatar_dog.png",
121 "chrome_avatar_horse.png",
122 "chrome_avatar_margarita.png",
123 "chrome_avatar_note.png",
124 "chrome_avatar_sun_cloud.png",
Roger Tawa OOO till Jul 10th 2014/03/25 14:39:49 Do we really need chrome_ prefix ?
noms (inactive) 2014/03/25 19:24:22 Nope! On 2014/03/25 14:39:49, Roger Tawa wrote:
125 };
126
93 const size_t kDefaultAvatarIconsCount = arraysize(kDefaultAvatarIconResources); 127 const size_t kDefaultAvatarIconsCount = arraysize(kDefaultAvatarIconResources);
94 128
95 // The first 8 icons are generic. 129 // The first 8 icons are generic.
96 const size_t kGenericIconCount = 8; 130 const size_t kGenericIconCount = 8;
97 131
98 // First eight are generic icons, which use IDS_NUMBERED_PROFILE_NAME. 132 // First eight are generic icons, which use IDS_NUMBERED_PROFILE_NAME.
99 const int kDefaultNames[] = { 133 const int kDefaultNames[] = {
100 IDS_DEFAULT_AVATAR_NAME_8, 134 IDS_DEFAULT_AVATAR_NAME_8,
101 IDS_DEFAULT_AVATAR_NAME_9, 135 IDS_DEFAULT_AVATAR_NAME_9,
102 IDS_DEFAULT_AVATAR_NAME_10, 136 IDS_DEFAULT_AVATAR_NAME_10,
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 } 179 }
146 180
147 // Reads a PNG from disk and decodes it. If the bitmap was successfully read 181 // Reads a PNG from disk and decodes it. If the bitmap was successfully read
148 // from disk the then |out_image| will contain the bitmap image, otherwise it 182 // from disk the then |out_image| will contain the bitmap image, otherwise it
149 // will be NULL. 183 // will be NULL.
150 void ReadBitmap(const base::FilePath& image_path, 184 void ReadBitmap(const base::FilePath& image_path,
151 gfx::Image** out_image) { 185 gfx::Image** out_image) {
152 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 186 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
153 *out_image = NULL; 187 *out_image = NULL;
154 188
189 // If the path doesn't exist, don't even try reading it.
190 if (!base::PathExists(image_path))
191 return;
192
155 std::string image_data; 193 std::string image_data;
156 if (!base::ReadFileToString(image_path, &image_data)) { 194 if (!base::ReadFileToString(image_path, &image_data)) {
157 LOG(ERROR) << "Failed to read PNG file from disk."; 195 LOG(ERROR) << "Failed to read PNG file from disk.";
158 return; 196 return;
159 } 197 }
160 198
161 gfx::Image image = gfx::Image::CreateFrom1xPNGBytes( 199 gfx::Image image = gfx::Image::CreateFrom1xPNGBytes(
162 base::RefCountedString::TakeString(&image_data)); 200 base::RefCountedString::TakeString(&image_data));
163 if (image.IsEmpty()) { 201 if (image.IsEmpty()) {
164 LOG(ERROR) << "Failed to decode PNG file."; 202 LOG(ERROR) << "Failed to decode PNG file.";
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 if (info->GetBoolean(kIsManagedKey, &is_managed)) { 256 if (info->GetBoolean(kIsManagedKey, &is_managed)) {
219 info->Remove(kIsManagedKey, NULL); 257 info->Remove(kIsManagedKey, NULL);
220 info->SetString(kManagedUserId, is_managed ? "DUMMY_ID" : std::string()); 258 info->SetString(kManagedUserId, is_managed ? "DUMMY_ID" : std::string());
221 } 259 }
222 info->SetBoolean(kIsUsingDefaultName, IsDefaultName(name)); 260 info->SetBoolean(kIsUsingDefaultName, IsDefaultName(name));
223 } 261 }
224 } 262 }
225 263
226 ProfileInfoCache::~ProfileInfoCache() { 264 ProfileInfoCache::~ProfileInfoCache() {
227 STLDeleteContainerPairSecondPointers( 265 STLDeleteContainerPairSecondPointers(
228 gaia_pictures_.begin(), gaia_pictures_.end()); 266 cached_avatar_images_.begin(), cached_avatar_images_.end());
229 } 267 }
230 268
231 void ProfileInfoCache::AddProfileToCache(const base::FilePath& profile_path, 269 void ProfileInfoCache::AddProfileToCache(const base::FilePath& profile_path,
232 const base::string16& name, 270 const base::string16& name,
233 const base::string16& username, 271 const base::string16& username,
234 size_t icon_index, 272 size_t icon_index,
235 const std::string& managed_user_id) { 273 const std::string& managed_user_id) {
236 std::string key = CacheKeyFromProfilePath(profile_path); 274 std::string key = CacheKeyFromProfilePath(profile_path);
237 DictionaryPrefUpdate update(prefs_, prefs::kProfileInfoCache); 275 DictionaryPrefUpdate update(prefs_, prefs::kProfileInfoCache);
238 base::DictionaryValue* cache = update.Get(); 276 base::DictionaryValue* cache = update.Get();
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 } 395 }
358 396
359 const gfx::Image& ProfileInfoCache::GetAvatarIconOfProfileAtIndex( 397 const gfx::Image& ProfileInfoCache::GetAvatarIconOfProfileAtIndex(
360 size_t index) const { 398 size_t index) const {
361 if (IsUsingGAIAPictureOfProfileAtIndex(index)) { 399 if (IsUsingGAIAPictureOfProfileAtIndex(index)) {
362 const gfx::Image* image = GetGAIAPictureOfProfileAtIndex(index); 400 const gfx::Image* image = GetGAIAPictureOfProfileAtIndex(index);
363 if (image) 401 if (image)
364 return *image; 402 return *image;
365 } 403 }
366 404
405 // Use the high resolution version of the avatar if it exists.
406 if (switches::IsNewProfileManagement()) {
407 const gfx::Image* image = GetHighResAvatarOfProfileAtIndex(index);
408 if (image)
409 return *image;
410 }
411
367 int resource_id = GetDefaultAvatarIconResourceIDAtIndex( 412 int resource_id = GetDefaultAvatarIconResourceIDAtIndex(
368 GetAvatarIconIndexOfProfileAtIndex(index)); 413 GetAvatarIconIndexOfProfileAtIndex(index));
369 return ResourceBundle::GetSharedInstance().GetNativeImageNamed(resource_id); 414 return ResourceBundle::GetSharedInstance().GetNativeImageNamed(resource_id);
370 } 415 }
371 416
372 std::string ProfileInfoCache::GetLocalAuthCredentialsOfProfileAtIndex( 417 std::string ProfileInfoCache::GetLocalAuthCredentialsOfProfileAtIndex(
373 size_t index) const { 418 size_t index) const {
374 std::string credentials; 419 std::string credentials;
375 GetInfoForProfileAtIndex(index)->GetString(kAuthCredentialsKey, &credentials); 420 GetInfoForProfileAtIndex(index)->GetString(kAuthCredentialsKey, &credentials);
376 return credentials; 421 return credentials;
(...skipping 28 matching lines...) Expand all
405 GetInfoForProfileAtIndex(index)->GetBoolean(kUseGAIANameKey, &value); 450 GetInfoForProfileAtIndex(index)->GetBoolean(kUseGAIANameKey, &value);
406 return value; 451 return value;
407 } 452 }
408 453
409 const gfx::Image* ProfileInfoCache::GetGAIAPictureOfProfileAtIndex( 454 const gfx::Image* ProfileInfoCache::GetGAIAPictureOfProfileAtIndex(
410 size_t index) const { 455 size_t index) const {
411 base::FilePath path = GetPathOfProfileAtIndex(index); 456 base::FilePath path = GetPathOfProfileAtIndex(index);
412 std::string key = CacheKeyFromProfilePath(path); 457 std::string key = CacheKeyFromProfilePath(path);
413 458
414 // If the picture is already loaded then use it. 459 // If the picture is already loaded then use it.
415 if (gaia_pictures_.count(key)) { 460 if (cached_avatar_images_.count(key)) {
416 if (gaia_pictures_[key]->IsEmpty()) 461 if (cached_avatar_images_[key]->IsEmpty())
417 return NULL; 462 return NULL;
418 return gaia_pictures_[key]; 463 return cached_avatar_images_[key];
419 } 464 }
420 465
421 std::string file_name; 466 std::string file_name;
422 GetInfoForProfileAtIndex(index)->GetString( 467 GetInfoForProfileAtIndex(index)->GetString(
423 kGAIAPictureFileNameKey, &file_name); 468 kGAIAPictureFileNameKey, &file_name);
424 469
425 // If the picture is not on disk or it is already being loaded then return 470 // If the picture is not on disk then return NULL.
426 // NULL. 471 if (file_name.empty())
427 if (file_name.empty() || gaia_pictures_loading_[key])
428 return NULL; 472 return NULL;
429 473
430 gaia_pictures_loading_[key] = true;
431 base::FilePath image_path = path.AppendASCII(file_name); 474 base::FilePath image_path = path.AppendASCII(file_name);
475 LoadAvatarPictureFromPath(key, image_path);
476 return NULL;
477 }
478
479 const gfx::Image* ProfileInfoCache::GetHighResAvatarOfProfileAtIndex(
480 size_t index) const {
481 int avatar_index = GetAvatarIconIndexOfProfileAtIndex(index);
482 std::string key = kDefaultAvatarIconResourceFileNames[avatar_index];
483
484 // If the picture is already loaded then use it.
485 if (cached_avatar_images_.count(key)) {
486 if (cached_avatar_images_[key]->IsEmpty())
487 return NULL;
488 return cached_avatar_images_[key];
489 }
490
491 base::FilePath user_data_dir;
492 PathService::Get(chrome::DIR_USER_DATA, &user_data_dir);
493 base::FilePath image_path =
494 user_data_dir.AppendASCII(kHighResAvatarFolderName).AppendASCII(key);
495 LoadAvatarPictureFromPath(key, image_path);
496 return NULL;
497 }
Roger Tawa OOO till Jul 10th 2014/03/25 14:39:49 GetGAIAPictureOfProfileAtIndex() and GetHighResAva
noms (inactive) 2014/03/25 19:24:22 Unfortunately GetGAIAPictureOfProfileAtIndex() is
498
499 void ProfileInfoCache::LoadAvatarPictureFromPath(
500 const std::string& key,
501 const base::FilePath& image_path) const {
502 // If the picture is already being loaded then don't try loading it again.
503 if (cached_avatar_images_loading_[key])
504 return;
505 cached_avatar_images_loading_[key] = true;
506
432 gfx::Image** image = new gfx::Image*; 507 gfx::Image** image = new gfx::Image*;
433 BrowserThread::PostTaskAndReply(BrowserThread::FILE, FROM_HERE, 508 BrowserThread::PostTaskAndReply(BrowserThread::FILE, FROM_HERE,
434 base::Bind(&ReadBitmap, image_path, image), 509 base::Bind(&ReadBitmap, image_path, image),
435 base::Bind(&ProfileInfoCache::OnGAIAPictureLoaded, 510 base::Bind(&ProfileInfoCache::OnAvatarPictureLoaded,
436 const_cast<ProfileInfoCache*>(this)->AsWeakPtr(), path, image)); 511 const_cast<ProfileInfoCache*>(this)->AsWeakPtr(), key, image));
437
438 return NULL;
439 } 512 }
440 513
441 bool ProfileInfoCache::ProfileIsManagedAtIndex(size_t index) const { 514 bool ProfileInfoCache::ProfileIsManagedAtIndex(size_t index) const {
442 return !GetManagedUserIdOfProfileAtIndex(index).empty(); 515 return !GetManagedUserIdOfProfileAtIndex(index).empty();
443 } 516 }
444 517
445 bool ProfileInfoCache::IsOmittedProfileAtIndex(size_t index) const { 518 bool ProfileInfoCache::IsOmittedProfileAtIndex(size_t index) const {
446 bool value = false; 519 bool value = false;
447 GetInfoForProfileAtIndex(index)->GetBoolean(kIsOmittedFromProfileListKey, 520 GetInfoForProfileAtIndex(index)->GetBoolean(kIsOmittedFromProfileListKey,
448 &value); 521 &value);
(...skipping 18 matching lines...) Expand all
467 GetInfoForProfileAtIndex(index)->GetBoolean(kProfileIsEphemeral, &value); 540 GetInfoForProfileAtIndex(index)->GetBoolean(kProfileIsEphemeral, &value);
468 return value; 541 return value;
469 } 542 }
470 543
471 bool ProfileInfoCache::ProfileIsUsingDefaultNameAtIndex(size_t index) const { 544 bool ProfileInfoCache::ProfileIsUsingDefaultNameAtIndex(size_t index) const {
472 bool value = false; 545 bool value = false;
473 GetInfoForProfileAtIndex(index)->GetBoolean(kIsUsingDefaultName, &value); 546 GetInfoForProfileAtIndex(index)->GetBoolean(kIsUsingDefaultName, &value);
474 return value; 547 return value;
475 } 548 }
476 549
477 void ProfileInfoCache::OnGAIAPictureLoaded(const base::FilePath& path, 550 void ProfileInfoCache::OnAvatarPictureLoaded(const std::string& key,
478 gfx::Image** image) const { 551 gfx::Image** image) const {
479 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 552 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
480 553
481 std::string key = CacheKeyFromProfilePath(path); 554 cached_avatar_images_loading_[key] = false;
482 gaia_pictures_loading_[key] = false;
483 555
484 if (*image) { 556 if (*image) {
485 delete gaia_pictures_[key]; 557 delete cached_avatar_images_[key];
486 gaia_pictures_[key] = *image; 558 cached_avatar_images_[key] = *image;
487 } else { 559 } else {
488 // Place an empty image in the cache to avoid reloading it again. 560 // Place an empty image in the cache to avoid reloading it again.
489 gaia_pictures_[key] = new gfx::Image(); 561 cached_avatar_images_[key] = new gfx::Image();
Roger Tawa OOO till Jul 10th 2014/03/25 14:39:49 I still think there is a potential memory leak her
noms (inactive) 2014/03/25 19:24:22 I've just deleted |cached_avatar_images_[key]| in
490 } 562 }
491 delete image; 563 delete image;
492 564
493 content::NotificationService::current()->Notify( 565 content::NotificationService::current()->Notify(
494 chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED, 566 chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED,
495 content::NotificationService::AllSources(), 567 content::NotificationService::AllSources(),
496 content::NotificationService::NoDetails()); 568 content::NotificationService::NoDetails());
497 } 569 }
498 570
499 void ProfileInfoCache::OnGAIAPictureSaved(const base::FilePath& path, 571 void ProfileInfoCache::OnGAIAPictureSaved(const base::FilePath& path,
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
698 OnProfileNameChanged(profile_path, old_display_name)); 770 OnProfileNameChanged(profile_path, old_display_name));
699 } 771 }
700 } 772 }
701 773
702 void ProfileInfoCache::SetGAIAPictureOfProfileAtIndex(size_t index, 774 void ProfileInfoCache::SetGAIAPictureOfProfileAtIndex(size_t index,
703 const gfx::Image* image) { 775 const gfx::Image* image) {
704 base::FilePath path = GetPathOfProfileAtIndex(index); 776 base::FilePath path = GetPathOfProfileAtIndex(index);
705 std::string key = CacheKeyFromProfilePath(path); 777 std::string key = CacheKeyFromProfilePath(path);
706 778
707 // Delete the old bitmap from cache. 779 // Delete the old bitmap from cache.
708 std::map<std::string, gfx::Image*>::iterator it = gaia_pictures_.find(key); 780 std::map<std::string, gfx::Image*>::iterator it =
709 if (it != gaia_pictures_.end()) { 781 cached_avatar_images_.find(key);
782 if (it != cached_avatar_images_.end()) {
710 delete it->second; 783 delete it->second;
711 gaia_pictures_.erase(it); 784 cached_avatar_images_.erase(it);
712 } 785 }
713 786
714 std::string old_file_name; 787 std::string old_file_name;
715 GetInfoForProfileAtIndex(index)->GetString( 788 GetInfoForProfileAtIndex(index)->GetString(
716 kGAIAPictureFileNameKey, &old_file_name); 789 kGAIAPictureFileNameKey, &old_file_name);
717 std::string new_file_name; 790 std::string new_file_name;
718 791
719 if (!image) { 792 if (!image) {
720 // Delete the old bitmap from disk. 793 // Delete the old bitmap from disk.
721 if (!old_file_name.empty()) { 794 if (!old_file_name.empty()) {
722 base::FilePath image_path = path.AppendASCII(old_file_name); 795 base::FilePath image_path = path.AppendASCII(old_file_name);
723 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, 796 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
724 base::Bind(&DeleteBitmap, image_path)); 797 base::Bind(&DeleteBitmap, image_path));
725 } 798 }
726 } else { 799 } else {
727 // Save the new bitmap to disk. 800 // Save the new bitmap to disk.
728 gaia_pictures_[key] = new gfx::Image(*image); 801 cached_avatar_images_[key] = new gfx::Image(*image);
729 scoped_ptr<ImageData> data(new ImageData); 802 scoped_ptr<ImageData> data(new ImageData);
730 scoped_refptr<base::RefCountedMemory> png_data = image->As1xPNGBytes(); 803 scoped_refptr<base::RefCountedMemory> png_data = image->As1xPNGBytes();
731 data->assign(png_data->front(), png_data->front() + png_data->size()); 804 data->assign(png_data->front(), png_data->front() + png_data->size());
732 if (!data->size()) { 805 if (!data->size()) {
733 LOG(ERROR) << "Failed to PNG encode the image."; 806 LOG(ERROR) << "Failed to PNG encode the image.";
734 } else { 807 } else {
735 new_file_name = 808 new_file_name =
736 old_file_name.empty() ? kGAIAPictureFileName : old_file_name; 809 old_file_name.empty() ? kGAIAPictureFileName : old_file_name;
737 base::FilePath image_path = path.AppendASCII(new_file_name); 810 base::FilePath image_path = path.AppendASCII(new_file_name);
738 bool* success = new bool; 811 bool* success = new bool;
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
1036 info->GetString(kNameKey, &name); 1109 info->GetString(kNameKey, &name);
1037 names.push_back(name); 1110 names.push_back(name);
1038 } 1111 }
1039 return names; 1112 return names;
1040 } 1113 }
1041 1114
1042 // static 1115 // static
1043 void ProfileInfoCache::RegisterPrefs(PrefRegistrySimple* registry) { 1116 void ProfileInfoCache::RegisterPrefs(PrefRegistrySimple* registry) {
1044 registry->RegisterDictionaryPref(prefs::kProfileInfoCache); 1117 registry->RegisterDictionaryPref(prefs::kProfileInfoCache);
1045 } 1118 }
OLDNEW
« no previous file with comments | « chrome/browser/profiles/profile_info_cache.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698