1c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/profiles/profile_avatar_icon_util.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/theme_resources.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "ui/gfx/canvas.h" 118bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "ui/gfx/image/image_skia.h" 128bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "ui/gfx/image/image_skia_rep.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/image/image_unittest_util.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 178bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// Helper function to check that the image is sized properly 188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// and supports multiple pixel densities. 198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void VerifyScaling(gfx::Image& image, gfx::Size& size) { 208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) gfx::Size canvas_size(100, 100); 218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) gfx::Canvas canvas(canvas_size, 1.0f, false); 228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) gfx::Canvas canvas2(canvas_size, 2.0f, false); 238bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 248bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ASSERT_FALSE(gfx::test::IsEmpty(image)); 258bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(image.Size(), size); 268bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 278bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) gfx::ImageSkia image_skia = *image.ToImageSkia(); 288bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) canvas.DrawImageInt(image_skia, 15, 10); 298bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_TRUE(image.ToImageSkia()->HasRepresentation(1.0f)); 308bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 318bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) canvas2.DrawImageInt(image_skia, 15, 10); 328bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_TRUE(image.ToImageSkia()->HasRepresentation(2.0f)); 338bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 348bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)TEST(ProfileInfoUtilTest, SizedMenuIcon) { 3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Test that an avatar icon isn't changed. 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const gfx::Image& profile_image( 3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ResourceBundle::GetSharedInstance().GetImageNamed(IDR_PROFILE_AVATAR_0)); 3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) gfx::Image result = 400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch profiles::GetSizedAvatarIcon(profile_image, false, 50, 50); 418bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(gfx::test::IsEmpty(result)); 4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(gfx::test::IsEqual(profile_image, result)); 4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 4568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Test that a rectangular picture (e.g., GAIA image) is changed. 4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) gfx::Image rect_picture(gfx::test::CreateImage()); 478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) gfx::Size size(30, 20); 490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch gfx::Image result2 = profiles::GetSizedAvatarIcon( 500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch rect_picture, true, size.width(), size.height()); 518bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 528bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) VerifyScaling(result2, size); 5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ProfileInfoUtilTest, MenuIcon) { 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test that an avatar icon isn't changed. 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Image& profile_image( 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResourceBundle::GetSharedInstance().GetImageNamed(IDR_PROFILE_AVATAR_0)); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Image result = profiles::GetAvatarIconForMenu(profile_image, false); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(gfx::test::IsEmpty(result)); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(gfx::test::IsEqual(profile_image, result)); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Test that a rectangular picture is changed. 6468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) gfx::Image rect_picture(gfx::test::CreateImage()); 658bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) gfx::Size size(profiles::kAvatarIconWidth, profiles::kAvatarIconHeight); 6668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) gfx::Image result2 = profiles::GetAvatarIconForMenu(rect_picture, true); 678bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) VerifyScaling(result2, size); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ProfileInfoUtilTest, WebUIIcon) { 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test that an avatar icon isn't changed. 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Image& profile_image( 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResourceBundle::GetSharedInstance().GetImageNamed(IDR_PROFILE_AVATAR_0)); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Image result = profiles::GetAvatarIconForWebUI(profile_image, false); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(gfx::test::IsEmpty(result)); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(gfx::test::IsEqual(profile_image, result)); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Test that a rectangular picture is changed. 8068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) gfx::Image rect_picture(gfx::test::CreateImage()); 818bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) gfx::Size size(profiles::kAvatarIconWidth, profiles::kAvatarIconHeight); 8268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) gfx::Image result2 = profiles::GetAvatarIconForWebUI(rect_picture, true); 838bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 848bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) VerifyScaling(result2, size); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ProfileInfoUtilTest, TitleBarIcon) { 888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) int width = 100; 898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) int height = 40; 908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test that an avatar icon isn't changed. 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Image& profile_image( 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResourceBundle::GetSharedInstance().GetImageNamed(IDR_PROFILE_AVATAR_0)); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Image result = profiles::GetAvatarIconForTitleBar( 958bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) profile_image, false, width, height); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(gfx::test::IsEmpty(result)); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(gfx::test::IsEqual(profile_image, result)); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Test that a rectangular picture is changed. 10068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) gfx::Image rect_picture(gfx::test::CreateImage()); 1018bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1028bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) gfx::Size size(width, height); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Image result2 = profiles::GetAvatarIconForTitleBar( 1048bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) rect_picture, true, width, height); 1058bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1068bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) VerifyScaling(result2, size); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 110