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/profiles/profile_avatar_icon_util.h" 6 7 #include "grit/theme_resources.h" 8 #include "testing/gtest/include/gtest/gtest.h" 9 #include "ui/base/resource/resource_bundle.h" 10 #include "ui/gfx/canvas.h" 11 #include "ui/gfx/image/image_skia.h" 12 #include "ui/gfx/image/image_skia_rep.h" 13 #include "ui/gfx/image/image_unittest_util.h" 14 15 namespace { 16 17 // Helper function to check that the image is sized properly 18 // and supports multiple pixel densities. 19 void VerifyScaling(gfx::Image& image, gfx::Size& size) { 20 gfx::Size canvas_size(100, 100); 21 gfx::Canvas canvas(canvas_size, 1.0f, false); 22 gfx::Canvas canvas2(canvas_size, 2.0f, false); 23 24 ASSERT_FALSE(gfx::test::IsEmpty(image)); 25 EXPECT_EQ(image.Size(), size); 26 27 gfx::ImageSkia image_skia = *image.ToImageSkia(); 28 canvas.DrawImageInt(image_skia, 15, 10); 29 EXPECT_TRUE(image.ToImageSkia()->HasRepresentation(1.0f)); 30 31 canvas2.DrawImageInt(image_skia, 15, 10); 32 EXPECT_TRUE(image.ToImageSkia()->HasRepresentation(2.0f)); 33 } 34 35 TEST(ProfileInfoUtilTest, SizedMenuIcon) { 36 // Test that an avatar icon isn't changed. 37 const gfx::Image& profile_image( 38 ResourceBundle::GetSharedInstance().GetImageNamed(IDR_PROFILE_AVATAR_0)); 39 gfx::Image result = 40 profiles::GetSizedAvatarIcon(profile_image, false, 50, 50); 41 42 EXPECT_FALSE(gfx::test::IsEmpty(result)); 43 EXPECT_TRUE(gfx::test::IsEqual(profile_image, result)); 44 45 // Test that a rectangular picture (e.g., GAIA image) is changed. 46 gfx::Image rect_picture(gfx::test::CreateImage()); 47 48 gfx::Size size(30, 20); 49 gfx::Image result2 = profiles::GetSizedAvatarIcon( 50 rect_picture, true, size.width(), size.height()); 51 52 VerifyScaling(result2, size); 53 } 54 55 TEST(ProfileInfoUtilTest, MenuIcon) { 56 // Test that an avatar icon isn't changed. 57 const gfx::Image& profile_image( 58 ResourceBundle::GetSharedInstance().GetImageNamed(IDR_PROFILE_AVATAR_0)); 59 gfx::Image result = profiles::GetAvatarIconForMenu(profile_image, false); 60 EXPECT_FALSE(gfx::test::IsEmpty(result)); 61 EXPECT_TRUE(gfx::test::IsEqual(profile_image, result)); 62 63 // Test that a rectangular picture is changed. 64 gfx::Image rect_picture(gfx::test::CreateImage()); 65 gfx::Size size(profiles::kAvatarIconWidth, profiles::kAvatarIconHeight); 66 gfx::Image result2 = profiles::GetAvatarIconForMenu(rect_picture, true); 67 68 VerifyScaling(result2, size); 69 } 70 71 TEST(ProfileInfoUtilTest, WebUIIcon) { 72 // Test that an avatar icon isn't changed. 73 const gfx::Image& profile_image( 74 ResourceBundle::GetSharedInstance().GetImageNamed(IDR_PROFILE_AVATAR_0)); 75 gfx::Image result = profiles::GetAvatarIconForWebUI(profile_image, false); 76 EXPECT_FALSE(gfx::test::IsEmpty(result)); 77 EXPECT_TRUE(gfx::test::IsEqual(profile_image, result)); 78 79 // Test that a rectangular picture is changed. 80 gfx::Image rect_picture(gfx::test::CreateImage()); 81 gfx::Size size(profiles::kAvatarIconWidth, profiles::kAvatarIconHeight); 82 gfx::Image result2 = profiles::GetAvatarIconForWebUI(rect_picture, true); 83 84 VerifyScaling(result2, size); 85 } 86 87 TEST(ProfileInfoUtilTest, TitleBarIcon) { 88 int width = 100; 89 int height = 40; 90 91 // Test that an avatar icon isn't changed. 92 const gfx::Image& profile_image( 93 ResourceBundle::GetSharedInstance().GetImageNamed(IDR_PROFILE_AVATAR_0)); 94 gfx::Image result = profiles::GetAvatarIconForTitleBar( 95 profile_image, false, width, height); 96 EXPECT_FALSE(gfx::test::IsEmpty(result)); 97 EXPECT_TRUE(gfx::test::IsEqual(profile_image, result)); 98 99 // Test that a rectangular picture is changed. 100 gfx::Image rect_picture(gfx::test::CreateImage()); 101 102 gfx::Size size(width, height); 103 gfx::Image result2 = profiles::GetAvatarIconForTitleBar( 104 rect_picture, true, width, height); 105 106 VerifyScaling(result2, size); 107 } 108 109 } // namespace 110