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 |