| Index: chrome/browser/chromeos/login/user_image_loader.cc
|
| diff --git a/chrome/browser/chromeos/login/user_image_loader.cc b/chrome/browser/chromeos/login/user_image_loader.cc
|
| index bbb7c6b31bfacaf7a1909b2c5b2a285cc528eaf6..3087fd7bbfe81393bc9dfb8aaece60ca3480b333 100644
|
| --- a/chrome/browser/chromeos/login/user_image_loader.cc
|
| +++ b/chrome/browser/chromeos/login/user_image_loader.cc
|
| @@ -20,9 +20,11 @@
|
|
|
| namespace chromeos {
|
|
|
| -UserImageLoader::ImageInfo::ImageInfo(int size,
|
| +UserImageLoader::ImageInfo::ImageInfo(const std::string& file_path,
|
| + int pixels_per_side,
|
| const LoadedCallback& loaded_cb)
|
| - : size(size),
|
| + : file_path(file_path),
|
| + pixels_per_side(pixels_per_side),
|
| loaded_cb(loaded_cb) {
|
| }
|
|
|
| @@ -41,33 +43,32 @@ UserImageLoader::~UserImageLoader() {
|
| }
|
|
|
| void UserImageLoader::Start(const std::string& filepath,
|
| - int size,
|
| + int pixels_per_side,
|
| const LoadedCallback& loaded_cb) {
|
| background_task_runner_->PostTask(
|
| FROM_HERE,
|
| base::Bind(&UserImageLoader::ReadAndDecodeImage,
|
| this,
|
| - filepath,
|
| - ImageInfo(size, loaded_cb)));
|
| + ImageInfo(filepath, pixels_per_side, loaded_cb)));
|
| }
|
|
|
| void UserImageLoader::Start(scoped_ptr<std::string> data,
|
| - int size,
|
| + int pixels_per_side,
|
| const LoadedCallback& loaded_cb) {
|
| - background_task_runner_->PostTask(FROM_HERE,
|
| - base::Bind(&UserImageLoader::DecodeImage,
|
| - this,
|
| - base::Passed(&data),
|
| - ImageInfo(size, loaded_cb)));
|
| + background_task_runner_->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&UserImageLoader::DecodeImage,
|
| + this,
|
| + base::Passed(&data),
|
| + ImageInfo(std::string(), pixels_per_side, loaded_cb)));
|
| }
|
|
|
| -void UserImageLoader::ReadAndDecodeImage(const std::string& filepath,
|
| - const ImageInfo& image_info) {
|
| +void UserImageLoader::ReadAndDecodeImage(const ImageInfo& image_info) {
|
| DCHECK(background_task_runner_->RunsTasksOnCurrentThread());
|
|
|
| scoped_ptr<std::string> data(new std::string);
|
| const bool success =
|
| - base::ReadFileToString(base::FilePath(filepath), data.get());
|
| + base::ReadFileToString(base::FilePath(image_info.file_path), data.get());
|
| DCHECK(success);
|
|
|
| DecodeImage(data.Pass(), image_info);
|
| @@ -92,7 +93,8 @@ void UserImageLoader::OnImageDecoded(const ImageDecoder* decoder,
|
| NOTREACHED();
|
| return;
|
| }
|
| - const int target_size = it->second.size;
|
| + 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);
|
|
|
| @@ -100,12 +102,13 @@ void UserImageLoader::OnImageDecoded(const ImageDecoder* decoder,
|
|
|
| if (target_size > 0) {
|
| // Auto crop the image, taking the largest square in the center.
|
| - int size = std::min(decoded_image.width(), decoded_image.height());
|
| - int x = (decoded_image.width() - size) / 2;
|
| - int y = (decoded_image.height() - size) / 2;
|
| - SkBitmap cropped_image =
|
| - SkBitmapOperations::CreateTiledBitmap(decoded_image, x, y, size, size);
|
| - if (size > target_size) {
|
| + int pixels_per_side =
|
| + std::min(decoded_image.width(), decoded_image.height());
|
| + int x = (decoded_image.width() - pixels_per_side) / 2;
|
| + int y = (decoded_image.height() - pixels_per_side) / 2;
|
| + SkBitmap cropped_image = SkBitmapOperations::CreateTiledBitmap(
|
| + decoded_image, x, y, pixels_per_side, pixels_per_side);
|
| + if (pixels_per_side > target_size) {
|
| // Also downsize the image to save space and memory.
|
| final_image =
|
| skia::ImageOperations::Resize(cropped_image,
|
| @@ -123,6 +126,7 @@ void UserImageLoader::OnImageDecoded(const ImageDecoder* decoder,
|
| gfx::ImageSkia::CreateFrom1xBitmap(final_image);
|
| final_image_skia.MakeThreadSafe();
|
| 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_image.MarkAsSafe();
|
| foreground_task_runner_->PostTask(FROM_HERE,
|
|
|