| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 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 "chrome/browser/extensions/bookmark_app_helper.h" | 5 #include "chrome/browser/extensions/bookmark_app_helper.h" |
| 6 | 6 |
| 7 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
| 8 #include "chrome/browser/extensions/extension_service.h" | 8 #include "chrome/browser/extensions/extension_service.h" |
| 9 #include "chrome/browser/extensions/extension_service_test_base.h" | 9 #include "chrome/browser/extensions/extension_service_test_base.h" |
| 10 #include "chrome/common/extensions/manifest_handlers/app_launch_info.h" | 10 #include "chrome/common/extensions/manifest_handlers/app_launch_info.h" |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 76 DISALLOW_COPY_AND_ASSIGN(BookmarkAppHelperExtensionServiceTest); | 76 DISALLOW_COPY_AND_ASSIGN(BookmarkAppHelperExtensionServiceTest); |
| 77 }; | 77 }; |
| 78 | 78 |
| 79 SkBitmap CreateSquareBitmapWithColor(int size, SkColor color) { | 79 SkBitmap CreateSquareBitmapWithColor(int size, SkColor color) { |
| 80 SkBitmap bitmap; | 80 SkBitmap bitmap; |
| 81 bitmap.allocN32Pixels(size, size); | 81 bitmap.allocN32Pixels(size, size); |
| 82 bitmap.eraseColor(color); | 82 bitmap.eraseColor(color); |
| 83 return bitmap; | 83 return bitmap; |
| 84 } | 84 } |
| 85 | 85 |
| 86 void ValidateBitmapSizeAndColor(SkBitmap bitmap, int size, SkColor color) { | |
| 87 // Obtain pixel lock to access pixels. | |
| 88 SkAutoLockPixels lock(bitmap); | |
| 89 EXPECT_EQ(color, bitmap.getColor(0, 0)); | |
| 90 EXPECT_EQ(size, bitmap.width()); | |
| 91 EXPECT_EQ(size, bitmap.height()); | |
| 92 } | |
| 93 | |
| 94 WebApplicationInfo::IconInfo CreateIconInfoWithBitmap(int size, SkColor color) { | 86 WebApplicationInfo::IconInfo CreateIconInfoWithBitmap(int size, SkColor color) { |
| 95 WebApplicationInfo::IconInfo icon_info; | 87 WebApplicationInfo::IconInfo icon_info; |
| 96 icon_info.width = size; | 88 icon_info.width = size; |
| 97 icon_info.height = size; | 89 icon_info.height = size; |
| 98 icon_info.data = CreateSquareBitmapWithColor(size, color); | 90 icon_info.data = CreateSquareBitmapWithColor(size, color); |
| 99 return icon_info; | 91 return icon_info; |
| 100 } | 92 } |
| 101 | 93 |
| 102 void ValidateWebApplicationInfo(base::Closure callback, | 94 void ValidateWebApplicationInfo(base::Closure callback, |
| 103 const WebApplicationInfo& expected, | 95 const WebApplicationInfo& expected, |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 227 base::RunLoop().RunUntilIdle(); | 219 base::RunLoop().RunUntilIdle(); |
| 228 EXPECT_TRUE(helper.extension()); | 220 EXPECT_TRUE(helper.extension()); |
| 229 const Extension* extension = | 221 const Extension* extension = |
| 230 service_->GetInstalledExtension(helper.extension()->id()); | 222 service_->GetInstalledExtension(helper.extension()->id()); |
| 231 EXPECT_TRUE(extension); | 223 EXPECT_TRUE(extension); |
| 232 EXPECT_EQ(1u, registry()->enabled_extensions().size()); | 224 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
| 233 EXPECT_TRUE(extension->from_bookmark()); | 225 EXPECT_TRUE(extension->from_bookmark()); |
| 234 EXPECT_EQ(kAppTitle, extension->name()); | 226 EXPECT_EQ(kAppTitle, extension->name()); |
| 235 EXPECT_EQ(kAppDescription, extension->description()); | 227 EXPECT_EQ(kAppDescription, extension->description()); |
| 236 EXPECT_EQ(GURL(kAppUrl), AppLaunchInfo::GetLaunchWebURL(extension)); | 228 EXPECT_EQ(GURL(kAppUrl), AppLaunchInfo::GetLaunchWebURL(extension)); |
| 237 EXPECT_FALSE( | 229 // The tiny icon should have been removed and only the generated ones used. |
| 238 IconsInfo::GetIconResource( | 230 EXPECT_TRUE( |
| 239 extension, kIconSizeTiny, ExtensionIconSet::MATCH_EXACTLY).empty()); | 231 IconsInfo::GetIconResource(extension, kIconSizeTiny, |
| 232 ExtensionIconSet::MATCH_EXACTLY).empty()); |
| 240 EXPECT_FALSE( | 233 EXPECT_FALSE( |
| 241 IconsInfo::GetIconResource( | 234 IconsInfo::GetIconResource( |
| 242 extension, kIconSizeSmall, ExtensionIconSet::MATCH_EXACTLY).empty()); | 235 extension, kIconSizeSmall, ExtensionIconSet::MATCH_EXACTLY).empty()); |
| 243 EXPECT_FALSE( | 236 EXPECT_FALSE( |
| 244 IconsInfo::GetIconResource(extension, | 237 IconsInfo::GetIconResource(extension, |
| 245 kIconSizeSmall * 2, | 238 kIconSizeSmall * 2, |
| 246 ExtensionIconSet::MATCH_EXACTLY).empty()); | 239 ExtensionIconSet::MATCH_EXACTLY).empty()); |
| 247 EXPECT_FALSE( | 240 EXPECT_FALSE( |
| 248 IconsInfo::GetIconResource( | 241 IconsInfo::GetIconResource( |
| 249 extension, kIconSizeMedium, ExtensionIconSet::MATCH_EXACTLY).empty()); | 242 extension, kIconSizeMedium, ExtensionIconSet::MATCH_EXACTLY).empty()); |
| 250 EXPECT_FALSE( | 243 EXPECT_FALSE( |
| 251 IconsInfo::GetIconResource(extension, | 244 IconsInfo::GetIconResource(extension, |
| 252 kIconSizeMedium * 2, | 245 kIconSizeMedium * 2, |
| 253 ExtensionIconSet::MATCH_EXACTLY).empty()); | 246 ExtensionIconSet::MATCH_EXACTLY).empty()); |
| 254 } | 247 } |
| 255 | 248 |
| 256 TEST_F(BookmarkAppHelperExtensionServiceTest, CreateAndUpdateBookmarkApp) { | 249 TEST_F(BookmarkAppHelperExtensionServiceTest, CreateAndUpdateBookmarkApp) { |
| 257 EXPECT_EQ(0u, registry()->enabled_extensions().size()); | 250 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
| 258 WebApplicationInfo web_app_info; | 251 WebApplicationInfo web_app_info; |
| 259 web_app_info.app_url = GURL(kAppUrl); | 252 web_app_info.app_url = GURL(kAppUrl); |
| 260 web_app_info.title = base::UTF8ToUTF16(kAppTitle); | 253 web_app_info.title = base::UTF8ToUTF16(kAppTitle); |
| 261 web_app_info.description = base::UTF8ToUTF16(kAppDescription); | 254 web_app_info.description = base::UTF8ToUTF16(kAppDescription); |
| 262 web_app_info.icons.push_back( | 255 web_app_info.icons.push_back( |
| 263 CreateIconInfoWithBitmap(kIconSizeSmall, SK_ColorRED)); | 256 CreateIconInfoWithBitmap(kIconSizeSmall, SK_ColorRED)); |
| 264 | 257 |
| 265 extensions::CreateOrUpdateBookmarkApp(service_, web_app_info); | 258 extensions::CreateOrUpdateBookmarkApp(service_, &web_app_info); |
| 266 base::RunLoop().RunUntilIdle(); | 259 base::RunLoop().RunUntilIdle(); |
| 267 | 260 |
| 268 { | 261 { |
| 269 EXPECT_EQ(1u, registry()->enabled_extensions().size()); | 262 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
| 270 const Extension* extension = | 263 const Extension* extension = |
| 271 registry()->enabled_extensions().begin()->get(); | 264 registry()->enabled_extensions().begin()->get(); |
| 272 EXPECT_TRUE(extension->from_bookmark()); | 265 EXPECT_TRUE(extension->from_bookmark()); |
| 273 EXPECT_EQ(kAppTitle, extension->name()); | 266 EXPECT_EQ(kAppTitle, extension->name()); |
| 274 EXPECT_EQ(kAppDescription, extension->description()); | 267 EXPECT_EQ(kAppDescription, extension->description()); |
| 275 EXPECT_EQ(GURL(kAppUrl), AppLaunchInfo::GetLaunchWebURL(extension)); | 268 EXPECT_EQ(GURL(kAppUrl), AppLaunchInfo::GetLaunchWebURL(extension)); |
| 276 EXPECT_FALSE(extensions::IconsInfo::GetIconResource( | 269 EXPECT_FALSE(extensions::IconsInfo::GetIconResource( |
| 277 extension, kIconSizeSmall, ExtensionIconSet::MATCH_EXACTLY) | 270 extension, kIconSizeSmall, ExtensionIconSet::MATCH_EXACTLY) |
| 278 .empty()); | 271 .empty()); |
| 279 } | 272 } |
| 280 | 273 |
| 281 web_app_info.title = base::UTF8ToUTF16(kAlternativeAppTitle); | 274 web_app_info.title = base::UTF8ToUTF16(kAlternativeAppTitle); |
| 282 web_app_info.icons[0] = CreateIconInfoWithBitmap(kIconSizeLarge, SK_ColorRED); | 275 web_app_info.icons[0] = CreateIconInfoWithBitmap(kIconSizeLarge, SK_ColorRED); |
| 283 | 276 |
| 284 extensions::CreateOrUpdateBookmarkApp(service_, web_app_info); | 277 extensions::CreateOrUpdateBookmarkApp(service_, &web_app_info); |
| 285 base::RunLoop().RunUntilIdle(); | 278 base::RunLoop().RunUntilIdle(); |
| 286 | 279 |
| 287 { | 280 { |
| 288 EXPECT_EQ(1u, registry()->enabled_extensions().size()); | 281 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
| 289 const Extension* extension = | 282 const Extension* extension = |
| 290 registry()->enabled_extensions().begin()->get(); | 283 registry()->enabled_extensions().begin()->get(); |
| 291 EXPECT_TRUE(extension->from_bookmark()); | 284 EXPECT_TRUE(extension->from_bookmark()); |
| 292 EXPECT_EQ(kAlternativeAppTitle, extension->name()); | 285 EXPECT_EQ(kAlternativeAppTitle, extension->name()); |
| 293 EXPECT_EQ(kAppDescription, extension->description()); | 286 EXPECT_EQ(kAppDescription, extension->description()); |
| 294 EXPECT_EQ(GURL(kAppUrl), AppLaunchInfo::GetLaunchWebURL(extension)); | 287 EXPECT_EQ(GURL(kAppUrl), AppLaunchInfo::GetLaunchWebURL(extension)); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 305 WebApplicationInfo web_app_info; | 298 WebApplicationInfo web_app_info; |
| 306 web_app_info.app_url = GURL(kAppUrl); | 299 web_app_info.app_url = GURL(kAppUrl); |
| 307 web_app_info.title = base::UTF8ToUTF16(kAppTitle); | 300 web_app_info.title = base::UTF8ToUTF16(kAppTitle); |
| 308 web_app_info.description = base::UTF8ToUTF16(kAppDescription); | 301 web_app_info.description = base::UTF8ToUTF16(kAppDescription); |
| 309 | 302 |
| 310 web_app_info.icons.push_back( | 303 web_app_info.icons.push_back( |
| 311 CreateIconInfoWithBitmap(kIconSizeSmall, SK_ColorRED)); | 304 CreateIconInfoWithBitmap(kIconSizeSmall, SK_ColorRED)); |
| 312 web_app_info.icons.push_back( | 305 web_app_info.icons.push_back( |
| 313 CreateIconInfoWithBitmap(kIconSizeLarge, SK_ColorRED)); | 306 CreateIconInfoWithBitmap(kIconSizeLarge, SK_ColorRED)); |
| 314 | 307 |
| 315 extensions::CreateOrUpdateBookmarkApp(service_, web_app_info); | 308 extensions::CreateOrUpdateBookmarkApp(service_, &web_app_info); |
| 316 base::RunLoop().RunUntilIdle(); | 309 base::RunLoop().RunUntilIdle(); |
| 317 | 310 |
| 318 EXPECT_EQ(1u, registry()->enabled_extensions().size()); | 311 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
| 319 base::RunLoop run_loop; | 312 base::RunLoop run_loop; |
| 320 extensions::GetWebApplicationInfoFromApp( | 313 extensions::GetWebApplicationInfoFromApp( |
| 321 profile_.get(), registry()->enabled_extensions().begin()->get(), | 314 profile_.get(), registry()->enabled_extensions().begin()->get(), |
| 322 base::Bind(&ValidateWebApplicationInfo, run_loop.QuitClosure(), | 315 base::Bind(&ValidateWebApplicationInfo, run_loop.QuitClosure(), |
| 323 web_app_info)); | 316 web_app_info)); |
| 324 run_loop.Run(); | 317 run_loop.Run(); |
| 325 } | 318 } |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 357 manifest.icons.push_back(icon); | 350 manifest.icons.push_back(icon); |
| 358 | 351 |
| 359 BookmarkAppHelper::UpdateWebAppInfoFromManifest(manifest, &web_app_info); | 352 BookmarkAppHelper::UpdateWebAppInfoFromManifest(manifest, &web_app_info); |
| 360 EXPECT_EQ(base::UTF8ToUTF16(kAppTitle), web_app_info.title); | 353 EXPECT_EQ(base::UTF8ToUTF16(kAppTitle), web_app_info.title); |
| 361 | 354 |
| 362 EXPECT_EQ(2u, web_app_info.icons.size()); | 355 EXPECT_EQ(2u, web_app_info.icons.size()); |
| 363 EXPECT_EQ(GURL(kAppIcon2), web_app_info.icons[0].url); | 356 EXPECT_EQ(GURL(kAppIcon2), web_app_info.icons[0].url); |
| 364 EXPECT_EQ(GURL(kAppIcon3), web_app_info.icons[1].url); | 357 EXPECT_EQ(GURL(kAppIcon3), web_app_info.icons[1].url); |
| 365 } | 358 } |
| 366 | 359 |
| 367 TEST_F(BookmarkAppHelperTest, ConstrainBitmapsToSizes) { | |
| 368 std::set<int> desired_sizes; | |
| 369 desired_sizes.insert(16); | |
| 370 desired_sizes.insert(32); | |
| 371 desired_sizes.insert(128); | |
| 372 desired_sizes.insert(256); | |
| 373 | |
| 374 { | |
| 375 std::vector<SkBitmap> bitmaps; | |
| 376 bitmaps.push_back(CreateSquareBitmapWithColor(16, SK_ColorRED)); | |
| 377 bitmaps.push_back(CreateSquareBitmapWithColor(32, SK_ColorGREEN)); | |
| 378 bitmaps.push_back(CreateSquareBitmapWithColor(48, SK_ColorBLUE)); | |
| 379 bitmaps.push_back(CreateSquareBitmapWithColor(144, SK_ColorYELLOW)); | |
| 380 | |
| 381 std::map<int, SkBitmap> results( | |
| 382 BookmarkAppHelper::ConstrainBitmapsToSizes(bitmaps, desired_sizes)); | |
| 383 | |
| 384 EXPECT_EQ(3u, results.size()); | |
| 385 ValidateBitmapSizeAndColor(results[16], 16, SK_ColorRED); | |
| 386 ValidateBitmapSizeAndColor(results[32], 32, SK_ColorGREEN); | |
| 387 ValidateBitmapSizeAndColor(results[128], 128, SK_ColorYELLOW); | |
| 388 } | |
| 389 { | |
| 390 std::vector<SkBitmap> bitmaps; | |
| 391 bitmaps.push_back(CreateSquareBitmapWithColor(512, SK_ColorRED)); | |
| 392 bitmaps.push_back(CreateSquareBitmapWithColor(18, SK_ColorGREEN)); | |
| 393 bitmaps.push_back(CreateSquareBitmapWithColor(33, SK_ColorBLUE)); | |
| 394 bitmaps.push_back(CreateSquareBitmapWithColor(17, SK_ColorYELLOW)); | |
| 395 | |
| 396 std::map<int, SkBitmap> results( | |
| 397 BookmarkAppHelper::ConstrainBitmapsToSizes(bitmaps, desired_sizes)); | |
| 398 | |
| 399 EXPECT_EQ(3u, results.size()); | |
| 400 ValidateBitmapSizeAndColor(results[16], 16, SK_ColorYELLOW); | |
| 401 ValidateBitmapSizeAndColor(results[32], 32, SK_ColorBLUE); | |
| 402 ValidateBitmapSizeAndColor(results[256], 256, SK_ColorRED); | |
| 403 } | |
| 404 } | |
| 405 | |
| 406 TEST_F(BookmarkAppHelperTest, IsValidBookmarkAppUrl) { | 360 TEST_F(BookmarkAppHelperTest, IsValidBookmarkAppUrl) { |
| 407 EXPECT_TRUE(IsValidBookmarkAppUrl(GURL("https://www.chromium.org"))); | 361 EXPECT_TRUE(IsValidBookmarkAppUrl(GURL("https://www.chromium.org"))); |
| 408 EXPECT_TRUE(IsValidBookmarkAppUrl(GURL("http://www.chromium.org/path"))); | 362 EXPECT_TRUE(IsValidBookmarkAppUrl(GURL("http://www.chromium.org/path"))); |
| 409 EXPECT_FALSE(IsValidBookmarkAppUrl(GURL("ftp://www.chromium.org"))); | 363 EXPECT_FALSE(IsValidBookmarkAppUrl(GURL("ftp://www.chromium.org"))); |
| 410 EXPECT_FALSE(IsValidBookmarkAppUrl(GURL("chrome://flags"))); | 364 EXPECT_FALSE(IsValidBookmarkAppUrl(GURL("chrome://flags"))); |
| 411 } | 365 } |
| 412 | 366 |
| 413 } // namespace extensions | 367 } // namespace extensions |
| OLD | NEW |