Chromium Code Reviews| OLD | NEW |
|---|---|
| 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/files/file_util.h" | 8 #include "base/files/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 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 141 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 141 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| 142 if (!base::PathExists(file_path)) | 142 if (!base::PathExists(file_path)) |
| 143 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, callback); | 143 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, callback); |
| 144 } | 144 } |
| 145 | 145 |
| 146 void DeleteBitmap(const base::FilePath& image_path) { | 146 void DeleteBitmap(const base::FilePath& image_path) { |
| 147 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 147 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| 148 base::DeleteFile(image_path, false); | 148 base::DeleteFile(image_path, false); |
| 149 } | 149 } |
| 150 | 150 |
| 151 // Used by SaveAvatarImageAtPath to post a task to delete the |downloader| | |
| 152 // "soon". We can't just delete it directly there because | |
| 153 // SaveAvatarImageAtPath is called from this very downloader. | |
| 154 void DeleteDownloader(ProfileAvatarDownloader* downloader) { | |
| 155 delete downloader; | |
| 156 } | |
| 157 | |
| 151 } // namespace | 158 } // namespace |
| 152 | 159 |
| 153 ProfileInfoCache::ProfileInfoCache(PrefService* prefs, | 160 ProfileInfoCache::ProfileInfoCache(PrefService* prefs, |
| 154 const base::FilePath& user_data_dir) | 161 const base::FilePath& user_data_dir) |
| 155 : prefs_(prefs), | 162 : prefs_(prefs), |
| 156 user_data_dir_(user_data_dir) { | 163 user_data_dir_(user_data_dir) { |
| 157 // Populate the cache | 164 // Populate the cache |
| 158 DictionaryPrefUpdate update(prefs_, prefs::kProfileInfoCache); | 165 DictionaryPrefUpdate update(prefs_, prefs::kProfileInfoCache); |
| 159 base::DictionaryValue* cache = update.Get(); | 166 base::DictionaryValue* cache = update.Get(); |
| 160 for (base::DictionaryValue::Iterator it(*cache); | 167 for (base::DictionaryValue::Iterator it(*cache); |
| (...skipping 735 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 896 const base::FilePath& image_path, | 903 const base::FilePath& image_path, |
| 897 const base::FilePath& profile_path) { | 904 const base::FilePath& profile_path) { |
| 898 cached_avatar_images_[key] = new gfx::Image(*image); | 905 cached_avatar_images_[key] = new gfx::Image(*image); |
| 899 | 906 |
| 900 scoped_ptr<ImageData> data(new ImageData); | 907 scoped_ptr<ImageData> data(new ImageData); |
| 901 scoped_refptr<base::RefCountedMemory> png_data = image->As1xPNGBytes(); | 908 scoped_refptr<base::RefCountedMemory> png_data = image->As1xPNGBytes(); |
| 902 data->assign(png_data->front(), png_data->front() + png_data->size()); | 909 data->assign(png_data->front(), png_data->front() + png_data->size()); |
| 903 | 910 |
| 904 // Remove the file from the list of downloads in progress. Note that this list | 911 // Remove the file from the list of downloads in progress. Note that this list |
| 905 // only contains the high resolution avatars, and not the Gaia profile images. | 912 // only contains the high resolution avatars, and not the Gaia profile images. |
| 906 if (avatar_images_downloads_in_progress_[key]) { | 913 auto downloader_iter = avatar_images_downloads_in_progress_.find(key); |
| 907 delete avatar_images_downloads_in_progress_[key]; | 914 if (downloader_iter != avatar_images_downloads_in_progress_.end()) { |
| 908 avatar_images_downloads_in_progress_[key] = NULL; | 915 // We mustn't delete the avatar downloader right here, since we're being |
| 916 // called by it. | |
| 917 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | |
| 918 base::Bind(&DeleteDownloader, | |
| 919 downloader_iter->second)); | |
|
gab
2015/02/03 18:20:16
FYI,
BrowserThread::DeleteSoon(BrowserThread::UI,
| |
| 920 avatar_images_downloads_in_progress_.erase(downloader_iter); | |
| 909 } | 921 } |
| 910 | 922 |
| 911 if (!data->size()) { | 923 if (!data->size()) { |
| 912 LOG(ERROR) << "Failed to PNG encode the image."; | 924 LOG(ERROR) << "Failed to PNG encode the image."; |
| 913 } else { | 925 } else { |
| 914 base::Closure callback = base::Bind(&ProfileInfoCache::OnAvatarPictureSaved, | 926 base::Closure callback = base::Bind(&ProfileInfoCache::OnAvatarPictureSaved, |
| 915 AsWeakPtr(), key, profile_path); | 927 AsWeakPtr(), key, profile_path); |
| 916 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, | 928 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, |
| 917 base::Bind(&SaveBitmap, base::Passed(&data), image_path, callback)); | 929 base::Bind(&SaveBitmap, base::Passed(&data), image_path, callback)); |
| 918 } | 930 } |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1041 void ProfileInfoCache::DownloadHighResAvatar( | 1053 void ProfileInfoCache::DownloadHighResAvatar( |
| 1042 size_t icon_index, | 1054 size_t icon_index, |
| 1043 const base::FilePath& profile_path) { | 1055 const base::FilePath& profile_path) { |
| 1044 // Downloading is only supported on desktop. | 1056 // Downloading is only supported on desktop. |
| 1045 #if defined(OS_ANDROID) || defined(OS_IOS) || defined(OS_CHROMEOS) | 1057 #if defined(OS_ANDROID) || defined(OS_IOS) || defined(OS_CHROMEOS) |
| 1046 return; | 1058 return; |
| 1047 #endif | 1059 #endif |
| 1048 const std::string file_name = | 1060 const std::string file_name = |
| 1049 profiles::GetDefaultAvatarIconFileNameAtIndex(icon_index); | 1061 profiles::GetDefaultAvatarIconFileNameAtIndex(icon_index); |
| 1050 // If the file is already being downloaded, don't start another download. | 1062 // If the file is already being downloaded, don't start another download. |
| 1051 if (avatar_images_downloads_in_progress_[file_name]) | 1063 if (avatar_images_downloads_in_progress_.count(file_name)) |
| 1052 return; | 1064 return; |
| 1053 | 1065 |
| 1054 // Start the download for this file. The cache takes ownership of the | 1066 // Start the download for this file. The cache takes ownership of the |
| 1055 // |avatar_downloader|, which will be deleted when the download completes, or | 1067 // |avatar_downloader|, which will be deleted when the download completes, or |
| 1056 // if that never happens, when the ProfileInfoCache is destroyed. | 1068 // if that never happens, when the ProfileInfoCache is destroyed. |
| 1057 ProfileAvatarDownloader* avatar_downloader = new ProfileAvatarDownloader( | 1069 ProfileAvatarDownloader* avatar_downloader = new ProfileAvatarDownloader( |
| 1058 icon_index, | 1070 icon_index, |
| 1059 profile_path, | 1071 profile_path, |
| 1060 this); | 1072 this); |
| 1061 avatar_images_downloads_in_progress_[file_name] = avatar_downloader; | 1073 avatar_images_downloads_in_progress_[file_name] = avatar_downloader; |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1161 std::vector<base::FilePath>::const_iterator it; | 1173 std::vector<base::FilePath>::const_iterator it; |
| 1162 for (it = profiles_to_rename.begin(); it != profiles_to_rename.end(); ++it) { | 1174 for (it = profiles_to_rename.begin(); it != profiles_to_rename.end(); ++it) { |
| 1163 size_t profile_index = GetIndexOfProfileWithPath(*it); | 1175 size_t profile_index = GetIndexOfProfileWithPath(*it); |
| 1164 SetProfileIsUsingDefaultNameAtIndex(profile_index, true); | 1176 SetProfileIsUsingDefaultNameAtIndex(profile_index, true); |
| 1165 // This will assign a new "Person %d" type name and re-sort the cache. | 1177 // This will assign a new "Person %d" type name and re-sort the cache. |
| 1166 SetNameOfProfileAtIndex(profile_index, ChooseNameForNewProfile( | 1178 SetNameOfProfileAtIndex(profile_index, ChooseNameForNewProfile( |
| 1167 GetAvatarIconIndexOfProfileAtIndex(profile_index))); | 1179 GetAvatarIconIndexOfProfileAtIndex(profile_index))); |
| 1168 } | 1180 } |
| 1169 #endif | 1181 #endif |
| 1170 } | 1182 } |
| OLD | NEW |