| 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..a12dd44cfa031b73323365eca49936d1b3267ed8 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,19 @@ UserImageLoader::UserImageLoader(
|
| UserImageLoader::~UserImageLoader() {
|
| }
|
|
|
| +UserImageLoader::UserImageRequest::UserImageRequest(
|
| + const ImageInfo& image_info,
|
| + const std::string& image_data,
|
| + UserImageLoader* user_image_loader)
|
| + : ImageRequest(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::UserImageRequest::~UserImageRequest() {
|
| +}
|
| +
|
| void UserImageLoader::Start(const std::string& filepath,
|
| int pixels_per_side,
|
| const LoadedCallback& loaded_cb) {
|
| @@ -79,26 +92,16 @@ 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_);
|
| + UserImageRequest* image_request =
|
| + new UserImageRequest(image_info, *data, this);
|
| + 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::UserImageRequest::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 +129,20 @@ 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));
|
| + delete this;
|
| }
|
|
|
| -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::UserImageRequest::OnDecodeImageFailed() {
|
| + DCHECK(task_runner()->RunsTasksOnCurrentThread());
|
| + user_image_loader_->foreground_task_runner_->PostTask(
|
| + FROM_HERE, base::Bind(image_info_.loaded_cb, user_manager::UserImage()));
|
| + delete this;
|
| }
|
|
|
| } // namespace chromeos
|
|
|