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

Side by Side 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, 3 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/common/extensions/manifest_tests/extension_manifest_test.h" 5 #include "chrome/common/extensions/manifest_tests/extension_manifest_test.h"
6 6
7 #include "chrome/common/extensions/extension_action.h" 7 #include "chrome/common/extensions/extension_action.h"
8 #include "chrome/common/extensions/extension_constants.h"
9 #include "chrome/common/extensions/extension_icon_set.h"
8 #include "chrome/common/extensions/extension_manifest_constants.h" 10 #include "chrome/common/extensions/extension_manifest_constants.h"
9 #include "chrome/common/extensions/extension_switch_utils.h" 11 #include "chrome/common/extensions/extension_switch_utils.h"
10 #include "grit/theme_resources.h" 12 #include "grit/theme_resources.h"
11 #include "testing/gmock/include/gmock/gmock.h" 13 #include "testing/gmock/include/gmock/gmock.h"
12 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
13 #include "ui/base/resource/resource_bundle.h" 15 #include "ui/base/resource/resource_bundle.h"
14 #include "ui/gfx/image/image.h" 16 #include "ui/gfx/image/image.h"
15 #include "ui/gfx/skia_util.h" 17 #include "ui/gfx/skia_util.h"
18 #include "ui/gfx/image/image_skia.h"
16 19
17 namespace errors = extension_manifest_errors; 20 namespace errors = extension_manifest_errors;
18 namespace switch_utils = extensions::switch_utils; 21 namespace switch_utils = extensions::switch_utils;
19 using extensions::Extension; 22 using extensions::Extension;
23 using ::testing::_;
24 using ::testing::Return;
20 25
21 namespace { 26 namespace {
22 27
23 bool ImagesAreEqual(const gfx::Image& i1, const gfx::Image& i2) { 28 bool ImagesAreEqual(const gfx::Image& i1, const gfx::Image& i2) {
24 return gfx::BitmapsAreEqual(*i1.ToSkBitmap(), *i2.ToSkBitmap()); 29 return gfx::BitmapsAreEqual(*i1.ToSkBitmap(), *i2.ToSkBitmap());
25 } 30 }
26 31
32 SkBitmap CreateTransparentBitmap(int size) {
33 SkBitmap bitmap;
34 bitmap.setConfig(SkBitmap::kARGB_8888_Config, size, size);
35 bitmap.allocPixels();
36 bitmap.eraseColor(SkColorSetARGB(0, 0, 0, 0));
37 return bitmap;
38 }
39
27 std::vector<Extension::InstallWarning> StripMissingFlagWarning( 40 std::vector<Extension::InstallWarning> StripMissingFlagWarning(
28 const std::vector<Extension::InstallWarning>& install_warnings) { 41 const std::vector<Extension::InstallWarning>& install_warnings) {
29 std::vector<Extension::InstallWarning> result; 42 std::vector<Extension::InstallWarning> result;
30 for (size_t i = 0; i < install_warnings.size(); ++i) { 43 for (size_t i = 0; i < install_warnings.size(); ++i) {
31 if (install_warnings[i].message != errors::kScriptBadgeRequiresFlag) 44 if (install_warnings[i].message != errors::kScriptBadgeRequiresFlag)
32 result.push_back(install_warnings[i]); 45 result.push_back(install_warnings[i]);
33 } 46 }
34 return result; 47 return result;
35 } 48 }
36 49
50 class MockExtensionActionIconFactory : public ExtensionAction::IconFactory {
51 public:
52 ~MockExtensionActionIconFactory() {}
53
54 MOCK_METHOD2(GetIcon, gfx::ImageSkia(const ExtensionIconSet* icon_set,
55 ExtensionAction::Type type));
56 };
57
37 TEST_F(ExtensionManifestTest, ScriptBadgeBasic) { 58 TEST_F(ExtensionManifestTest, ScriptBadgeBasic) {
38 scoped_refptr<Extension> extension( 59 scoped_refptr<Extension> extension(
39 LoadAndExpectSuccess("script_badge_basic.json")); 60 LoadAndExpectSuccess("script_badge_basic.json"));
40 ASSERT_TRUE(extension.get()); 61 ASSERT_TRUE(extension.get());
41 ASSERT_TRUE(extension->script_badge()); 62 ASSERT_TRUE(extension->script_badge());
42 EXPECT_THAT(StripMissingFlagWarning(extension->install_warnings()), 63 EXPECT_THAT(StripMissingFlagWarning(extension->install_warnings()),
43 testing::ElementsAre(/*empty*/)); 64 testing::ElementsAre(/*empty*/));
44 65
66 const ExtensionIconSet* default_icon =
67 extension->script_badge()->default_icon();
68 // Default icon set should not be NULL.
69 ASSERT_TRUE(default_icon);
70
71 // Verify that correnct icon paths are registered in default_icon.
72 EXPECT_EQ(2u, default_icon->map().size());
73 EXPECT_EQ("icon16.png",
74 default_icon->Get(extension_misc::EXTENSION_ICON_BITTY,
75 ExtensionIconSet::MATCH_EXACTLY));
76 EXPECT_EQ("icon32.png",
77 default_icon->Get(2 * extension_misc::EXTENSION_ICON_BITTY,
78 ExtensionIconSet::MATCH_EXACTLY));
79
80 // Since default icon set is defined in the manifest, extension action will
81 // try to load an image ofr the default icon. Let's return transparent bitmap
82 // and check it is returned by extension action.
83 SkBitmap transparent_bitmap = CreateTransparentBitmap(16);
84 MockExtensionActionIconFactory mock_icon_factory;
85 EXPECT_CALL(mock_icon_factory,
86 GetIcon(default_icon, ExtensionAction::TYPE_SCRIPT_BADGE))
87 .WillOnce(Return(gfx::ImageSkia(transparent_bitmap)));
88
45 EXPECT_EQ("my extension", extension->script_badge()->GetTitle( 89 EXPECT_EQ("my extension", extension->script_badge()->GetTitle(
46 ExtensionAction::kDefaultTabId)); 90 ExtensionAction::kDefaultTabId));
47 EXPECT_TRUE(extension->script_badge()->HasPopup( 91 EXPECT_TRUE(extension->script_badge()->HasPopup(
48 ExtensionAction::kDefaultTabId)); 92 ExtensionAction::kDefaultTabId));
49 EXPECT_TRUE(ImagesAreEqual( 93 EXPECT_TRUE(ImagesAreEqual(
50 ui::ResourceBundle::GetSharedInstance().GetImageNamed( 94 gfx::Image(transparent_bitmap),
51 IDR_EXTENSIONS_FAVICON), 95 extension->script_badge()->GetIcon(ExtensionAction::kDefaultTabId,
52 extension->script_badge()->GetIcon(ExtensionAction::kDefaultTabId))); 96 &mock_icon_factory)));
53 EXPECT_EQ("icon16.png", extension->script_badge()->default_icon_path());
54 } 97 }
55 98
56 TEST_F(ExtensionManifestTest, ScriptBadgeExplicitTitleAndIconsIgnored) { 99 TEST_F(ExtensionManifestTest, ScriptBadgeExplicitTitleAndIconsIgnored) {
57 scoped_refptr<Extension> extension( 100 scoped_refptr<Extension> extension(
58 LoadAndExpectSuccess("script_badge_title_icons_ignored.json")); 101 LoadAndExpectSuccess("script_badge_title_icons_ignored.json"));
59 ASSERT_TRUE(extension.get()); 102 ASSERT_TRUE(extension.get());
60 ASSERT_TRUE(extension->script_badge()); 103 ASSERT_TRUE(extension->script_badge());
61 104
62 EXPECT_THAT(StripMissingFlagWarning(extension->install_warnings()), 105 EXPECT_THAT(StripMissingFlagWarning(extension->install_warnings()),
63 testing::ElementsAre( 106 testing::ElementsAre(
64 Extension::InstallWarning( 107 Extension::InstallWarning(
65 Extension::InstallWarning::FORMAT_TEXT, 108 Extension::InstallWarning::FORMAT_TEXT,
66 errors::kScriptBadgeTitleIgnored), 109 errors::kScriptBadgeTitleIgnored),
67 Extension::InstallWarning( 110 Extension::InstallWarning(
68 Extension::InstallWarning::FORMAT_TEXT, 111 Extension::InstallWarning::FORMAT_TEXT,
69 errors::kScriptBadgeIconIgnored))); 112 errors::kScriptBadgeIconIgnored)));
113
114 const ExtensionIconSet* default_icon =
115 extension->script_badge()->default_icon();
116 ASSERT_TRUE(default_icon);
117
118 EXPECT_EQ(1u, default_icon->map().size());
119 EXPECT_EQ("icon16.png",
120 default_icon->Get(extension_misc::EXTENSION_ICON_BITTY,
121 ExtensionIconSet::MATCH_EXACTLY));
122
123 // Since default icon set is defined in the manifest, extension action will
124 // try to load an image ofr the default icon. Let's return transparent bitmap
125 // and check it is returned by extension action.
126 SkBitmap transparent_bitmap = CreateTransparentBitmap(16);
127 MockExtensionActionIconFactory mock_icon_factory;
128 EXPECT_CALL(mock_icon_factory,
129 GetIcon(default_icon, ExtensionAction::TYPE_SCRIPT_BADGE))
130 .WillOnce(Return(gfx::ImageSkia(transparent_bitmap)));
131
70 EXPECT_EQ("my extension", extension->script_badge()->GetTitle( 132 EXPECT_EQ("my extension", extension->script_badge()->GetTitle(
71 ExtensionAction::kDefaultTabId)); 133 ExtensionAction::kDefaultTabId));
72 EXPECT_TRUE(ImagesAreEqual( 134 EXPECT_TRUE(ImagesAreEqual(
73 ui::ResourceBundle::GetSharedInstance().GetImageNamed( 135 gfx::Image(transparent_bitmap),
74 IDR_EXTENSIONS_FAVICON), 136 extension->script_badge()->
75 extension->script_badge()->GetIcon(ExtensionAction::kDefaultTabId))); 137 GetIcon(ExtensionAction::kDefaultTabId, &mock_icon_factory)));
76 EXPECT_EQ("icon16.png", extension->script_badge()->default_icon_path());
77 } 138 }
78 139
79 TEST_F(ExtensionManifestTest, ScriptBadgeIconFallsBackToPuzzlePiece) { 140 TEST_F(ExtensionManifestTest, ScriptBadgeIconFallsBackToPuzzlePiece) {
80 scoped_refptr<Extension> extension( 141 scoped_refptr<Extension> extension(
81 LoadAndExpectSuccess("script_badge_only_use_icon16.json")); 142 LoadAndExpectSuccess("script_badge_only_use_icon16.json"));
82 ASSERT_TRUE(extension.get()); 143 ASSERT_TRUE(extension.get());
83 ASSERT_TRUE(extension->script_badge()); 144 ASSERT_TRUE(extension->script_badge());
84 EXPECT_THAT(extension->install_warnings(), 145 EXPECT_THAT(extension->install_warnings(),
85 testing::ElementsAre(/*empty*/)); 146 testing::ElementsAre(/*empty*/));
86 147
87 EXPECT_EQ("", extension->script_badge()->default_icon_path()) 148 MockExtensionActionIconFactory mock_icon_factory;
149 EXPECT_CALL(mock_icon_factory, GetIcon(_, _)).Times(0);
150
151 EXPECT_FALSE(extension->script_badge()->default_icon())
88 << "Should not fall back to the 64px icon."; 152 << "Should not fall back to the 64px icon.";
89 EXPECT_FALSE(extension->script_badge()->GetIcon( 153 EXPECT_EQ(NULL, extension->script_badge()->default_icon());
90 ExtensionAction::kDefaultTabId).IsEmpty()) 154 EXPECT_TRUE(ImagesAreEqual(
91 << "Should set the puzzle piece as the default, but there's no way " 155 ui::ResourceBundle::GetSharedInstance().GetImageNamed(
92 << "to assert in a unittest what the image looks like."; 156 IDR_EXTENSIONS_FAVICON),
157 extension->script_badge()->GetIcon(ExtensionAction::kDefaultTabId,
158 &mock_icon_factory)));
93 } 159 }
94 160
95 } // namespace 161 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698