12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/thumbnails/simple_thumbnail_crop.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/thumbnails/thumbnailing_context.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/render_messages.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/notification_service.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/notification_types.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/test/mock_render_process_host.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/test/test_renderer_host.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "skia/ext/platform_canvas.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/skia/include/core/SkColorPriv.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/canvas.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/surface/transport_dib.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using content::WebContents; 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using thumbnails::SimpleThumbnailCrop; 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef testing::Test SimpleThumbnailCropTest; 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SimpleThumbnailCropTest, CalculateBoringScore_Empty) { 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkBitmap bitmap; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_DOUBLE_EQ(1.0, SimpleThumbnailCrop::CalculateBoringScore(bitmap)); 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SimpleThumbnailCropTest, CalculateBoringScore_SingleColor) { 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Size kSize(20, 10); 3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) gfx::Canvas canvas(kSize, 1.0f, true); 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fill all pixels in black. 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) canvas.FillRect(gfx::Rect(kSize), SK_ColorBLACK); 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkBitmap bitmap = 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false); 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The thumbnail should deserve the highest boring score. 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_DOUBLE_EQ(1.0, SimpleThumbnailCrop::CalculateBoringScore(bitmap)); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SimpleThumbnailCropTest, CalculateBoringScore_TwoColors) { 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Size kSize(20, 10); 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) gfx::Canvas canvas(kSize, 1.0f, true); 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fill all pixels in black. 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) canvas.FillRect(gfx::Rect(kSize), SK_ColorBLACK); 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fill the left half pixels in white. 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) canvas.FillRect(gfx::Rect(0, 0, kSize.width() / 2, kSize.height()), 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SK_ColorWHITE); 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkBitmap bitmap = 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false); 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(kSize.width(), bitmap.width()); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(kSize.height(), bitmap.height()); 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The thumbnail should be less boring because two colors are used. 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_DOUBLE_EQ(0.5, SimpleThumbnailCrop::CalculateBoringScore(bitmap)); 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SimpleThumbnailCropTest, GetClippedBitmap_TallerThanWide) { 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The input bitmap is vertically long. 6368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) gfx::Canvas canvas(gfx::Size(40, 90), 1.0f, true); 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkBitmap bitmap = 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The desired size is square. 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) thumbnails::ClipResult clip_result = thumbnails::CLIP_RESULT_NOT_CLIPPED; 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkBitmap clipped_bitmap = SimpleThumbnailCrop::GetClippedBitmap( 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bitmap, 10, 10, &clip_result); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The clipped bitmap should be square. 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(40, clipped_bitmap.width()); 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(40, clipped_bitmap.height()); 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The input was taller than wide. 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(thumbnails::CLIP_RESULT_TALLER_THAN_WIDE, clip_result); 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SimpleThumbnailCropTest, GetClippedBitmap_WiderThanTall) { 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The input bitmap is horizontally long. 8068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) gfx::Canvas canvas(gfx::Size(70, 40), 1.0f, true); 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkBitmap bitmap = 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false); 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The desired size is square. 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) thumbnails::ClipResult clip_result = thumbnails::CLIP_RESULT_NOT_CLIPPED; 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkBitmap clipped_bitmap = SimpleThumbnailCrop::GetClippedBitmap( 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bitmap, 10, 10, &clip_result); 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The clipped bitmap should be square. 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(40, clipped_bitmap.width()); 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(40, clipped_bitmap.height()); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The input was wider than tall. 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(thumbnails::CLIP_RESULT_WIDER_THAN_TALL, clip_result); 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SimpleThumbnailCropTest, GetClippedBitmap_TooWiderThanTall) { 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The input bitmap is horizontally very long. 9768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) gfx::Canvas canvas(gfx::Size(90, 40), 1.0f, true); 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkBitmap bitmap = 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false); 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The desired size is square. 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) thumbnails::ClipResult clip_result = thumbnails::CLIP_RESULT_NOT_CLIPPED; 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkBitmap clipped_bitmap = SimpleThumbnailCrop::GetClippedBitmap( 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bitmap, 10, 10, &clip_result); 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The clipped bitmap should be square. 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(40, clipped_bitmap.width()); 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(40, clipped_bitmap.height()); 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The input was wider than tall. 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(thumbnails::CLIP_RESULT_MUCH_WIDER_THAN_TALL, clip_result); 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SimpleThumbnailCropTest, GetClippedBitmap_NotClipped) { 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The input bitmap is square. 11468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) gfx::Canvas canvas(gfx::Size(40, 40), 1.0f, true); 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkBitmap bitmap = 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false); 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The desired size is square. 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) thumbnails::ClipResult clip_result = thumbnails::CLIP_RESULT_NOT_CLIPPED; 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkBitmap clipped_bitmap = SimpleThumbnailCrop::GetClippedBitmap( 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bitmap, 10, 10, &clip_result); 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The clipped bitmap should be square. 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(40, clipped_bitmap.width()); 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(40, clipped_bitmap.height()); 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // There was no need to clip. 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(thumbnails::CLIP_RESULT_NOT_CLIPPED, clip_result); 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SimpleThumbnailCropTest, GetClippedBitmap_NonSquareOutput) { 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The input bitmap is square. 13168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) gfx::Canvas canvas(gfx::Size(40, 40), 1.0f, true); 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkBitmap bitmap = 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false); 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The desired size is horizontally long. 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) thumbnails::ClipResult clip_result = thumbnails::CLIP_RESULT_NOT_CLIPPED; 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkBitmap clipped_bitmap = SimpleThumbnailCrop::GetClippedBitmap( 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bitmap, 20, 10, &clip_result); 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The clipped bitmap should have the same aspect ratio of the desired size. 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(40, clipped_bitmap.width()); 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(20, clipped_bitmap.height()); 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The input was taller than wide. 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(thumbnails::CLIP_RESULT_TALLER_THAN_WIDE, clip_result); 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SimpleThumbnailCropTest, GetCanvasCopyInfo) { 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size thumbnail_size(200, 120); 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float desired_aspect = 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<float>(thumbnail_size.width()) / thumbnail_size.height(); 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<thumbnails::ThumbnailingAlgorithm> algorithm( 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new SimpleThumbnailCrop(thumbnail_size)); 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect clipping_rect_result; 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size target_size_result; 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) thumbnails::ClipResult clip_result = algorithm->GetCanvasCopyInfo( 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size(400, 210), 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::SCALE_FACTOR_200P, 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &clipping_rect_result, 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &target_size_result); 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size clipping_size = clipping_rect_result.size(); 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float clip_aspect = 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<float>(clipping_size.width()) / clipping_size.height(); 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(thumbnails::CLIP_RESULT_WIDER_THAN_TALL, clip_result); 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(thumbnail_size, target_size_result); 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NEAR(desired_aspect, clip_aspect, 0.01); 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) clip_result = algorithm->GetCanvasCopyInfo( 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size(600, 200), 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::SCALE_FACTOR_200P, 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &clipping_rect_result, 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &target_size_result); 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) clipping_size = clipping_rect_result.size(); 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) clip_aspect = 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<float>(clipping_size.width()) / clipping_size.height(); 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(thumbnails::CLIP_RESULT_MUCH_WIDER_THAN_TALL, clip_result); 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(thumbnail_size, target_size_result); 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NEAR(desired_aspect, clip_aspect, 0.01); 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) clip_result = algorithm->GetCanvasCopyInfo( 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size(300, 600), 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::SCALE_FACTOR_200P, 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &clipping_rect_result, 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &target_size_result); 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) clipping_size = clipping_rect_result.size(); 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) clip_aspect = 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<float>(clipping_size.width()) / clipping_size.height(); 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(thumbnails::CLIP_RESULT_TALLER_THAN_WIDE, clip_result); 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(thumbnail_size, target_size_result); 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NEAR(desired_aspect, clip_aspect, 0.01); 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) clip_result = algorithm->GetCanvasCopyInfo( 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size(200, 100), 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::SCALE_FACTOR_200P, 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &clipping_rect_result, 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &target_size_result); 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(thumbnails::CLIP_RESULT_SOURCE_IS_SMALLER, clip_result); 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(thumbnail_size, target_size_result); 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 199868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 200868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)TEST_F(SimpleThumbnailCropTest, GetClippingRect) { 201868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const gfx::Size desired_size(300, 200); 202868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) thumbnails::ClipResult clip_result; 203868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Try out 'microsource'. 204868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) gfx::Rect clip_rect = SimpleThumbnailCrop::GetClippingRect( 205868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) gfx::Size(300, 199), desired_size, &clip_result); 206868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(thumbnails::CLIP_RESULT_SOURCE_IS_SMALLER, clip_result); 207868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(gfx::Point(0, 0).ToString(), clip_rect.origin().ToString()); 208868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(desired_size.ToString(), clip_rect.size().ToString()); 209868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 210868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Portrait source. 211868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) clip_rect = SimpleThumbnailCrop::GetClippingRect( 212868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) gfx::Size(500, 1200), desired_size, &clip_result); 213868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(thumbnails::CLIP_RESULT_TALLER_THAN_WIDE, clip_result); 214868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(gfx::Point(0, 0).ToString(), clip_rect.origin().ToString()); 215868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(500, clip_rect.width()); 216868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_GE(1200, clip_rect.height()); 217868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 218868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) clip_rect = SimpleThumbnailCrop::GetClippingRect( 219868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) gfx::Size(2000, 800), desired_size, &clip_result); 220868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(clip_result == thumbnails::CLIP_RESULT_WIDER_THAN_TALL || 221868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) clip_result == thumbnails::CLIP_RESULT_MUCH_WIDER_THAN_TALL); 222868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(0, clip_rect.y()); 223868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_LT(0, clip_rect.x()); 224868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_GE(2000, clip_rect.width()); 225868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(800, clip_rect.height()); 226868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 227868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) clip_rect = SimpleThumbnailCrop::GetClippingRect( 228868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) gfx::Size(900, 600), desired_size, &clip_result); 229868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(thumbnails::CLIP_RESULT_NOT_CLIPPED, clip_result); 230868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(gfx::Point(0, 0).ToString(), clip_rect.origin().ToString()); 231868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(gfx::Size(900, 600).ToString(), clip_rect.size().ToString()); 232868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 233