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..89fd6ce243fa7b47f219216b40eea94fdb7cca92 100644 |
--- a/chrome/common/extensions/manifest_tests/extension_manifests_scriptbadge_unittest.cc |
+++ b/chrome/common/extensions/manifest_tests/extension_manifests_scriptbadge_unittest.cc |
@@ -2,21 +2,26 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#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_factory_delegate.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 "chrome/common/extensions/manifest_tests/extension_manifest_test.h" |
#include "grit/theme_resources.h" |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "ui/base/resource/resource_bundle.h" |
#include "ui/gfx/image/image.h" |
+#include "ui/gfx/image/image_skia.h" |
#include "ui/gfx/skia_util.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 ExtensionIconFactoryDelegate { |
+ public: |
+ ~MockExtensionActionIconFactory() {} |
+ |
+ MOCK_METHOD2(GetIcon, gfx::ImageSkia(const ExtensionIconSet* icon_set, |
+ int desired_size)); |
+}; |
+ |
TEST_F(ExtensionManifestTest, ScriptBadgeBasic) { |
scoped_refptr<Extension> extension( |
LoadAndExpectSuccess("script_badge_basic.json")); |
@@ -42,15 +63,36 @@ 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, 16)) |
+ .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 +109,30 @@ 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, 16)) |
+ .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 +143,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 |