Commit 1b8a113b authored by David Reveman's avatar David Reveman Committed by Commit Bot

Login: Stop motion stills when not selected.

This updates the user image URL handler to respect
frame arguments for motion stills and not only the
default set of user images.

Bug: 775988
Test: manual
Change-Id: I25b9e5d0d3937c90b128b246ba40c63bb59a4b51
Reviewed-on: https://chromium-review.googlesource.com/726600Reviewed-by: default avatarSteven Bennetts <stevenjb@chromium.org>
Commit-Queue: David Reveman <reveman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#509923}
parent ac439ceb
...@@ -72,7 +72,7 @@ scoped_refptr<base::RefCountedMemory> LoadUserImageFrameForScaleFactor( ...@@ -72,7 +72,7 @@ scoped_refptr<base::RefCountedMemory> LoadUserImageFrameForScaleFactor(
return ui::ResourceBundle::GetSharedInstance() return ui::ResourceBundle::GetSharedInstance()
.LoadDataResourceBytesForScale(resource_id, scale_factor); .LoadDataResourceBytesForScale(resource_id, scale_factor);
} }
// TODO(reveman): Add support frames beyond 0 (crbug.com/750064). // TODO(reveman): Add support for frames beyond 0 (crbug.com/750064).
if (frame) { if (frame) {
NOTIMPLEMENTED() << "Unsupported frame: " << frame; NOTIMPLEMENTED() << "Unsupported frame: " << frame;
return nullptr; return nullptr;
...@@ -87,6 +87,33 @@ scoped_refptr<base::RefCountedMemory> LoadUserImageFrameForScaleFactor( ...@@ -87,6 +87,33 @@ scoped_refptr<base::RefCountedMemory> LoadUserImageFrameForScaleFactor(
return data; return data;
} }
scoped_refptr<base::RefCountedMemory> GetUserImageFrame(
scoped_refptr<base::RefCountedMemory> image_bytes,
user_manager::UserImage::ImageFormat image_format,
int frame) {
// Return all frames.
if (frame == -1)
return image_bytes;
// TODO(reveman): Add support for frames beyond 0 (crbug.com/750064).
if (frame) {
NOTIMPLEMENTED() << "Unsupported frame: " << frame;
return nullptr;
}
// Only PNGs can be animated.
if (image_format != user_manager::UserImage::FORMAT_PNG)
return image_bytes;
// Extract first frame by re-encoding image.
SkBitmap bitmap;
if (!gfx::PNGCodec::Decode(image_bytes->front(), image_bytes->size(),
&bitmap)) {
return nullptr;
}
scoped_refptr<base::RefCountedBytes> data(new base::RefCountedBytes);
gfx::PNGCodec::EncodeBGRASkBitmap(bitmap, false /* discard transparency */,
&data->data());
return data;
}
scoped_refptr<base::RefCountedMemory> GetUserImageInternal( scoped_refptr<base::RefCountedMemory> GetUserImageInternal(
const AccountId& account_id, const AccountId& account_id,
int frame) { int frame) {
...@@ -103,8 +130,10 @@ scoped_refptr<base::RefCountedMemory> GetUserImageInternal( ...@@ -103,8 +130,10 @@ scoped_refptr<base::RefCountedMemory> GetUserImageInternal(
} }
if (user) { if (user) {
if (user->has_image_bytes()) if (user->has_image_bytes()) {
return user->image_bytes(); return GetUserImageFrame(user->image_bytes(), user->image_format(),
frame);
}
if (user->image_is_stub()) { if (user->image_is_stub()) {
return LoadUserImageFrameForScaleFactor(IDR_LOGIN_DEFAULT_USER, frame, return LoadUserImageFrameForScaleFactor(IDR_LOGIN_DEFAULT_USER, frame,
scale_factor); scale_factor);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment