Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1354)

Side by Side Diff: chrome/browser/extensions/extension_icon_image_unittest.cc

Issue 12093036: Move Extension Location and Type enums to Manifest, and move InstallWarning to its own file. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/extension_icon_image.h" 5 #include "chrome/browser/extensions/extension_icon_image.h"
6 6
7 #include "base/json/json_file_value_serializer.h" 7 #include "base/json/json_file_value_serializer.h"
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "base/path_service.h" 9 #include "base/path_service.h"
10 #include "chrome/browser/extensions/image_loader.h" 10 #include "chrome/browser/extensions/image_loader.h"
11 #include "chrome/common/chrome_paths.h" 11 #include "chrome/common/chrome_paths.h"
12 #include "chrome/common/extensions/extension.h" 12 #include "chrome/common/extensions/extension.h"
13 #include "chrome/common/extensions/extension_constants.h" 13 #include "chrome/common/extensions/extension_constants.h"
14 #include "chrome/common/extensions/manifest.h"
14 #include "content/public/test/test_browser_thread.h" 15 #include "content/public/test/test_browser_thread.h"
15 #include "grit/theme_resources.h" 16 #include "grit/theme_resources.h"
16 #include "skia/ext/image_operations.h" 17 #include "skia/ext/image_operations.h"
17 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
18 #include "ui/base/resource/resource_bundle.h" 19 #include "ui/base/resource/resource_bundle.h"
19 #include "ui/gfx/image/image_skia_source.h" 20 #include "ui/gfx/image/image_skia_source.h"
20 #include "ui/gfx/skia_util.h" 21 #include "ui/gfx/skia_util.h"
21 22
22 using content::BrowserThread; 23 using content::BrowserThread;
23 using extensions::Extension; 24 using extensions::Extension;
24 using extensions::IconImage; 25 using extensions::IconImage;
26 using extensions::Manifest;
25 27
26 namespace { 28 namespace {
27 29
28 SkBitmap CreateBlankBitmapForScale(int size_dip, ui::ScaleFactor scale_factor) { 30 SkBitmap CreateBlankBitmapForScale(int size_dip, ui::ScaleFactor scale_factor) {
29 SkBitmap bitmap; 31 SkBitmap bitmap;
30 const float scale = ui::GetScaleFactorScale(scale_factor); 32 const float scale = ui::GetScaleFactorScale(scale_factor);
31 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 33 bitmap.setConfig(SkBitmap::kARGB_8888_Config,
32 static_cast<int>(size_dip * scale), 34 static_cast<int>(size_dip * scale),
33 static_cast<int>(size_dip * scale)); 35 static_cast<int>(size_dip * scale));
34 bitmap.allocPixels(); 36 bitmap.allocPixels();
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 quit_in_image_loaded_ = false; 134 quit_in_image_loaded_ = false;
133 } 135 }
134 136
135 int ImageLoadedCount() { 137 int ImageLoadedCount() {
136 int result = image_loaded_count_; 138 int result = image_loaded_count_;
137 image_loaded_count_ = 0; 139 image_loaded_count_ = 0;
138 return result; 140 return result;
139 } 141 }
140 142
141 scoped_refptr<Extension> CreateExtension(const char* name, 143 scoped_refptr<Extension> CreateExtension(const char* name,
142 Extension::Location location) { 144 Manifest::Location location) {
143 // Create and load an extension. 145 // Create and load an extension.
144 FilePath test_file; 146 FilePath test_file;
145 if (!PathService::Get(chrome::DIR_TEST_DATA, &test_file)) { 147 if (!PathService::Get(chrome::DIR_TEST_DATA, &test_file)) {
146 EXPECT_FALSE(true); 148 EXPECT_FALSE(true);
147 return NULL; 149 return NULL;
148 } 150 }
149 test_file = test_file.AppendASCII("extensions").AppendASCII(name); 151 test_file = test_file.AppendASCII("extensions").AppendASCII(name);
150 int error_code = 0; 152 int error_code = 0;
151 std::string error; 153 std::string error;
152 JSONFileValueSerializer serializer(test_file.AppendASCII("app.json")); 154 JSONFileValueSerializer serializer(test_file.AppendASCII("app.json"));
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 content::TestBrowserThread file_thread_; 202 content::TestBrowserThread file_thread_;
201 content::TestBrowserThread io_thread_; 203 content::TestBrowserThread io_thread_;
202 204
203 DISALLOW_COPY_AND_ASSIGN(ExtensionIconImageTest); 205 DISALLOW_COPY_AND_ASSIGN(ExtensionIconImageTest);
204 }; 206 };
205 207
206 } // namespace 208 } // namespace
207 209
208 TEST_F(ExtensionIconImageTest, Basic) { 210 TEST_F(ExtensionIconImageTest, Basic) {
209 scoped_refptr<Extension> extension(CreateExtension( 211 scoped_refptr<Extension> extension(CreateExtension(
210 "extension_icon_image", Extension::INVALID)); 212 "extension_icon_image", Manifest::INVALID_LOCATION));
211 ASSERT_TRUE(extension.get() != NULL); 213 ASSERT_TRUE(extension.get() != NULL);
212 214
213 gfx::ImageSkia default_icon = GetDefaultIcon(); 215 gfx::ImageSkia default_icon = GetDefaultIcon();
214 216
215 // Load images we expect to find as representations in icon_image, so we 217 // Load images we expect to find as representations in icon_image, so we
216 // can later use them to validate icon_image. 218 // can later use them to validate icon_image.
217 SkBitmap bitmap_16 = 219 SkBitmap bitmap_16 =
218 GetTestBitmap(extension, "16.png", 16); 220 GetTestBitmap(extension, "16.png", 16);
219 ASSERT_FALSE(bitmap_16.empty()); 221 ASSERT_FALSE(bitmap_16.empty());
220 222
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 // Image should have been resized. 268 // Image should have been resized.
267 EXPECT_EQ(32, representation.pixel_width()); 269 EXPECT_EQ(32, representation.pixel_width());
268 EXPECT_TRUE(gfx::BitmapsAreEqual(representation.sk_bitmap(), 270 EXPECT_TRUE(gfx::BitmapsAreEqual(representation.sk_bitmap(),
269 bitmap_48_resized_to_32)); 271 bitmap_48_resized_to_32));
270 } 272 }
271 273
272 // There is no resource with either exact or bigger size, but there is a smaller 274 // There is no resource with either exact or bigger size, but there is a smaller
273 // resource. 275 // resource.
274 TEST_F(ExtensionIconImageTest, FallbackToSmallerWhenNoBigger) { 276 TEST_F(ExtensionIconImageTest, FallbackToSmallerWhenNoBigger) {
275 scoped_refptr<Extension> extension(CreateExtension( 277 scoped_refptr<Extension> extension(CreateExtension(
276 "extension_icon_image", Extension::INVALID)); 278 "extension_icon_image", Manifest::INVALID_LOCATION));
277 ASSERT_TRUE(extension.get() != NULL); 279 ASSERT_TRUE(extension.get() != NULL);
278 280
279 gfx::ImageSkia default_icon = GetDefaultIcon(); 281 gfx::ImageSkia default_icon = GetDefaultIcon();
280 282
281 // Load images we expect to find as representations in icon_image, so we 283 // Load images we expect to find as representations in icon_image, so we
282 // can later use them to validate icon_image. 284 // can later use them to validate icon_image.
283 SkBitmap bitmap_48 = 285 SkBitmap bitmap_48 =
284 GetTestBitmap(extension, "48.png", 48); 286 GetTestBitmap(extension, "48.png", 48);
285 ASSERT_FALSE(bitmap_48.empty()); 287 ASSERT_FALSE(bitmap_48.empty());
286 288
(...skipping 14 matching lines...) Expand all
301 EXPECT_EQ(64, representation.pixel_width()); 303 EXPECT_EQ(64, representation.pixel_width());
302 EXPECT_TRUE(gfx::BitmapsAreEqual(representation.sk_bitmap(), 304 EXPECT_TRUE(gfx::BitmapsAreEqual(representation.sk_bitmap(),
303 EnsureBitmapSize(bitmap_48, 64))); 305 EnsureBitmapSize(bitmap_48, 64)));
304 } 306 }
305 307
306 // There is no resource with exact size, but there is a smaller and a bigger 308 // There is no resource with exact size, but there is a smaller and a bigger
307 // one. Requested size is smaller than 32 though, so the smaller resource should 309 // one. Requested size is smaller than 32 though, so the smaller resource should
308 // be loaded. 310 // be loaded.
309 TEST_F(ExtensionIconImageTest, FallbackToSmaller) { 311 TEST_F(ExtensionIconImageTest, FallbackToSmaller) {
310 scoped_refptr<Extension> extension(CreateExtension( 312 scoped_refptr<Extension> extension(CreateExtension(
311 "extension_icon_image", Extension::INVALID)); 313 "extension_icon_image", Manifest::INVALID_LOCATION));
312 ASSERT_TRUE(extension.get() != NULL); 314 ASSERT_TRUE(extension.get() != NULL);
313 315
314 gfx::ImageSkia default_icon = GetDefaultIcon(); 316 gfx::ImageSkia default_icon = GetDefaultIcon();
315 317
316 // Load images we expect to find as representations in icon_image, so we 318 // Load images we expect to find as representations in icon_image, so we
317 // can later use them to validate icon_image. 319 // can later use them to validate icon_image.
318 SkBitmap bitmap_16 = 320 SkBitmap bitmap_16 =
319 GetTestBitmap(extension, "16.png", 16); 321 GetTestBitmap(extension, "16.png", 16);
320 ASSERT_FALSE(bitmap_16.empty()); 322 ASSERT_FALSE(bitmap_16.empty());
321 323
(...skipping 12 matching lines...) Expand all
334 EXPECT_EQ(ui::SCALE_FACTOR_100P, representation.scale_factor()); 336 EXPECT_EQ(ui::SCALE_FACTOR_100P, representation.scale_factor());
335 EXPECT_EQ(17, representation.pixel_width()); 337 EXPECT_EQ(17, representation.pixel_width());
336 EXPECT_TRUE(gfx::BitmapsAreEqual(representation.sk_bitmap(), 338 EXPECT_TRUE(gfx::BitmapsAreEqual(representation.sk_bitmap(),
337 EnsureBitmapSize(bitmap_16, 17))); 339 EnsureBitmapSize(bitmap_16, 17)));
338 } 340 }
339 341
340 // If resource set is empty, |GetRepresentation| should synchronously return 342 // If resource set is empty, |GetRepresentation| should synchronously return
341 // default icon, without notifying observer of image change. 343 // default icon, without notifying observer of image change.
342 TEST_F(ExtensionIconImageTest, NoResources) { 344 TEST_F(ExtensionIconImageTest, NoResources) {
343 scoped_refptr<Extension> extension(CreateExtension( 345 scoped_refptr<Extension> extension(CreateExtension(
344 "extension_icon_image", Extension::INVALID)); 346 "extension_icon_image", Manifest::INVALID_LOCATION));
345 ASSERT_TRUE(extension.get() != NULL); 347 ASSERT_TRUE(extension.get() != NULL);
346 348
347 ExtensionIconSet empty_icon_set; 349 ExtensionIconSet empty_icon_set;
348 gfx::ImageSkia default_icon = GetDefaultIcon(); 350 gfx::ImageSkia default_icon = GetDefaultIcon();
349 351
350 const int kRequestedSize = 24; 352 const int kRequestedSize = 24;
351 IconImage image(extension, empty_icon_set, kRequestedSize, default_icon, 353 IconImage image(extension, empty_icon_set, kRequestedSize, default_icon,
352 this); 354 this);
353 355
354 gfx::ImageSkiaRep representation = 356 gfx::ImageSkiaRep representation =
(...skipping 14 matching lines...) Expand all
369 EnsureBitmapSize( 371 EnsureBitmapSize(
370 default_icon.GetRepresentation(ui::SCALE_FACTOR_100P).sk_bitmap(), 372 default_icon.GetRepresentation(ui::SCALE_FACTOR_100P).sk_bitmap(),
371 kRequestedSize))); 373 kRequestedSize)));
372 } 374 }
373 375
374 // If resource set is invalid, image load should be done asynchronously and 376 // If resource set is invalid, image load should be done asynchronously and
375 // the observer should be notified when it's done. |GetRepresentation| should 377 // the observer should be notified when it's done. |GetRepresentation| should
376 // return the default icon representation once image load is done. 378 // return the default icon representation once image load is done.
377 TEST_F(ExtensionIconImageTest, InvalidResource) { 379 TEST_F(ExtensionIconImageTest, InvalidResource) {
378 scoped_refptr<Extension> extension(CreateExtension( 380 scoped_refptr<Extension> extension(CreateExtension(
379 "extension_icon_image", Extension::INVALID)); 381 "extension_icon_image", Manifest::INVALID_LOCATION));
380 ASSERT_TRUE(extension.get() != NULL); 382 ASSERT_TRUE(extension.get() != NULL);
381 383
382 const int kInvalidIconSize = 24; 384 const int kInvalidIconSize = 24;
383 ExtensionIconSet invalid_icon_set; 385 ExtensionIconSet invalid_icon_set;
384 invalid_icon_set.Add(kInvalidIconSize, "invalid.png"); 386 invalid_icon_set.Add(kInvalidIconSize, "invalid.png");
385 387
386 gfx::ImageSkia default_icon = GetDefaultIcon(); 388 gfx::ImageSkia default_icon = GetDefaultIcon();
387 389
388 IconImage image(extension, invalid_icon_set, kInvalidIconSize, default_icon, 390 IconImage image(extension, invalid_icon_set, kInvalidIconSize, default_icon,
389 this); 391 this);
(...skipping 14 matching lines...) Expand all
404 representation.sk_bitmap(), 406 representation.sk_bitmap(),
405 EnsureBitmapSize( 407 EnsureBitmapSize(
406 default_icon.GetRepresentation(ui::SCALE_FACTOR_100P).sk_bitmap(), 408 default_icon.GetRepresentation(ui::SCALE_FACTOR_100P).sk_bitmap(),
407 kInvalidIconSize))); 409 kInvalidIconSize)));
408 } 410 }
409 411
410 // Test that IconImage works with lazily (but synchronously) created default 412 // Test that IconImage works with lazily (but synchronously) created default
411 // icon when IconImage returns synchronously. 413 // icon when IconImage returns synchronously.
412 TEST_F(ExtensionIconImageTest, LazyDefaultIcon) { 414 TEST_F(ExtensionIconImageTest, LazyDefaultIcon) {
413 scoped_refptr<Extension> extension(CreateExtension( 415 scoped_refptr<Extension> extension(CreateExtension(
414 "extension_icon_image", Extension::INVALID)); 416 "extension_icon_image", Manifest::INVALID_LOCATION));
415 ASSERT_TRUE(extension.get() != NULL); 417 ASSERT_TRUE(extension.get() != NULL);
416 418
417 gfx::ImageSkia default_icon = GetDefaultIcon(); 419 gfx::ImageSkia default_icon = GetDefaultIcon();
418 gfx::ImageSkia lazy_default_icon(new MockImageSkiaSource(default_icon), 420 gfx::ImageSkia lazy_default_icon(new MockImageSkiaSource(default_icon),
419 default_icon.size()); 421 default_icon.size());
420 422
421 ExtensionIconSet empty_icon_set; 423 ExtensionIconSet empty_icon_set;
422 424
423 const int kRequestedSize = 128; 425 const int kRequestedSize = 128;
424 IconImage image(extension, empty_icon_set, kRequestedSize, lazy_default_icon, 426 IconImage image(extension, empty_icon_set, kRequestedSize, lazy_default_icon,
(...skipping 13 matching lines...) Expand all
438 kRequestedSize))); 440 kRequestedSize)));
439 441
440 // We should have a default icon representation. 442 // We should have a default icon representation.
441 ASSERT_EQ(1u, image.image_skia().image_reps().size()); 443 ASSERT_EQ(1u, image.image_skia().image_reps().size());
442 } 444 }
443 445
444 // Test that IconImage works with lazily (but synchronously) created default 446 // Test that IconImage works with lazily (but synchronously) created default
445 // icon when IconImage returns asynchronously. 447 // icon when IconImage returns asynchronously.
446 TEST_F(ExtensionIconImageTest, LazyDefaultIcon_AsyncIconImage) { 448 TEST_F(ExtensionIconImageTest, LazyDefaultIcon_AsyncIconImage) {
447 scoped_refptr<Extension> extension(CreateExtension( 449 scoped_refptr<Extension> extension(CreateExtension(
448 "extension_icon_image", Extension::INVALID)); 450 "extension_icon_image", Manifest::INVALID_LOCATION));
449 ASSERT_TRUE(extension.get() != NULL); 451 ASSERT_TRUE(extension.get() != NULL);
450 452
451 gfx::ImageSkia default_icon = GetDefaultIcon(); 453 gfx::ImageSkia default_icon = GetDefaultIcon();
452 gfx::ImageSkia lazy_default_icon(new MockImageSkiaSource(default_icon), 454 gfx::ImageSkia lazy_default_icon(new MockImageSkiaSource(default_icon),
453 default_icon.size()); 455 default_icon.size());
454 456
455 const int kInvalidIconSize = 24; 457 const int kInvalidIconSize = 24;
456 ExtensionIconSet invalid_icon_set; 458 ExtensionIconSet invalid_icon_set;
457 invalid_icon_set.Add(kInvalidIconSize, "invalid.png"); 459 invalid_icon_set.Add(kInvalidIconSize, "invalid.png");
458 460
(...skipping 15 matching lines...) Expand all
474 representation = image.image_skia().GetRepresentation(ui::SCALE_FACTOR_100P); 476 representation = image.image_skia().GetRepresentation(ui::SCALE_FACTOR_100P);
475 EXPECT_TRUE(gfx::BitmapsAreEqual( 477 EXPECT_TRUE(gfx::BitmapsAreEqual(
476 representation.sk_bitmap(), 478 representation.sk_bitmap(),
477 EnsureBitmapSize( 479 EnsureBitmapSize(
478 default_icon.GetRepresentation(ui::SCALE_FACTOR_100P).sk_bitmap(), 480 default_icon.GetRepresentation(ui::SCALE_FACTOR_100P).sk_bitmap(),
479 kInvalidIconSize))); 481 kInvalidIconSize)));
480 } 482 }
481 483
482 TEST_F(ExtensionIconImageTest, LoadPrecachedImage) { 484 TEST_F(ExtensionIconImageTest, LoadPrecachedImage) {
483 scoped_refptr<Extension> extension(CreateExtension( 485 scoped_refptr<Extension> extension(CreateExtension(
484 "extension_icon_image", Extension::INVALID)); 486 "extension_icon_image", Manifest::INVALID_LOCATION));
485 ASSERT_TRUE(extension.get() != NULL); 487 ASSERT_TRUE(extension.get() != NULL);
486 488
487 gfx::ImageSkia default_icon = GetDefaultIcon(); 489 gfx::ImageSkia default_icon = GetDefaultIcon();
488 490
489 // Store the image in the cache. 491 // Store the image in the cache.
490 SkBitmap bitmap_16 = 492 SkBitmap bitmap_16 =
491 GetTestBitmap(extension, "16.png", 16); 493 GetTestBitmap(extension, "16.png", 16);
492 ASSERT_FALSE(bitmap_16.empty()); 494 ASSERT_FALSE(bitmap_16.empty());
493 extension->SetCachedImage(extension->GetResource("16.png"), bitmap_16, 495 extension->SetCachedImage(extension->GetResource("16.png"), bitmap_16,
494 gfx::Size(16, 16)); 496 gfx::Size(16, 16));
(...skipping 14 matching lines...) Expand all
509 EXPECT_EQ(0, ImageLoadedCount()); 511 EXPECT_EQ(0, ImageLoadedCount());
510 ASSERT_EQ(1u, image.image_skia().image_reps().size()); 512 ASSERT_EQ(1u, image.image_skia().image_reps().size());
511 } 513 }
512 514
513 // Tests behavior of image created by IconImage after IconImage host goes 515 // Tests behavior of image created by IconImage after IconImage host goes
514 // away. The image should still return loaded representations. If requested 516 // away. The image should still return loaded representations. If requested
515 // representation was not loaded while IconImage host was around, transparent 517 // representation was not loaded while IconImage host was around, transparent
516 // representations should be returned. 518 // representations should be returned.
517 TEST_F(ExtensionIconImageTest, IconImageDestruction) { 519 TEST_F(ExtensionIconImageTest, IconImageDestruction) {
518 scoped_refptr<Extension> extension(CreateExtension( 520 scoped_refptr<Extension> extension(CreateExtension(
519 "extension_icon_image", Extension::INVALID)); 521 "extension_icon_image", Manifest::INVALID_LOCATION));
520 ASSERT_TRUE(extension.get() != NULL); 522 ASSERT_TRUE(extension.get() != NULL);
521 523
522 gfx::ImageSkia default_icon = GetDefaultIcon(); 524 gfx::ImageSkia default_icon = GetDefaultIcon();
523 525
524 // Load images we expect to find as representations in icon_image, so we 526 // Load images we expect to find as representations in icon_image, so we
525 // can later use them to validate icon_image. 527 // can later use them to validate icon_image.
526 SkBitmap bitmap_16 = 528 SkBitmap bitmap_16 =
527 GetTestBitmap(extension, "16.png", 16); 529 GetTestBitmap(extension, "16.png", 16);
528 ASSERT_FALSE(bitmap_16.empty()); 530 ASSERT_FALSE(bitmap_16.empty());
529 531
(...skipping 20 matching lines...) Expand all
550 EXPECT_EQ(16, representation.pixel_width()); 552 EXPECT_EQ(16, representation.pixel_width());
551 EXPECT_TRUE(gfx::BitmapsAreEqual(representation.sk_bitmap(), bitmap_16)); 553 EXPECT_TRUE(gfx::BitmapsAreEqual(representation.sk_bitmap(), bitmap_16));
552 554
553 // When requesting another representation, we should get blank image. 555 // When requesting another representation, we should get blank image.
554 representation = image_skia.GetRepresentation(ui::SCALE_FACTOR_200P); 556 representation = image_skia.GetRepresentation(ui::SCALE_FACTOR_200P);
555 557
556 EXPECT_TRUE(gfx::BitmapsAreEqual( 558 EXPECT_TRUE(gfx::BitmapsAreEqual(
557 representation.sk_bitmap(), 559 representation.sk_bitmap(),
558 CreateBlankBitmapForScale(16, ui::SCALE_FACTOR_200P))); 560 CreateBlankBitmapForScale(16, ui::SCALE_FACTOR_200P)));
559 } 561 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698