| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/gfx/icon_util.h" | 5 #include "ui/gfx/icon_util.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <memory> |
| 9 #include <vector> | 10 #include <vector> |
| 10 | 11 |
| 11 #include "base/files/file_util.h" | 12 #include "base/files/file_util.h" |
| 12 #include "base/files/scoped_temp_dir.h" | 13 #include "base/files/scoped_temp_dir.h" |
| 13 #include "base/memory/scoped_ptr.h" | |
| 14 #include "base/path_service.h" | 14 #include "base/path_service.h" |
| 15 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
| 16 #include "third_party/skia/include/core/SkBitmap.h" | 16 #include "third_party/skia/include/core/SkBitmap.h" |
| 17 #include "ui/gfx/geometry/size.h" | 17 #include "ui/gfx/geometry/size.h" |
| 18 #include "ui/gfx/gfx_paths.h" | 18 #include "ui/gfx/gfx_paths.h" |
| 19 #include "ui/gfx/icon_util_unittests_resource.h" | 19 #include "ui/gfx/icon_util_unittests_resource.h" |
| 20 #include "ui/gfx/image/image.h" | 20 #include "ui/gfx/image/image.h" |
| 21 #include "ui/gfx/image/image_family.h" | 21 #include "ui/gfx/image/image_family.h" |
| 22 | 22 |
| 23 namespace { | 23 namespace { |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 154 // Invalid size parameter. | 154 // Invalid size parameter. |
| 155 gfx::Size invalid_icon_size(kSmallIconHeight, 0); | 155 gfx::Size invalid_icon_size(kSmallIconHeight, 0); |
| 156 EXPECT_EQ(IconUtil::CreateSkBitmapFromHICON(icon.get(), invalid_icon_size), | 156 EXPECT_EQ(IconUtil::CreateSkBitmapFromHICON(icon.get(), invalid_icon_size), |
| 157 static_cast<SkBitmap*>(NULL)); | 157 static_cast<SkBitmap*>(NULL)); |
| 158 | 158 |
| 159 // Invalid icon. | 159 // Invalid icon. |
| 160 EXPECT_EQ(IconUtil::CreateSkBitmapFromHICON(NULL, icon_size), | 160 EXPECT_EQ(IconUtil::CreateSkBitmapFromHICON(NULL, icon_size), |
| 161 static_cast<SkBitmap*>(NULL)); | 161 static_cast<SkBitmap*>(NULL)); |
| 162 | 162 |
| 163 // The following code should succeed. | 163 // The following code should succeed. |
| 164 scoped_ptr<SkBitmap> bitmap; | 164 std::unique_ptr<SkBitmap> bitmap; |
| 165 bitmap.reset(IconUtil::CreateSkBitmapFromHICON(icon.get(), icon_size)); | 165 bitmap.reset(IconUtil::CreateSkBitmapFromHICON(icon.get(), icon_size)); |
| 166 EXPECT_NE(bitmap.get(), static_cast<SkBitmap*>(NULL)); | 166 EXPECT_NE(bitmap.get(), static_cast<SkBitmap*>(NULL)); |
| 167 } | 167 } |
| 168 | 168 |
| 169 // The following test case makes sure IconUtil::CreateHICONFromSkBitmap fails | 169 // The following test case makes sure IconUtil::CreateHICONFromSkBitmap fails |
| 170 // gracefully when called with invalid input parameters. | 170 // gracefully when called with invalid input parameters. |
| 171 TEST_F(IconUtilTest, TestBitmapToIconInvalidParameters) { | 171 TEST_F(IconUtilTest, TestBitmapToIconInvalidParameters) { |
| 172 ScopedHICON icon; | 172 ScopedHICON icon; |
| 173 scoped_ptr<SkBitmap> bitmap; | 173 std::unique_ptr<SkBitmap> bitmap; |
| 174 | 174 |
| 175 // Wrong bitmap format. | 175 // Wrong bitmap format. |
| 176 bitmap.reset(new SkBitmap); | 176 bitmap.reset(new SkBitmap); |
| 177 ASSERT_NE(bitmap.get(), static_cast<SkBitmap*>(NULL)); | 177 ASSERT_NE(bitmap.get(), static_cast<SkBitmap*>(NULL)); |
| 178 bitmap->setInfo(SkImageInfo::MakeA8(kSmallIconWidth, kSmallIconHeight)); | 178 bitmap->setInfo(SkImageInfo::MakeA8(kSmallIconWidth, kSmallIconHeight)); |
| 179 icon = IconUtil::CreateHICONFromSkBitmap(*bitmap); | 179 icon = IconUtil::CreateHICONFromSkBitmap(*bitmap); |
| 180 EXPECT_FALSE(icon.is_valid()); | 180 EXPECT_FALSE(icon.is_valid()); |
| 181 | 181 |
| 182 // Invalid bitmap size. | 182 // Invalid bitmap size. |
| 183 bitmap.reset(new SkBitmap); | 183 bitmap.reset(new SkBitmap); |
| 184 ASSERT_NE(bitmap.get(), static_cast<SkBitmap*>(NULL)); | 184 ASSERT_NE(bitmap.get(), static_cast<SkBitmap*>(NULL)); |
| 185 bitmap->setInfo(SkImageInfo::MakeN32Premul(0, 0)); | 185 bitmap->setInfo(SkImageInfo::MakeN32Premul(0, 0)); |
| 186 icon = IconUtil::CreateHICONFromSkBitmap(*bitmap); | 186 icon = IconUtil::CreateHICONFromSkBitmap(*bitmap); |
| 187 EXPECT_FALSE(icon.is_valid()); | 187 EXPECT_FALSE(icon.is_valid()); |
| 188 | 188 |
| 189 // Valid bitmap configuration but no pixels allocated. | 189 // Valid bitmap configuration but no pixels allocated. |
| 190 bitmap.reset(new SkBitmap); | 190 bitmap.reset(new SkBitmap); |
| 191 ASSERT_NE(bitmap.get(), static_cast<SkBitmap*>(NULL)); | 191 ASSERT_NE(bitmap.get(), static_cast<SkBitmap*>(NULL)); |
| 192 bitmap->setInfo(SkImageInfo::MakeN32Premul(kSmallIconWidth, | 192 bitmap->setInfo(SkImageInfo::MakeN32Premul(kSmallIconWidth, |
| 193 kSmallIconHeight)); | 193 kSmallIconHeight)); |
| 194 icon = IconUtil::CreateHICONFromSkBitmap(*bitmap); | 194 icon = IconUtil::CreateHICONFromSkBitmap(*bitmap); |
| 195 EXPECT_FALSE(icon.is_valid()); | 195 EXPECT_FALSE(icon.is_valid()); |
| 196 } | 196 } |
| 197 | 197 |
| 198 // The following test case makes sure IconUtil::CreateIconFileFromImageFamily | 198 // The following test case makes sure IconUtil::CreateIconFileFromImageFamily |
| 199 // fails gracefully when called with invalid input parameters. | 199 // fails gracefully when called with invalid input parameters. |
| 200 TEST_F(IconUtilTest, TestCreateIconFileInvalidParameters) { | 200 TEST_F(IconUtilTest, TestCreateIconFileInvalidParameters) { |
| 201 scoped_ptr<SkBitmap> bitmap; | 201 std::unique_ptr<SkBitmap> bitmap; |
| 202 gfx::ImageFamily image_family; | 202 gfx::ImageFamily image_family; |
| 203 base::FilePath valid_icon_filename = temp_directory_.path().AppendASCII( | 203 base::FilePath valid_icon_filename = temp_directory_.path().AppendASCII( |
| 204 kTempIconFilename); | 204 kTempIconFilename); |
| 205 base::FilePath invalid_icon_filename = temp_directory_.path().AppendASCII( | 205 base::FilePath invalid_icon_filename = temp_directory_.path().AppendASCII( |
| 206 "<>?.ico"); | 206 "<>?.ico"); |
| 207 | 207 |
| 208 // Wrong bitmap format. | 208 // Wrong bitmap format. |
| 209 bitmap.reset(new SkBitmap); | 209 bitmap.reset(new SkBitmap); |
| 210 ASSERT_NE(bitmap.get(), static_cast<SkBitmap*>(NULL)); | 210 ASSERT_NE(bitmap.get(), static_cast<SkBitmap*>(NULL)); |
| 211 // Must allocate pixels or else ImageSkia will ignore the bitmap and just | 211 // Must allocate pixels or else ImageSkia will ignore the bitmap and just |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 264 gfx::ImageFamily image_family; | 264 gfx::ImageFamily image_family; |
| 265 image_family.Add(gfx::Image()); | 265 image_family.Add(gfx::Image()); |
| 266 EXPECT_FALSE(IconUtil::CreateIconFileFromImageFamily(image_family, | 266 EXPECT_FALSE(IconUtil::CreateIconFileFromImageFamily(image_family, |
| 267 icon_filename)); | 267 icon_filename)); |
| 268 EXPECT_FALSE(base::PathExists(icon_filename)); | 268 EXPECT_FALSE(base::PathExists(icon_filename)); |
| 269 } | 269 } |
| 270 | 270 |
| 271 // This test case makes sure that when we load an icon from disk and convert | 271 // This test case makes sure that when we load an icon from disk and convert |
| 272 // the HICON into a bitmap, the bitmap has the expected format and dimensions. | 272 // the HICON into a bitmap, the bitmap has the expected format and dimensions. |
| 273 TEST_F(IconUtilTest, TestCreateSkBitmapFromHICON) { | 273 TEST_F(IconUtilTest, TestCreateSkBitmapFromHICON) { |
| 274 scoped_ptr<SkBitmap> bitmap; | 274 std::unique_ptr<SkBitmap> bitmap; |
| 275 base::FilePath small_icon_filename = test_data_directory_.AppendASCII( | 275 base::FilePath small_icon_filename = test_data_directory_.AppendASCII( |
| 276 kSmallIconName); | 276 kSmallIconName); |
| 277 gfx::Size small_icon_size(kSmallIconWidth, kSmallIconHeight); | 277 gfx::Size small_icon_size(kSmallIconWidth, kSmallIconHeight); |
| 278 ScopedHICON small_icon(LoadIconFromFile( | 278 ScopedHICON small_icon(LoadIconFromFile( |
| 279 small_icon_filename, small_icon_size.width(), small_icon_size.height())); | 279 small_icon_filename, small_icon_size.width(), small_icon_size.height())); |
| 280 ASSERT_TRUE(small_icon.is_valid()); | 280 ASSERT_TRUE(small_icon.is_valid()); |
| 281 bitmap.reset( | 281 bitmap.reset( |
| 282 IconUtil::CreateSkBitmapFromHICON(small_icon.get(), small_icon_size)); | 282 IconUtil::CreateSkBitmapFromHICON(small_icon.get(), small_icon_size)); |
| 283 ASSERT_NE(bitmap.get(), static_cast<SkBitmap*>(NULL)); | 283 ASSERT_NE(bitmap.get(), static_cast<SkBitmap*>(NULL)); |
| 284 EXPECT_EQ(bitmap->width(), small_icon_size.width()); | 284 EXPECT_EQ(bitmap->width(), small_icon_size.width()); |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 398 image_family.clear(); | 398 image_family.clear(); |
| 399 image_family.Add(gfx::Image()); | 399 image_family.Add(gfx::Image()); |
| 400 image_family.Add(gfx::Image::CreateFrom1xBitmap(CreateBlackSkBitmap(16, 16))); | 400 image_family.Add(gfx::Image::CreateFrom1xBitmap(CreateBlackSkBitmap(16, 16))); |
| 401 ASSERT_TRUE(IconUtil::CreateIconFileFromImageFamily(image_family, | 401 ASSERT_TRUE(IconUtil::CreateIconFileFromImageFamily(image_family, |
| 402 icon_filename)); | 402 icon_filename)); |
| 403 CheckAllIconSizes(icon_filename, 48); | 403 CheckAllIconSizes(icon_filename, 48); |
| 404 } | 404 } |
| 405 | 405 |
| 406 TEST_F(IconUtilTest, TestCreateImageFamilyFromIconResource) { | 406 TEST_F(IconUtilTest, TestCreateImageFamilyFromIconResource) { |
| 407 HMODULE module = GetModuleHandle(NULL); | 407 HMODULE module = GetModuleHandle(NULL); |
| 408 scoped_ptr<gfx::ImageFamily> family( | 408 std::unique_ptr<gfx::ImageFamily> family( |
| 409 IconUtil::CreateImageFamilyFromIconResource(module, IDR_MAINFRAME)); | 409 IconUtil::CreateImageFamilyFromIconResource(module, IDR_MAINFRAME)); |
| 410 ASSERT_TRUE(family.get()); | 410 ASSERT_TRUE(family.get()); |
| 411 EXPECT_FALSE(family->empty()); | 411 EXPECT_FALSE(family->empty()); |
| 412 std::vector<gfx::Image> images; | 412 std::vector<gfx::Image> images; |
| 413 for (const auto& image : *family) | 413 for (const auto& image : *family) |
| 414 images.push_back(image); | 414 images.push_back(image); |
| 415 | 415 |
| 416 // Assert that the family contains all of the images from the icon resource. | 416 // Assert that the family contains all of the images from the icon resource. |
| 417 EXPECT_EQ(5u, images.size()); | 417 EXPECT_EQ(5u, images.size()); |
| 418 EXPECT_EQ(16, images[0].Width()); | 418 EXPECT_EQ(16, images[0].Width()); |
| 419 EXPECT_EQ(24, images[1].Width()); | 419 EXPECT_EQ(24, images[1].Width()); |
| 420 EXPECT_EQ(32, images[2].Width()); | 420 EXPECT_EQ(32, images[2].Width()); |
| 421 EXPECT_EQ(48, images[3].Width()); | 421 EXPECT_EQ(48, images[3].Width()); |
| 422 EXPECT_EQ(256, images[4].Width()); | 422 EXPECT_EQ(256, images[4].Width()); |
| 423 } | 423 } |
| 424 | 424 |
| 425 // This tests that kNumIconDimensionsUpToMediumSize has the correct value. | 425 // This tests that kNumIconDimensionsUpToMediumSize has the correct value. |
| 426 TEST_F(IconUtilTest, TestNumIconDimensionsUpToMediumSize) { | 426 TEST_F(IconUtilTest, TestNumIconDimensionsUpToMediumSize) { |
| 427 ASSERT_LE(IconUtil::kNumIconDimensionsUpToMediumSize, | 427 ASSERT_LE(IconUtil::kNumIconDimensionsUpToMediumSize, |
| 428 IconUtil::kNumIconDimensions); | 428 IconUtil::kNumIconDimensions); |
| 429 EXPECT_EQ(IconUtil::kMediumIconSize, | 429 EXPECT_EQ(IconUtil::kMediumIconSize, |
| 430 IconUtil::kIconDimensions[ | 430 IconUtil::kIconDimensions[ |
| 431 IconUtil::kNumIconDimensionsUpToMediumSize - 1]); | 431 IconUtil::kNumIconDimensionsUpToMediumSize - 1]); |
| 432 } | 432 } |
| OLD | NEW |