| 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
|
| deleted file mode 100644
|
| index e9f1b5c15f7f3a843758fcdf559ec01982683e70..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/chromeos/login/user_image_loader.cc
|
| +++ /dev/null
|
| @@ -1,152 +0,0 @@
|
| -// Copyright (c) 2013 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/browser/chromeos/login/user_image_loader.h"
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/bind_helpers.h"
|
| -#include "base/file_util.h"
|
| -#include "base/files/file_path.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/message_loop/message_loop_proxy.h"
|
| -#include "base/sequenced_task_runner.h"
|
| -#include "chrome/browser/chromeos/login/helper.h"
|
| -#include "chrome/browser/chromeos/login/user_image.h"
|
| -#include "skia/ext/image_operations.h"
|
| -#include "third_party/skia/include/core/SkBitmap.h"
|
| -#include "ui/gfx/codec/png_codec.h"
|
| -#include "ui/gfx/skbitmap_operations.h"
|
| -
|
| -namespace chromeos {
|
| -
|
| -UserImageLoader::ImageInfo::ImageInfo(const std::string& file_path,
|
| - int pixels_per_side,
|
| - const LoadedCallback& loaded_cb)
|
| - : file_path(file_path),
|
| - pixels_per_side(pixels_per_side),
|
| - loaded_cb(loaded_cb) {
|
| -}
|
| -
|
| -UserImageLoader::ImageInfo::~ImageInfo() {
|
| -}
|
| -
|
| -UserImageLoader::UserImageLoader(
|
| - ImageDecoder::ImageCodec image_codec,
|
| - scoped_refptr<base::SequencedTaskRunner> background_task_runner)
|
| - : foreground_task_runner_(base::MessageLoopProxy::current()),
|
| - background_task_runner_(background_task_runner),
|
| - image_codec_(image_codec) {
|
| -}
|
| -
|
| -UserImageLoader::~UserImageLoader() {
|
| -}
|
| -
|
| -void UserImageLoader::Start(const std::string& filepath,
|
| - int pixels_per_side,
|
| - const LoadedCallback& loaded_cb) {
|
| - background_task_runner_->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&UserImageLoader::ReadAndDecodeImage,
|
| - this,
|
| - ImageInfo(filepath, pixels_per_side, loaded_cb)));
|
| -}
|
| -
|
| -void UserImageLoader::Start(scoped_ptr<std::string> data,
|
| - int pixels_per_side,
|
| - const LoadedCallback& 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 ImageInfo& image_info) {
|
| - DCHECK(background_task_runner_->RunsTasksOnCurrentThread());
|
| -
|
| - scoped_ptr<std::string> data(new std::string);
|
| - if (!base::ReadFileToString(base::FilePath(image_info.file_path), data.get()))
|
| - LOG(ERROR) << "Failed to read image " << image_info.file_path;
|
| -
|
| - // In case ReadFileToString() fails, |data| is empty and DecodeImage() calls
|
| - // back to OnDecodeImageFailed().
|
| - DecodeImage(data.Pass(), image_info);
|
| -}
|
| -
|
| -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_);
|
| -}
|
| -
|
| -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);
|
| -
|
| - SkBitmap final_image = decoded_image;
|
| -
|
| - if (target_size > 0) {
|
| - // Auto crop the image, taking the largest square in the center.
|
| - 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,
|
| - skia::ImageOperations::RESIZE_LANCZOS3,
|
| - target_size,
|
| - target_size);
|
| - } else {
|
| - final_image = cropped_image;
|
| - }
|
| - }
|
| - // Make the SkBitmap immutable as we won't modify it. This is important
|
| - // because otherwise it gets duplicated during painting, wasting memory.
|
| - final_image.setImmutable();
|
| - gfx::ImageSkia final_image_skia =
|
| - 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,
|
| - base::Bind(loaded_cb, user_image));
|
| -}
|
| -
|
| -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, UserImage()));
|
| -}
|
| -
|
| -} // namespace chromeos
|
|
|