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 3 // found in the LICENSE file. 4 5 #include "chrome/browser/chromeos/login/users/avatar/user_image_manager_test_util.h" 6 7 #include <string> 8 9 #include "base/file_util.h" 10 #include "base/memory/ref_counted.h" 11 #include "base/message_loop/message_loop_proxy.h" 12 #include "third_party/skia/include/core/SkBitmap.h" 13 #include "ui/gfx/image/image_skia.h" 14 #include "ui/gfx/image/image_skia_rep.h" 15 16 namespace chromeos { 17 namespace test { 18 19 const char kUserAvatarImage1RelativePath[] = "chromeos/avatar1.jpg"; 20 const char kUserAvatarImage2RelativePath[] = "chromeos/avatar2.jpg"; 21 22 bool AreImagesEqual(const gfx::ImageSkia& first, const gfx::ImageSkia& second) { 23 if (first.width() != second.width() || first.height() != second.height()) 24 return false; 25 const SkBitmap* first_bitmap = first.bitmap(); 26 const SkBitmap* second_bitmap = second.bitmap(); 27 if (!first_bitmap && !second_bitmap) 28 return true; 29 if (!first_bitmap || !second_bitmap) 30 return false; 31 32 const size_t size = first_bitmap->getSize(); 33 if (second_bitmap->getSize() != size) 34 return false; 35 36 SkAutoLockPixels first_pixel_lock(*first_bitmap); 37 SkAutoLockPixels second_pixel_lock(*second_bitmap); 38 uint8_t* first_data = reinterpret_cast<uint8_t*>(first_bitmap->getPixels()); 39 uint8_t* second_data = reinterpret_cast<uint8_t*>(second_bitmap->getPixels()); 40 for (size_t i = 0; i < size; ++i) { 41 if (first_data[i] != second_data[i]) 42 return false; 43 } 44 return true; 45 } 46 47 ImageLoader::ImageLoader(const base::FilePath& path) : path_(path) { 48 } 49 50 ImageLoader::~ImageLoader() { 51 } 52 53 scoped_ptr<gfx::ImageSkia> ImageLoader::Load() { 54 std::string image_data; 55 ReadFileToString(path_, &image_data); 56 scoped_refptr<ImageDecoder> image_decoder = new ImageDecoder( 57 this, 58 image_data, 59 ImageDecoder::ROBUST_JPEG_CODEC); 60 image_decoder->Start(base::MessageLoopProxy::current()); 61 run_loop_.Run(); 62 return decoded_image_.Pass(); 63 } 64 65 void ImageLoader::OnImageDecoded(const ImageDecoder* decoder, 66 const SkBitmap& decoded_image) { 67 decoded_image_.reset( 68 new gfx::ImageSkia(gfx::ImageSkiaRep(decoded_image, 1.0f))); 69 run_loop_.Quit(); 70 } 71 72 void ImageLoader::OnDecodeImageFailed(const ImageDecoder* decoder) { 73 run_loop_.Quit(); 74 } 75 76 } // namespace test 77 } // namespace chromeos 78