| Index: chrome/common/extensions/manifest_tests/extension_manifests_scriptbadge_unittest.cc
|
| diff --git a/chrome/common/extensions/manifest_tests/extension_manifests_scriptbadge_unittest.cc b/chrome/common/extensions/manifest_tests/extension_manifests_scriptbadge_unittest.cc
|
| index 6b2c39d02fac821bd9bbafcc15c824d979840942..ceee1ee5d7055fc375940505300b7be89de3ff1d 100644
|
| --- a/chrome/common/extensions/manifest_tests/extension_manifests_scriptbadge_unittest.cc
|
| +++ b/chrome/common/extensions/manifest_tests/extension_manifests_scriptbadge_unittest.cc
|
| @@ -5,6 +5,8 @@
|
| #include "chrome/common/extensions/manifest_tests/extension_manifest_test.h"
|
|
|
| #include "chrome/common/extensions/extension_action.h"
|
| +#include "chrome/common/extensions/extension_constants.h"
|
| +#include "chrome/common/extensions/extension_icon_set.h"
|
| #include "chrome/common/extensions/extension_manifest_constants.h"
|
| #include "chrome/common/extensions/extension_switch_utils.h"
|
| #include "grit/theme_resources.h"
|
| @@ -13,10 +15,13 @@
|
| #include "ui/base/resource/resource_bundle.h"
|
| #include "ui/gfx/image/image.h"
|
| #include "ui/gfx/skia_util.h"
|
| +#include "ui/gfx/image/image_skia.h"
|
|
|
| namespace errors = extension_manifest_errors;
|
| namespace switch_utils = extensions::switch_utils;
|
| using extensions::Extension;
|
| +using ::testing::_;
|
| +using ::testing::Return;
|
|
|
| namespace {
|
|
|
| @@ -24,6 +29,14 @@ bool ImagesAreEqual(const gfx::Image& i1, const gfx::Image& i2) {
|
| return gfx::BitmapsAreEqual(*i1.ToSkBitmap(), *i2.ToSkBitmap());
|
| }
|
|
|
| +SkBitmap CreateTransparentBitmap(int size) {
|
| + SkBitmap bitmap;
|
| + bitmap.setConfig(SkBitmap::kARGB_8888_Config, size, size);
|
| + bitmap.allocPixels();
|
| + bitmap.eraseColor(SkColorSetARGB(0, 0, 0, 0));
|
| + return bitmap;
|
| +}
|
| +
|
| std::vector<Extension::InstallWarning> StripMissingFlagWarning(
|
| const std::vector<Extension::InstallWarning>& install_warnings) {
|
| std::vector<Extension::InstallWarning> result;
|
| @@ -34,6 +47,14 @@ std::vector<Extension::InstallWarning> StripMissingFlagWarning(
|
| return result;
|
| }
|
|
|
| +class MockExtensionActionIconFactory : public ExtensionAction::IconFactory {
|
| + public:
|
| + ~MockExtensionActionIconFactory() {}
|
| +
|
| + MOCK_METHOD2(GetIcon, gfx::ImageSkia(const ExtensionIconSet* icon_set,
|
| + ExtensionAction::Type type));
|
| +};
|
| +
|
| TEST_F(ExtensionManifestTest, ScriptBadgeBasic) {
|
| scoped_refptr<Extension> extension(
|
| LoadAndExpectSuccess("script_badge_basic.json"));
|
| @@ -42,15 +63,37 @@ TEST_F(ExtensionManifestTest, ScriptBadgeBasic) {
|
| EXPECT_THAT(StripMissingFlagWarning(extension->install_warnings()),
|
| testing::ElementsAre(/*empty*/));
|
|
|
| + const ExtensionIconSet* default_icon =
|
| + extension->script_badge()->default_icon();
|
| + // Default icon set should not be NULL.
|
| + ASSERT_TRUE(default_icon);
|
| +
|
| + // Verify that correnct icon paths are registered in default_icon.
|
| + EXPECT_EQ(2u, default_icon->map().size());
|
| + EXPECT_EQ("icon16.png",
|
| + default_icon->Get(extension_misc::EXTENSION_ICON_BITTY,
|
| + ExtensionIconSet::MATCH_EXACTLY));
|
| + EXPECT_EQ("icon32.png",
|
| + default_icon->Get(2 * extension_misc::EXTENSION_ICON_BITTY,
|
| + ExtensionIconSet::MATCH_EXACTLY));
|
| +
|
| + // Since default icon set is defined in the manifest, extension action will
|
| + // try to load an image ofr the default icon. Let's return transparent bitmap
|
| + // and check it is returned by extension action.
|
| + SkBitmap transparent_bitmap = CreateTransparentBitmap(16);
|
| + MockExtensionActionIconFactory mock_icon_factory;
|
| + EXPECT_CALL(mock_icon_factory,
|
| + GetIcon(default_icon, ExtensionAction::TYPE_SCRIPT_BADGE))
|
| + .WillOnce(Return(gfx::ImageSkia(transparent_bitmap)));
|
| +
|
| EXPECT_EQ("my extension", extension->script_badge()->GetTitle(
|
| ExtensionAction::kDefaultTabId));
|
| EXPECT_TRUE(extension->script_badge()->HasPopup(
|
| ExtensionAction::kDefaultTabId));
|
| EXPECT_TRUE(ImagesAreEqual(
|
| - ui::ResourceBundle::GetSharedInstance().GetImageNamed(
|
| - IDR_EXTENSIONS_FAVICON),
|
| - extension->script_badge()->GetIcon(ExtensionAction::kDefaultTabId)));
|
| - EXPECT_EQ("icon16.png", extension->script_badge()->default_icon_path());
|
| + gfx::Image(transparent_bitmap),
|
| + extension->script_badge()->GetIcon(ExtensionAction::kDefaultTabId,
|
| + &mock_icon_factory)));
|
| }
|
|
|
| TEST_F(ExtensionManifestTest, ScriptBadgeExplicitTitleAndIconsIgnored) {
|
| @@ -67,13 +110,31 @@ TEST_F(ExtensionManifestTest, ScriptBadgeExplicitTitleAndIconsIgnored) {
|
| Extension::InstallWarning(
|
| Extension::InstallWarning::FORMAT_TEXT,
|
| errors::kScriptBadgeIconIgnored)));
|
| +
|
| + const ExtensionIconSet* default_icon =
|
| + extension->script_badge()->default_icon();
|
| + ASSERT_TRUE(default_icon);
|
| +
|
| + EXPECT_EQ(1u, default_icon->map().size());
|
| + EXPECT_EQ("icon16.png",
|
| + default_icon->Get(extension_misc::EXTENSION_ICON_BITTY,
|
| + ExtensionIconSet::MATCH_EXACTLY));
|
| +
|
| + // Since default icon set is defined in the manifest, extension action will
|
| + // try to load an image ofr the default icon. Let's return transparent bitmap
|
| + // and check it is returned by extension action.
|
| + SkBitmap transparent_bitmap = CreateTransparentBitmap(16);
|
| + MockExtensionActionIconFactory mock_icon_factory;
|
| + EXPECT_CALL(mock_icon_factory,
|
| + GetIcon(default_icon, ExtensionAction::TYPE_SCRIPT_BADGE))
|
| + .WillOnce(Return(gfx::ImageSkia(transparent_bitmap)));
|
| +
|
| EXPECT_EQ("my extension", extension->script_badge()->GetTitle(
|
| ExtensionAction::kDefaultTabId));
|
| EXPECT_TRUE(ImagesAreEqual(
|
| - ui::ResourceBundle::GetSharedInstance().GetImageNamed(
|
| - IDR_EXTENSIONS_FAVICON),
|
| - extension->script_badge()->GetIcon(ExtensionAction::kDefaultTabId)));
|
| - EXPECT_EQ("icon16.png", extension->script_badge()->default_icon_path());
|
| + gfx::Image(transparent_bitmap),
|
| + extension->script_badge()->
|
| + GetIcon(ExtensionAction::kDefaultTabId, &mock_icon_factory)));
|
| }
|
|
|
| TEST_F(ExtensionManifestTest, ScriptBadgeIconFallsBackToPuzzlePiece) {
|
| @@ -84,12 +145,17 @@ TEST_F(ExtensionManifestTest, ScriptBadgeIconFallsBackToPuzzlePiece) {
|
| EXPECT_THAT(extension->install_warnings(),
|
| testing::ElementsAre(/*empty*/));
|
|
|
| - EXPECT_EQ("", extension->script_badge()->default_icon_path())
|
| + MockExtensionActionIconFactory mock_icon_factory;
|
| + EXPECT_CALL(mock_icon_factory, GetIcon(_, _)).Times(0);
|
| +
|
| + EXPECT_FALSE(extension->script_badge()->default_icon())
|
| << "Should not fall back to the 64px icon.";
|
| - EXPECT_FALSE(extension->script_badge()->GetIcon(
|
| - ExtensionAction::kDefaultTabId).IsEmpty())
|
| - << "Should set the puzzle piece as the default, but there's no way "
|
| - << "to assert in a unittest what the image looks like.";
|
| + EXPECT_EQ(NULL, extension->script_badge()->default_icon());
|
| + EXPECT_TRUE(ImagesAreEqual(
|
| + ui::ResourceBundle::GetSharedInstance().GetImageNamed(
|
| + IDR_EXTENSIONS_FAVICON),
|
| + extension->script_badge()->GetIcon(ExtensionAction::kDefaultTabId,
|
| + &mock_icon_factory)));
|
| }
|
|
|
| } // namespace
|
|
|