Chromium Code Reviews| Index: chrome/browser/chromeos/login/users/avatar/user_image_loader.cc |
| diff --git a/chrome/browser/chromeos/login/users/avatar/user_image_loader.cc b/chrome/browser/chromeos/login/users/avatar/user_image_loader.cc |
| index 17088c37b8f696be62bb2570811cb8cbb64f1c58..3c91447febb57ca33497d6605d572a7400313e5b 100644 |
| --- a/chrome/browser/chromeos/login/users/avatar/user_image_loader.cc |
| +++ b/chrome/browser/chromeos/login/users/avatar/user_image_loader.cc |
| @@ -42,6 +42,18 @@ UserImageLoader::UserImageLoader( |
| UserImageLoader::~UserImageLoader() { |
| } |
| +UserImageLoader::ImageRequest::ImageRequest(const ImageInfo& image_info, |
| + const std::string& image_data, |
| + UserImageLoader* user_image_loader) |
| + : Delegate(user_image_loader->background_task_runner_), |
| + image_info_(image_info), |
| + image_data_(image_data.begin(), image_data.end()), |
| + user_image_loader_(user_image_loader) { |
| +} |
| + |
| +UserImageLoader::ImageRequest::~ImageRequest() { |
| +} |
| + |
| void UserImageLoader::Start(const std::string& filepath, |
| int pixels_per_side, |
| const LoadedCallback& loaded_cb) { |
| @@ -79,26 +91,15 @@ void UserImageLoader::DecodeImage(const scoped_ptr<std::string> data, |
| const ImageInfo& image_info) { |
| DCHECK(background_task_runner_->RunsTasksOnCurrentThread()); |
| - scoped_refptr<ImageDecoder> image_decoder = |
| - new ImageDecoder(this, *data, image_codec_); |
| - image_info_map_.insert(std::make_pair(image_decoder.get(), image_info)); |
| - image_decoder->Start(background_task_runner_); |
| + ImageRequest* image_request = new ImageRequest(image_info, *data, this); |
|
dcheng
2015/03/20 00:14:45
Where is this freed?
Theresa
2015/03/20 19:09:01
It wasn't. I fixed it to free in OnDecodeImageFail
|
| + ImageDecoder::Start(image_request, *data, image_codec_, false); |
| } |
| -void UserImageLoader::OnImageDecoded(const ImageDecoder* decoder, |
| - const SkBitmap& decoded_image) { |
| - DCHECK(background_task_runner_->RunsTasksOnCurrentThread()); |
| - |
| - ImageInfoMap::iterator it = image_info_map_.find(decoder); |
| - if (it == image_info_map_.end()) { |
| - NOTREACHED(); |
| - return; |
| - } |
| - const std::string file_path = it->second.file_path; |
| - const int target_size = it->second.pixels_per_side; |
| - const LoadedCallback loaded_cb = it->second.loaded_cb; |
| - image_info_map_.erase(it); |
| +void UserImageLoader::ImageRequest::OnImageDecoded( |
| + const SkBitmap& decoded_image) { |
| + DCHECK(task_runner()->RunsTasksOnCurrentThread()); |
| + const int target_size = image_info_.pixels_per_side; |
| SkBitmap final_image = decoded_image; |
| if (target_size > 0) { |
| @@ -126,28 +127,18 @@ void UserImageLoader::OnImageDecoded(const ImageDecoder* decoder, |
| gfx::ImageSkia final_image_skia = |
| gfx::ImageSkia::CreateFrom1xBitmap(final_image); |
| final_image_skia.MakeThreadSafe(); |
| - user_manager::UserImage user_image(final_image_skia, |
| - decoder->get_image_data()); |
| - user_image.set_file_path(file_path); |
| - if (image_codec_ == ImageDecoder::ROBUST_JPEG_CODEC) |
| + user_manager::UserImage user_image(final_image_skia, image_data_); |
| + user_image.set_file_path(image_info_.file_path); |
| + if (user_image_loader_->image_codec_ == ImageDecoder::ROBUST_JPEG_CODEC) |
| user_image.MarkAsSafe(); |
| - foreground_task_runner_->PostTask(FROM_HERE, |
| - base::Bind(loaded_cb, user_image)); |
| + user_image_loader_->foreground_task_runner_->PostTask( |
| + FROM_HERE, base::Bind(image_info_.loaded_cb, user_image)); |
| } |
| -void UserImageLoader::OnDecodeImageFailed(const ImageDecoder* decoder) { |
| - DCHECK(background_task_runner_->RunsTasksOnCurrentThread()); |
| - |
| - ImageInfoMap::iterator it = image_info_map_.find(decoder); |
| - if (it == image_info_map_.end()) { |
| - NOTREACHED(); |
| - return; |
| - } |
| - const LoadedCallback loaded_cb = it->second.loaded_cb; |
| - image_info_map_.erase(it); |
| - |
| - foreground_task_runner_->PostTask( |
| - FROM_HERE, base::Bind(loaded_cb, user_manager::UserImage())); |
| +void UserImageLoader::ImageRequest::OnDecodeImageFailed() { |
| + DCHECK(task_runner()->RunsTasksOnCurrentThread()); |
| + user_image_loader_->foreground_task_runner_->PostTask( |
| + FROM_HERE, base::Bind(image_info_.loaded_cb, user_manager::UserImage())); |
| } |
| } // namespace chromeos |