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

Unified Diff: chrome/browser/extensions/extension_icon_image_unittest.cc

Issue 334053003: Moves extension_icon_image and image_loader to extensions/browser (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: include fail Created 6 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/extension_icon_image_unittest.cc
diff --git a/chrome/browser/extensions/extension_icon_image_unittest.cc b/chrome/browser/extensions/extension_icon_image_unittest.cc
deleted file mode 100644
index 1e4cd56d3a7e08eb7e73a624ce620ff7ca281910..0000000000000000000000000000000000000000
--- a/chrome/browser/extensions/extension_icon_image_unittest.cc
+++ /dev/null
@@ -1,574 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/extensions/extension_icon_image.h"
-
-#include "base/json/json_file_value_serializer.h"
-#include "base/message_loop/message_loop.h"
-#include "base/path_service.h"
-#include "chrome/browser/extensions/image_loader.h"
-#include "chrome/common/chrome_paths.h"
-#include "chrome/common/extensions/extension_constants.h"
-#include "chrome/test/base/testing_profile.h"
-#include "content/public/test/test_browser_thread.h"
-#include "extensions/common/extension.h"
-#include "extensions/common/manifest.h"
-#include "extensions/common/manifest_handlers/icons_handler.h"
-#include "grit/theme_resources.h"
-#include "skia/ext/image_operations.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "ui/base/resource/resource_bundle.h"
-#include "ui/gfx/image/image_skia_source.h"
-#include "ui/gfx/skia_util.h"
-
-using content::BrowserThread;
-using extensions::Extension;
-using extensions::IconImage;
-using extensions::Manifest;
-
-namespace {
-
-SkBitmap CreateBlankBitmapForScale(int size_dip, ui::ScaleFactor scale_factor) {
- SkBitmap bitmap;
- const float scale = ui::GetScaleForScaleFactor(scale_factor);
- bitmap.setConfig(SkBitmap::kARGB_8888_Config,
- static_cast<int>(size_dip * scale),
- static_cast<int>(size_dip * scale));
- bitmap.allocPixels();
- bitmap.eraseColor(SkColorSetARGB(0, 0, 0, 0));
- return bitmap;
-}
-
-SkBitmap EnsureBitmapSize(const SkBitmap& original, int size) {
- if (original.width() == size && original.height() == size)
- return original;
-
- SkBitmap resized = skia::ImageOperations::Resize(
- original, skia::ImageOperations::RESIZE_LANCZOS3, size, size);
- return resized;
-}
-
-// Used to test behavior including images defined by an image skia source.
-// |GetImageForScale| simply returns image representation from the image given
-// in the ctor.
-class MockImageSkiaSource : public gfx::ImageSkiaSource {
- public:
- explicit MockImageSkiaSource(const gfx::ImageSkia& image)
- : image_(image) {
- }
- virtual ~MockImageSkiaSource() {}
-
- virtual gfx::ImageSkiaRep GetImageForScale(float scale) OVERRIDE {
- return image_.GetRepresentation(scale);
- }
-
- private:
- gfx::ImageSkia image_;
-};
-
-// Helper class for synchronously loading extension image resource.
-class TestImageLoader {
- public:
- explicit TestImageLoader(const Extension* extension)
- : extension_(extension),
- waiting_(false),
- image_loaded_(false) {
- }
- virtual ~TestImageLoader() {}
-
- void OnImageLoaded(const gfx::Image& image) {
- image_ = image;
- image_loaded_ = true;
- if (waiting_)
- base::MessageLoop::current()->Quit();
- }
-
- SkBitmap LoadBitmap(const std::string& path,
- int size) {
- image_loaded_ = false;
-
- image_loader_.LoadImageAsync(
- extension_, extension_->GetResource(path), gfx::Size(size, size),
- base::Bind(&TestImageLoader::OnImageLoaded,
- base::Unretained(this)));
-
- // If |image_| still hasn't been loaded (i.e. it is being loaded
- // asynchronously), wait for it.
- if (!image_loaded_) {
- waiting_ = true;
- base::MessageLoop::current()->Run();
- waiting_ = false;
- }
-
- EXPECT_TRUE(image_loaded_);
-
- return image_.IsEmpty() ? SkBitmap() : *image_.ToSkBitmap();
- }
-
- private:
- const Extension* extension_;
- bool waiting_;
- bool image_loaded_;
- gfx::Image image_;
- extensions::ImageLoader image_loader_;
-
- DISALLOW_COPY_AND_ASSIGN(TestImageLoader);
-};
-
-class ExtensionIconImageTest : public testing::Test,
- public IconImage::Observer {
- public:
- ExtensionIconImageTest()
- : image_loaded_count_(0),
- quit_in_image_loaded_(false),
- ui_thread_(BrowserThread::UI, &ui_loop_),
- file_thread_(BrowserThread::FILE),
- io_thread_(BrowserThread::IO) {
- }
-
- virtual ~ExtensionIconImageTest() {}
-
- void WaitForImageLoad() {
- quit_in_image_loaded_ = true;
- base::MessageLoop::current()->Run();
- quit_in_image_loaded_ = false;
- }
-
- int ImageLoadedCount() {
- int result = image_loaded_count_;
- image_loaded_count_ = 0;
- return result;
- }
-
- scoped_refptr<Extension> CreateExtension(const char* name,
- Manifest::Location location) {
- // Create and load an extension.
- base::FilePath test_file;
- if (!PathService::Get(chrome::DIR_TEST_DATA, &test_file)) {
- EXPECT_FALSE(true);
- return NULL;
- }
- test_file = test_file.AppendASCII("extensions").AppendASCII(name);
- int error_code = 0;
- std::string error;
- JSONFileValueSerializer serializer(test_file.AppendASCII("app.json"));
- scoped_ptr<base::DictionaryValue> valid_value(
- static_cast<base::DictionaryValue*>(serializer.Deserialize(&error_code,
- &error)));
- EXPECT_EQ(0, error_code) << error;
- if (error_code != 0)
- return NULL;
-
- EXPECT_TRUE(valid_value.get());
- if (!valid_value)
- return NULL;
-
- return Extension::Create(test_file, location, *valid_value,
- Extension::NO_FLAGS, &error);
- }
-
- // testing::Test overrides:
- virtual void SetUp() OVERRIDE {
- file_thread_.Start();
- io_thread_.Start();
- }
-
- // IconImage::Delegate overrides:
- virtual void OnExtensionIconImageChanged(IconImage* image) OVERRIDE {
- image_loaded_count_++;
- if (quit_in_image_loaded_)
- base::MessageLoop::current()->Quit();
- }
-
- gfx::ImageSkia GetDefaultIcon() {
- return *ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
- IDR_EXTENSIONS_FAVICON);
- }
-
- // Loads an image to be used in test from the extension.
- // The image will be loaded from the relative path |path|.
- SkBitmap GetTestBitmap(const Extension* extension,
- const std::string& path,
- int size) {
- TestImageLoader image_loader(extension);
- return image_loader.LoadBitmap(path, size);
- }
-
- private:
- int image_loaded_count_;
- bool quit_in_image_loaded_;
- base::MessageLoop ui_loop_;
- content::TestBrowserThread ui_thread_;
- content::TestBrowserThread file_thread_;
- content::TestBrowserThread io_thread_;
-
- DISALLOW_COPY_AND_ASSIGN(ExtensionIconImageTest);
-};
-
-} // namespace
-
-TEST_F(ExtensionIconImageTest, Basic) {
- std::vector<ui::ScaleFactor> supported_factors;
- supported_factors.push_back(ui::SCALE_FACTOR_100P);
- supported_factors.push_back(ui::SCALE_FACTOR_200P);
- ui::test::ScopedSetSupportedScaleFactors scoped_supported(supported_factors);
- scoped_ptr<Profile> profile(new TestingProfile());
- scoped_refptr<Extension> extension(CreateExtension(
- "extension_icon_image", Manifest::INVALID_LOCATION));
- ASSERT_TRUE(extension.get() != NULL);
-
- gfx::ImageSkia default_icon = GetDefaultIcon();
-
- // Load images we expect to find as representations in icon_image, so we
- // can later use them to validate icon_image.
- SkBitmap bitmap_16 = GetTestBitmap(extension.get(), "16.png", 16);
- ASSERT_FALSE(bitmap_16.empty());
-
- // There is no image of size 32 defined in the extension manifest, so we
- // should expect manifest image of size 48 resized to size 32.
- SkBitmap bitmap_48_resized_to_32 =
- GetTestBitmap(extension.get(), "48.png", 32);
- ASSERT_FALSE(bitmap_48_resized_to_32.empty());
-
- IconImage image(profile.get(),
- extension.get(),
- extensions::IconsInfo::GetIcons(extension.get()),
- 16,
- default_icon,
- this);
-
- // No representations in |image_| yet.
- gfx::ImageSkia::ImageSkiaReps image_reps = image.image_skia().image_reps();
- ASSERT_EQ(0u, image_reps.size());
-
- // Gets representation for a scale factor.
- gfx::ImageSkiaRep representation = image.image_skia().GetRepresentation(1.0f);
-
- // Before the image representation is loaded, image should contain blank
- // image representation.
- EXPECT_TRUE(gfx::BitmapsAreEqual(
- representation.sk_bitmap(),
- CreateBlankBitmapForScale(16, ui::SCALE_FACTOR_100P)));
-
- WaitForImageLoad();
- EXPECT_EQ(1, ImageLoadedCount());
- ASSERT_EQ(1u, image.image_skia().image_reps().size());
-
- representation = image.image_skia().GetRepresentation(1.0f);
-
- // We should get the right representation now.
- EXPECT_TRUE(gfx::BitmapsAreEqual(representation.sk_bitmap(), bitmap_16));
- EXPECT_EQ(16, representation.pixel_width());
-
- // Gets representation for an additional scale factor.
- representation = image.image_skia().GetRepresentation(2.0f);
-
- EXPECT_TRUE(gfx::BitmapsAreEqual(
- representation.sk_bitmap(),
- CreateBlankBitmapForScale(16, ui::SCALE_FACTOR_200P)));
-
- WaitForImageLoad();
- EXPECT_EQ(1, ImageLoadedCount());
- ASSERT_EQ(2u, image.image_skia().image_reps().size());
-
- representation = image.image_skia().GetRepresentation(2.0f);
-
- // Image should have been resized.
- EXPECT_EQ(32, representation.pixel_width());
- EXPECT_TRUE(gfx::BitmapsAreEqual(representation.sk_bitmap(),
- bitmap_48_resized_to_32));
-}
-
-// There is no resource with either exact or bigger size, but there is a smaller
-// resource.
-TEST_F(ExtensionIconImageTest, FallbackToSmallerWhenNoBigger) {
- std::vector<ui::ScaleFactor> supported_factors;
- supported_factors.push_back(ui::SCALE_FACTOR_100P);
- supported_factors.push_back(ui::SCALE_FACTOR_200P);
- ui::test::ScopedSetSupportedScaleFactors scoped_supported(supported_factors);
- scoped_ptr<Profile> profile(new TestingProfile());
- scoped_refptr<Extension> extension(CreateExtension(
- "extension_icon_image", Manifest::INVALID_LOCATION));
- ASSERT_TRUE(extension.get() != NULL);
-
- gfx::ImageSkia default_icon = GetDefaultIcon();
-
- // Load images we expect to find as representations in icon_image, so we
- // can later use them to validate icon_image.
- SkBitmap bitmap_48 = GetTestBitmap(extension.get(), "48.png", 48);
- ASSERT_FALSE(bitmap_48.empty());
-
- IconImage image(profile.get(),
- extension.get(),
- extensions::IconsInfo::GetIcons(extension.get()),
- 32,
- default_icon,
- this);
-
- gfx::ImageSkiaRep representation = image.image_skia().GetRepresentation(2.0f);
-
- WaitForImageLoad();
- EXPECT_EQ(1, ImageLoadedCount());
- ASSERT_EQ(1u, image.image_skia().image_reps().size());
-
- representation = image.image_skia().GetRepresentation(2.0f);
-
- // We should have loaded the biggest smaller resource resized to the actual
- // size.
- EXPECT_EQ(2.0f, representation.scale());
- EXPECT_EQ(64, representation.pixel_width());
- EXPECT_TRUE(gfx::BitmapsAreEqual(representation.sk_bitmap(),
- EnsureBitmapSize(bitmap_48, 64)));
-}
-
-// There is no resource with exact size, but there is a smaller and a bigger
-// one. Requested size is smaller than 32 though, so the smaller resource should
-// be loaded.
-TEST_F(ExtensionIconImageTest, FallbackToSmaller) {
- scoped_ptr<Profile> profile(new TestingProfile());
- scoped_refptr<Extension> extension(CreateExtension(
- "extension_icon_image", Manifest::INVALID_LOCATION));
- ASSERT_TRUE(extension.get() != NULL);
-
- gfx::ImageSkia default_icon = GetDefaultIcon();
-
- // Load images we expect to find as representations in icon_image, so we
- // can later use them to validate icon_image.
- SkBitmap bitmap_16 = GetTestBitmap(extension.get(), "16.png", 16);
- ASSERT_FALSE(bitmap_16.empty());
-
- IconImage image(profile.get(),
- extension.get(),
- extensions::IconsInfo::GetIcons(extension.get()),
- 17,
- default_icon,
- this);
-
- gfx::ImageSkiaRep representation = image.image_skia().GetRepresentation(1.0f);
-
- WaitForImageLoad();
- EXPECT_EQ(1, ImageLoadedCount());
- ASSERT_EQ(1u, image.image_skia().image_reps().size());
-
- representation = image.image_skia().GetRepresentation(1.0f);
-
- // We should have loaded smaller (resized) resource.
- EXPECT_EQ(1.0f, representation.scale());
- EXPECT_EQ(17, representation.pixel_width());
- EXPECT_TRUE(gfx::BitmapsAreEqual(representation.sk_bitmap(),
- EnsureBitmapSize(bitmap_16, 17)));
-}
-
-// If resource set is empty, |GetRepresentation| should synchronously return
-// default icon, without notifying observer of image change.
-TEST_F(ExtensionIconImageTest, NoResources) {
- scoped_ptr<Profile> profile(new TestingProfile());
- scoped_refptr<Extension> extension(CreateExtension(
- "extension_icon_image", Manifest::INVALID_LOCATION));
- ASSERT_TRUE(extension.get() != NULL);
-
- ExtensionIconSet empty_icon_set;
- gfx::ImageSkia default_icon = GetDefaultIcon();
-
- const int kRequestedSize = 24;
- IconImage image(profile.get(),
- extension.get(),
- empty_icon_set,
- kRequestedSize,
- default_icon,
- this);
-
- gfx::ImageSkiaRep representation = image.image_skia().GetRepresentation(1.0f);
- EXPECT_TRUE(gfx::BitmapsAreEqual(
- representation.sk_bitmap(),
- EnsureBitmapSize(
- default_icon.GetRepresentation(1.0f).sk_bitmap(),
- kRequestedSize)));
-
- EXPECT_EQ(0, ImageLoadedCount());
- // We should have a default icon representation.
- ASSERT_EQ(1u, image.image_skia().image_reps().size());
-
- representation = image.image_skia().GetRepresentation(1.0f);
- EXPECT_TRUE(gfx::BitmapsAreEqual(
- representation.sk_bitmap(),
- EnsureBitmapSize(
- default_icon.GetRepresentation(1.0f).sk_bitmap(),
- kRequestedSize)));
-}
-
-// If resource set is invalid, image load should be done asynchronously and
-// the observer should be notified when it's done. |GetRepresentation| should
-// return the default icon representation once image load is done.
-TEST_F(ExtensionIconImageTest, InvalidResource) {
- scoped_ptr<Profile> profile(new TestingProfile());
- scoped_refptr<Extension> extension(CreateExtension(
- "extension_icon_image", Manifest::INVALID_LOCATION));
- ASSERT_TRUE(extension.get() != NULL);
-
- const int kInvalidIconSize = 24;
- ExtensionIconSet invalid_icon_set;
- invalid_icon_set.Add(kInvalidIconSize, "invalid.png");
-
- gfx::ImageSkia default_icon = GetDefaultIcon();
-
- IconImage image(profile.get(),
- extension.get(),
- invalid_icon_set,
- kInvalidIconSize,
- default_icon,
- this);
-
- gfx::ImageSkiaRep representation = image.image_skia().GetRepresentation(1.0f);
- EXPECT_TRUE(gfx::BitmapsAreEqual(
- representation.sk_bitmap(),
- CreateBlankBitmapForScale(kInvalidIconSize, ui::SCALE_FACTOR_100P)));
-
- WaitForImageLoad();
- EXPECT_EQ(1, ImageLoadedCount());
- // We should have default icon representation now.
- ASSERT_EQ(1u, image.image_skia().image_reps().size());
-
- representation = image.image_skia().GetRepresentation(1.0f);
- EXPECT_TRUE(gfx::BitmapsAreEqual(
- representation.sk_bitmap(),
- EnsureBitmapSize(
- default_icon.GetRepresentation(1.0f).sk_bitmap(),
- kInvalidIconSize)));
-}
-
-// Test that IconImage works with lazily (but synchronously) created default
-// icon when IconImage returns synchronously.
-TEST_F(ExtensionIconImageTest, LazyDefaultIcon) {
- scoped_ptr<Profile> profile(new TestingProfile());
- scoped_refptr<Extension> extension(CreateExtension(
- "extension_icon_image", Manifest::INVALID_LOCATION));
- ASSERT_TRUE(extension.get() != NULL);
-
- gfx::ImageSkia default_icon = GetDefaultIcon();
- gfx::ImageSkia lazy_default_icon(new MockImageSkiaSource(default_icon),
- default_icon.size());
-
- ExtensionIconSet empty_icon_set;
-
- const int kRequestedSize = 128;
- IconImage image(profile.get(),
- extension.get(),
- empty_icon_set,
- kRequestedSize,
- lazy_default_icon,
- this);
-
- ASSERT_FALSE(lazy_default_icon.HasRepresentation(1.0f));
-
- gfx::ImageSkiaRep representation = image.image_skia().GetRepresentation(1.0f);
-
- // The resouce set is empty, so we should get the result right away.
- EXPECT_TRUE(lazy_default_icon.HasRepresentation(1.0f));
- EXPECT_TRUE(gfx::BitmapsAreEqual(
- representation.sk_bitmap(),
- EnsureBitmapSize(
- default_icon.GetRepresentation(1.0f).sk_bitmap(),
- kRequestedSize)));
-
- // We should have a default icon representation.
- ASSERT_EQ(1u, image.image_skia().image_reps().size());
-}
-
-// Test that IconImage works with lazily (but synchronously) created default
-// icon when IconImage returns asynchronously.
-TEST_F(ExtensionIconImageTest, LazyDefaultIcon_AsyncIconImage) {
- scoped_ptr<Profile> profile(new TestingProfile());
- scoped_refptr<Extension> extension(CreateExtension(
- "extension_icon_image", Manifest::INVALID_LOCATION));
- ASSERT_TRUE(extension.get() != NULL);
-
- gfx::ImageSkia default_icon = GetDefaultIcon();
- gfx::ImageSkia lazy_default_icon(new MockImageSkiaSource(default_icon),
- default_icon.size());
-
- const int kInvalidIconSize = 24;
- ExtensionIconSet invalid_icon_set;
- invalid_icon_set.Add(kInvalidIconSize, "invalid.png");
-
- IconImage image(profile.get(),
- extension.get(),
- invalid_icon_set,
- kInvalidIconSize,
- lazy_default_icon,
- this);
-
- ASSERT_FALSE(lazy_default_icon.HasRepresentation(1.0f));
-
- gfx::ImageSkiaRep representation = image.image_skia().GetRepresentation(1.0f);
-
- WaitForImageLoad();
- EXPECT_EQ(1, ImageLoadedCount());
- // We should have default icon representation now.
- ASSERT_EQ(1u, image.image_skia().image_reps().size());
-
- EXPECT_TRUE(lazy_default_icon.HasRepresentation(1.0f));
-
- representation = image.image_skia().GetRepresentation(1.0f);
- EXPECT_TRUE(gfx::BitmapsAreEqual(
- representation.sk_bitmap(),
- EnsureBitmapSize(
- default_icon.GetRepresentation(1.0f).sk_bitmap(),
- kInvalidIconSize)));
-}
-
-// Tests behavior of image created by IconImage after IconImage host goes
-// away. The image should still return loaded representations. If requested
-// representation was not loaded while IconImage host was around, transparent
-// representations should be returned.
-TEST_F(ExtensionIconImageTest, IconImageDestruction) {
- scoped_ptr<Profile> profile(new TestingProfile());
- scoped_refptr<Extension> extension(CreateExtension(
- "extension_icon_image", Manifest::INVALID_LOCATION));
- ASSERT_TRUE(extension.get() != NULL);
-
- gfx::ImageSkia default_icon = GetDefaultIcon();
-
- // Load images we expect to find as representations in icon_image, so we
- // can later use them to validate icon_image.
- SkBitmap bitmap_16 = GetTestBitmap(extension.get(), "16.png", 16);
- ASSERT_FALSE(bitmap_16.empty());
-
- scoped_ptr<IconImage> image(
- new IconImage(profile.get(),
- extension.get(),
- extensions::IconsInfo::GetIcons(extension.get()),
- 16,
- default_icon,
- this));
-
- // Load an image representation.
- gfx::ImageSkiaRep representation =
- image->image_skia().GetRepresentation(1.0f);
-
- WaitForImageLoad();
- EXPECT_EQ(1, ImageLoadedCount());
- ASSERT_EQ(1u, image->image_skia().image_reps().size());
-
- // Stash loaded image skia, and destroy |image|.
- gfx::ImageSkia image_skia = image->image_skia();
- image.reset();
- extension = NULL;
-
- // Image skia should still be able to get previously loaded representation.
- representation = image_skia.GetRepresentation(1.0f);
-
- EXPECT_EQ(1.0f, representation.scale());
- EXPECT_EQ(16, representation.pixel_width());
- EXPECT_TRUE(gfx::BitmapsAreEqual(representation.sk_bitmap(), bitmap_16));
-
- // When requesting another representation, we should not crash and return some
- // image of the size. It could be blank or a rescale from the existing 1.0f
- // icon.
- representation = image_skia.GetRepresentation(2.0f);
-
- EXPECT_EQ(16, representation.GetWidth());
- EXPECT_EQ(16, representation.GetHeight());
- EXPECT_EQ(2.0f, representation.scale());
-}
« no previous file with comments | « chrome/browser/extensions/extension_icon_image.cc ('k') | chrome/browser/extensions/extension_icon_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698