| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/chromeos/login/users/avatar/user_image_loader.h" | 5 #include "chrome/browser/chromeos/login/users/avatar/user_image_loader.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 153 const SkBitmap& image, | 153 const SkBitmap& image, |
| 154 const user_manager::UserImage::Bytes& image_bytes, | 154 const user_manager::UserImage::Bytes& image_bytes, |
| 155 bool image_bytes_regenerated) { | 155 bool image_bytes_regenerated) { |
| 156 SkBitmap final_image = image; | 156 SkBitmap final_image = image; |
| 157 // Make the SkBitmap immutable as we won't modify it. This is important | 157 // Make the SkBitmap immutable as we won't modify it. This is important |
| 158 // because otherwise it gets duplicated during painting, wasting memory. | 158 // because otherwise it gets duplicated during painting, wasting memory. |
| 159 final_image.setImmutable(); | 159 final_image.setImmutable(); |
| 160 gfx::ImageSkia final_image_skia = | 160 gfx::ImageSkia final_image_skia = |
| 161 gfx::ImageSkia::CreateFrom1xBitmap(final_image); | 161 gfx::ImageSkia::CreateFrom1xBitmap(final_image); |
| 162 final_image_skia.MakeThreadSafe(); | 162 final_image_skia.MakeThreadSafe(); |
| 163 user_manager::UserImage user_image(final_image_skia, image_bytes); | 163 scoped_ptr<user_manager::UserImage> user_image( |
| 164 user_image.set_file_path(image_info_.file_path); | 164 new user_manager::UserImage(final_image_skia, image_bytes)); |
| 165 user_image->set_file_path(image_info_.file_path); |
| 165 if (image_info_.image_codec == ImageDecoder::ROBUST_JPEG_CODEC || | 166 if (image_info_.image_codec == ImageDecoder::ROBUST_JPEG_CODEC || |
| 166 image_bytes_regenerated) | 167 image_bytes_regenerated) |
| 167 user_image.MarkAsSafe(); | 168 user_image->MarkAsSafe(); |
| 168 image_info_.loaded_cb.Run(user_image); | 169 image_info_.loaded_cb.Run(std::move(user_image)); |
| 169 delete this; | 170 delete this; |
| 170 } | 171 } |
| 171 | 172 |
| 172 void UserImageRequest::OnDecodeImageFailed() { | 173 void UserImageRequest::OnDecodeImageFailed() { |
| 173 image_info_.loaded_cb.Run(user_manager::UserImage()); | 174 image_info_.loaded_cb.Run(make_scoped_ptr(new user_manager::UserImage)); |
| 174 delete this; | 175 delete this; |
| 175 } | 176 } |
| 176 | 177 |
| 177 // Starts decoding the image with ImageDecoder for the image |data| if | 178 // Starts decoding the image with ImageDecoder for the image |data| if |
| 178 // |data_is_ready| is true. | 179 // |data_is_ready| is true. |
| 179 void DecodeImage( | 180 void DecodeImage( |
| 180 const ImageInfo& image_info, | 181 const ImageInfo& image_info, |
| 181 scoped_refptr<base::SequencedTaskRunner> background_task_runner, | 182 scoped_refptr<base::SequencedTaskRunner> background_task_runner, |
| 182 const std::string* data, | 183 const std::string* data, |
| 183 bool data_is_ready) { | 184 bool data_is_ready) { |
| 184 if (!data_is_ready) { | 185 if (!data_is_ready) { |
| 185 base::ThreadTaskRunnerHandle::Get()->PostTask( | 186 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 186 FROM_HERE, base::Bind(image_info.loaded_cb, user_manager::UserImage())); | 187 FROM_HERE, |
| 188 base::Bind(image_info.loaded_cb, |
| 189 base::Passed(make_scoped_ptr(new user_manager::UserImage)))); |
| 187 return; | 190 return; |
| 188 } | 191 } |
| 189 | 192 |
| 190 UserImageRequest* image_request = | 193 UserImageRequest* image_request = |
| 191 new UserImageRequest(image_info, *data, background_task_runner); | 194 new UserImageRequest(image_info, *data, background_task_runner); |
| 192 ImageDecoder::StartWithOptions(image_request, *data, image_info.image_codec, | 195 ImageDecoder::StartWithOptions(image_request, *data, image_info.image_codec, |
| 193 false); | 196 false); |
| 194 } | 197 } |
| 195 | 198 |
| 196 } // namespace | 199 } // namespace |
| (...skipping 19 matching lines...) Expand all Loading... |
| 216 ImageDecoder::ImageCodec image_codec, | 219 ImageDecoder::ImageCodec image_codec, |
| 217 int pixels_per_side, | 220 int pixels_per_side, |
| 218 const LoadedCallback& loaded_cb) { | 221 const LoadedCallback& loaded_cb) { |
| 219 DecodeImage( | 222 DecodeImage( |
| 220 ImageInfo(base::FilePath(), pixels_per_side, image_codec, loaded_cb), | 223 ImageInfo(base::FilePath(), pixels_per_side, image_codec, loaded_cb), |
| 221 background_task_runner, data.get(), true /* data_is_ready */); | 224 background_task_runner, data.get(), true /* data_is_ready */); |
| 222 } | 225 } |
| 223 | 226 |
| 224 } // namespace user_image_loader | 227 } // namespace user_image_loader |
| 225 } // namespace chromeos | 228 } // namespace chromeos |
| OLD | NEW |