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

Unified Diff: chrome/common/extensions/manifest_tests/extension_manifests_scriptbadge_unittest.cc

Issue 10905005: Change browser/page action default icon defined in manifest to support hidpi. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: minor cleanup Created 8 years, 4 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/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

Powered by Google App Engine
This is Rietveld 408576698