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

Unified Diff: chrome/browser/chromeos/login/users/avatar/user_image_loader.cc

Issue 2517053004: Use base::RefCountedBytes in user_manager::UserImage (Closed)
Patch Set: Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
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 c1eb4a6b42a471f3073ac154378016f768f9c672..e72176faf18c1bf8880a75c835c8139643285001 100644
--- a/chrome/browser/chromeos/login/users/avatar/user_image_loader.cc
+++ b/chrome/browser/chromeos/login/users/avatar/user_image_loader.cc
@@ -46,12 +46,11 @@ struct ImageInfo {
};
// Crops |image| to the square format and downsizes the image to
-// |target_size| in pixels. On success, returns true and stores the cropped
-// image in |bitmap| and the bytes representation in |byytes|.
-bool CropImage(const SkBitmap& image,
- int target_size,
- SkBitmap* bitmap,
- user_manager::UserImage::Bytes* bytes) {
+// |target_size| in pixels. On success, returns the bytes representation and
+// stores the cropped image in |bitmap|. On failure, returns nullptr.
+scoped_refptr<base::RefCountedBytes> CropImage(const SkBitmap& image,
+ int target_size,
+ SkBitmap* bitmap) {
DCHECK_GT(target_size, 0);
SkBitmap final_image;
@@ -71,14 +70,13 @@ bool CropImage(const SkBitmap& image,
}
// Encode the cropped image to web-compatible bytes representation
- std::unique_ptr<user_manager::UserImage::Bytes> encoded =
+ scoped_refptr<base::RefCountedBytes> encoded =
user_manager::UserImage::Encode(final_image);
if (!encoded)
achuithb 2016/11/22 21:16:54 Does this early return still make sense? Why not:
satorux1 2016/11/24 02:13:40 good idea. done!
- return false;
+ return nullptr;
bitmap->swap(final_image);
- bytes->swap(*encoded);
- return true;
+ return encoded;
}
// Handles the decoded image returned from ImageDecoder through the
@@ -90,7 +88,10 @@ class UserImageRequest : public ImageDecoder::ImageRequest {
const std::string& image_data,
scoped_refptr<base::SequencedTaskRunner> background_task_runner)
: image_info_(image_info),
- image_data_(image_data.begin(), image_data.end()),
+ // TODO(crbug.com/593251): Remove the data copy here.
+ image_data_(new base::RefCountedBytes(
+ reinterpret_cast<const unsigned char*>(image_data.data()),
+ image_data.size())),
background_task_runner_(background_task_runner),
weak_ptr_factory_(this) {}
~UserImageRequest() override {}
@@ -101,18 +102,17 @@ class UserImageRequest : public ImageDecoder::ImageRequest {
// Called after the image is cropped (and downsized) as needed.
void OnImageCropped(SkBitmap* bitmap,
- user_manager::UserImage::Bytes* bytes,
- bool succeeded);
+ scoped_refptr<base::RefCountedBytes> bytes);
// Called after the image is finalized. |image_bytes_regenerated| is true
// if |image_bytes| is regenerated from the cropped image.
void OnImageFinalized(const SkBitmap& image,
- const user_manager::UserImage::Bytes& image_bytes,
+ scoped_refptr<base::RefCountedBytes> image_bytes,
bool image_bytes_regenerated);
private:
const ImageInfo image_info_;
- const user_manager::UserImage::Bytes image_data_;
+ scoped_refptr<base::RefCountedBytes> image_data_;
scoped_refptr<base::SequencedTaskRunner> background_task_runner_;
// This should be the last member.
@@ -125,34 +125,32 @@ void UserImageRequest::OnImageDecoded(const SkBitmap& decoded_image) {
// Cropping an image could be expensive, hence posting to the background
// thread.
SkBitmap* bitmap = new SkBitmap;
- user_manager::UserImage::Bytes* bytes = new user_manager::UserImage::Bytes;
base::PostTaskAndReplyWithResult(
background_task_runner_.get(), FROM_HERE,
- base::Bind(&CropImage, decoded_image, target_size, bitmap, bytes),
+ base::Bind(&CropImage, decoded_image, target_size, bitmap),
base::Bind(&UserImageRequest::OnImageCropped,
- weak_ptr_factory_.GetWeakPtr(), base::Owned(bitmap),
- base::Owned(bytes)));
+ weak_ptr_factory_.GetWeakPtr(), base::Owned(bitmap)));
} else {
OnImageFinalized(decoded_image, image_data_,
false /* image_bytes_regenerated */);
}
}
-void UserImageRequest::OnImageCropped(SkBitmap* bitmap,
- user_manager::UserImage::Bytes* bytes,
- bool succeeded) {
+void UserImageRequest::OnImageCropped(
+ SkBitmap* bitmap,
+ scoped_refptr<base::RefCountedBytes> bytes) {
DCHECK_GT(image_info_.pixels_per_side, 0);
- if (!succeeded) {
+ if (!bytes) {
OnDecodeImageFailed();
return;
}
- OnImageFinalized(*bitmap, *bytes, true /* image_bytes_regenerated */);
+ OnImageFinalized(*bitmap, bytes, true /* image_bytes_regenerated */);
}
void UserImageRequest::OnImageFinalized(
const SkBitmap& image,
- const user_manager::UserImage::Bytes& image_bytes,
+ scoped_refptr<base::RefCountedBytes> image_bytes,
bool image_bytes_regenerated) {
SkBitmap final_image = image;
// Make the SkBitmap immutable as we won't modify it. This is important

Powered by Google App Engine
This is Rietveld 408576698