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

Side by Side Diff: chrome/common/extensions/extension_action_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: review feedback 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 "base/file_path.h" 5 #include "base/file_path.h"
6 #include "base/file_util.h" 6 #include "base/file_util.h"
7 #include "base/message_loop.h" 7 #include "base/message_loop.h"
8 #include "base/path_service.h" 8 #include "base/path_service.h"
9 #include "chrome/common/chrome_paths.h" 9 #include "chrome/common/chrome_paths.h"
10 #include "chrome/common/extensions/extension_action.h" 10 #include "chrome/common/extensions/extension_action.h"
11 #include "chrome/common/extensions/extension_icon_factory_delegate.h"
11 #include "googleurl/src/gurl.h" 12 #include "googleurl/src/gurl.h"
12 #include "grit/theme_resources.h" 13 #include "grit/theme_resources.h"
14 #include "testing/gmock/include/gmock/gmock.h"
13 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
14 #include "third_party/skia/include/core/SkBitmap.h" 16 #include "third_party/skia/include/core/SkBitmap.h"
15 #include "ui/base/resource/resource_bundle.h" 17 #include "ui/base/resource/resource_bundle.h"
16 #include "ui/gfx/image/image_skia.h" 18 #include "ui/gfx/image/image_skia.h"
17 #include "ui/gfx/skia_util.h" 19 #include "ui/gfx/skia_util.h"
18 #include "webkit/glue/image_decoder.h" 20 #include "webkit/glue/image_decoder.h"
19 21
22 using ::testing::Return;
23
20 namespace { 24 namespace {
21 25
22 bool ImagesAreEqual(const gfx::Image& i1, const gfx::Image& i2) { 26 bool ImagesAreEqual(const gfx::Image& i1, const gfx::Image& i2) {
23 return gfx::BitmapsAreEqual(*i1.ToSkBitmap(), *i2.ToSkBitmap()); 27 return gfx::BitmapsAreEqual(*i1.ToSkBitmap(), *i2.ToSkBitmap());
24 } 28 }
25 29
26 gfx::Image LoadIcon(const std::string& filename) { 30 gfx::Image LoadIcon(const std::string& filename) {
27 FilePath path; 31 FilePath path;
28 PathService::Get(chrome::DIR_TEST_DATA, &path); 32 PathService::Get(chrome::DIR_TEST_DATA, &path);
29 path = path.AppendASCII("extensions").AppendASCII(filename); 33 path = path.AppendASCII("extensions").AppendASCII(filename);
(...skipping 12 matching lines...) Expand all
42 46
43 class ExtensionActionTest : public testing::Test { 47 class ExtensionActionTest : public testing::Test {
44 public: 48 public:
45 ExtensionActionTest() 49 ExtensionActionTest()
46 : action("", ExtensionAction::TYPE_PAGE) { 50 : action("", ExtensionAction::TYPE_PAGE) {
47 } 51 }
48 52
49 ExtensionAction action; 53 ExtensionAction action;
50 }; 54 };
51 55
56 class MockActionIconFactory : public ExtensionIconFactoryDelegate {
57 public:
58 virtual ~MockActionIconFactory() {}
59
60 MOCK_METHOD2(GetIcon, gfx::ImageSkia(const ExtensionIconSet* icon_set,
61 int desired_size));
62 };
63
52 TEST_F(ExtensionActionTest, Title) { 64 TEST_F(ExtensionActionTest, Title) {
53 ASSERT_EQ("", action.GetTitle(1)); 65 ASSERT_EQ("", action.GetTitle(1));
54 action.SetTitle(ExtensionAction::kDefaultTabId, "foo"); 66 action.SetTitle(ExtensionAction::kDefaultTabId, "foo");
55 ASSERT_EQ("foo", action.GetTitle(1)); 67 ASSERT_EQ("foo", action.GetTitle(1));
56 ASSERT_EQ("foo", action.GetTitle(100)); 68 ASSERT_EQ("foo", action.GetTitle(100));
57 action.SetTitle(100, "bar"); 69 action.SetTitle(100, "bar");
58 ASSERT_EQ("foo", action.GetTitle(1)); 70 ASSERT_EQ("foo", action.GetTitle(1));
59 ASSERT_EQ("bar", action.GetTitle(100)); 71 ASSERT_EQ("bar", action.GetTitle(100));
60 action.SetTitle(ExtensionAction::kDefaultTabId, "baz"); 72 action.SetTitle(ExtensionAction::kDefaultTabId, "baz");
61 ASSERT_EQ("baz", action.GetTitle(1)); 73 ASSERT_EQ("baz", action.GetTitle(1));
62 action.ClearAllValuesForTab(100); 74 action.ClearAllValuesForTab(100);
63 ASSERT_EQ("baz", action.GetTitle(100)); 75 ASSERT_EQ("baz", action.GetTitle(100));
64 } 76 }
65 77
66 TEST_F(ExtensionActionTest, Icon) { 78 TEST_F(ExtensionActionTest, Icon) {
67 gfx::Image puzzle_piece = 79 gfx::Image puzzle_piece =
68 ui::ResourceBundle::GetSharedInstance().GetImageNamed( 80 ui::ResourceBundle::GetSharedInstance().GetImageNamed(
69 IDR_EXTENSIONS_FAVICON); 81 IDR_EXTENSIONS_FAVICON);
70 gfx::Image icon1 = LoadIcon("icon1.png"); 82 gfx::Image icon1 = LoadIcon("icon1.png");
71 gfx::Image icon2 = LoadIcon("icon2.png"); 83 gfx::Image icon2 = LoadIcon("icon2.png");
72 ASSERT_TRUE(ImagesAreEqual(puzzle_piece, action.GetIcon(1)));
73 84
74 action.set_default_icon_path("the_default.png"); 85 scoped_ptr<ExtensionIconSet> default_icon_set(new ExtensionIconSet());
75 ASSERT_TRUE(ImagesAreEqual(puzzle_piece, action.GetIcon(1))) 86 MockActionIconFactory icon_factory_mock;
76 << "Still returns the puzzle piece because the image isn't loaded yet."; 87
77 action.CacheIcon("the_default.png", icon2); 88 EXPECT_CALL(icon_factory_mock, GetIcon(default_icon_set.get(), 19))
78 ASSERT_TRUE(ImagesAreEqual(icon2, action.GetIcon(1))); 89 .WillOnce(Return(*icon2.ToImageSkia()));
90
91 ASSERT_TRUE(ImagesAreEqual(puzzle_piece,
92 action.GetIcon(1, &icon_factory_mock)));
93
94 action.set_default_icon(default_icon_set.Pass());
95 ASSERT_TRUE(ImagesAreEqual(icon2, action.GetIcon(1, &icon_factory_mock)));
79 96
80 action.SetIcon(ExtensionAction::kDefaultTabId, icon1); 97 action.SetIcon(ExtensionAction::kDefaultTabId, icon1);
81 ASSERT_TRUE(ImagesAreEqual(icon1, action.GetIcon(100))) 98 ASSERT_TRUE(ImagesAreEqual(icon1, action.GetIcon(100, &icon_factory_mock)))
82 << "SetIcon(kDefaultTabId) overrides the default_icon_path."; 99 << "SetIcon(kDefaultTabId) overrides the default_icon_path.";
83 100
84 action.SetIcon(100, icon2); 101 action.SetIcon(100, icon2);
85 ASSERT_TRUE(ImagesAreEqual(icon1, action.GetIcon(1))); 102 ASSERT_TRUE(ImagesAreEqual(icon1, action.GetIcon(1, &icon_factory_mock)));
86 ASSERT_TRUE(ImagesAreEqual(icon2, action.GetIcon(100))); 103 ASSERT_TRUE(ImagesAreEqual(icon2, action.GetIcon(100, &icon_factory_mock)));
87 } 104 }
88 105
89 TEST_F(ExtensionActionTest, IconIndex) { 106 TEST_F(ExtensionActionTest, IconIndex) {
90 gfx::Image icon1 = LoadIcon("icon1.png"); 107 gfx::Image icon1 = LoadIcon("icon1.png");
91 gfx::Image icon2 = LoadIcon("icon2.png"); 108 gfx::Image icon2 = LoadIcon("icon2.png");
92 gfx::Image puzzle_piece = 109 gfx::Image puzzle_piece =
93 ui::ResourceBundle::GetSharedInstance().GetImageNamed( 110 ui::ResourceBundle::GetSharedInstance().GetImageNamed(
94 IDR_EXTENSIONS_FAVICON); 111 IDR_EXTENSIONS_FAVICON);
95 112
96 ASSERT_EQ(-1, action.GetIconIndex(1)); 113 ASSERT_EQ(-1, action.GetIconIndex(1));
97 action.icon_paths()->push_back("foo.png"); 114
98 action.icon_paths()->push_back("bar.png"); 115 scoped_ptr<ExtensionIconSet> icon1_set(new ExtensionIconSet());
116 action.AddPageActionIcon(icon1_set.Pass());
117
118 scoped_ptr<ExtensionIconSet> icon2_set(new ExtensionIconSet());
119 // Remember the icon set pointer since we will need it later, and |action|
120 // will take |icon2_set|.
121 const ExtensionIconSet* icon2_set_ptr = icon2_set.get();
122 action.AddPageActionIcon(icon2_set.Pass());
123
124 MockActionIconFactory icon_factory_mock;
125
126 EXPECT_CALL(icon_factory_mock, GetIcon(icon2_set_ptr, 19))
127 .WillOnce(Return(*icon2.ToImageSkia()));
128
99 action.SetIconIndex(ExtensionAction::kDefaultTabId, 1); 129 action.SetIconIndex(ExtensionAction::kDefaultTabId, 1);
100 ASSERT_EQ(1, action.GetIconIndex(1)); 130 ASSERT_EQ(1, action.GetIconIndex(1));
101 ASSERT_EQ(1, action.GetIconIndex(100)); 131 ASSERT_EQ(1, action.GetIconIndex(100));
102 ASSERT_TRUE(ImagesAreEqual(puzzle_piece, action.GetIcon(100))) 132 ASSERT_TRUE(ImagesAreEqual(icon2, action.GetIcon(100, &icon_factory_mock)));
103 << "Non-loaded icon gets the puzzle piece.";
104 action.CacheIcon("bar.png", icon1);
105 ASSERT_TRUE(ImagesAreEqual(icon1, action.GetIcon(100)));
106 133
107 action.SetIconIndex(100, 0); 134 action.SetIconIndex(100, 0);
108 ASSERT_EQ(0, action.GetIconIndex(100)); 135 ASSERT_EQ(0, action.GetIconIndex(100));
109 ASSERT_EQ(1, action.GetIconIndex(1)); 136 ASSERT_EQ(1, action.GetIconIndex(1));
110 action.ClearAllValuesForTab(100); 137 action.ClearAllValuesForTab(100);
111 ASSERT_EQ(1, action.GetIconIndex(100)); 138 ASSERT_EQ(1, action.GetIconIndex(100));
112 ASSERT_EQ(1, action.GetIconIndex(1)); 139 ASSERT_EQ(1, action.GetIconIndex(1));
113 } 140 }
114 141
115 TEST_F(ExtensionActionTest, Visibility) { 142 TEST_F(ExtensionActionTest, Visibility) {
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 action.SetPopupUrl(ExtensionAction::kDefaultTabId, url_baz); 252 action.SetPopupUrl(ExtensionAction::kDefaultTabId, url_baz);
226 ASSERT_EQ(url_baz, action.GetPopupUrl(1)); 253 ASSERT_EQ(url_baz, action.GetPopupUrl(1));
227 ASSERT_EQ(url_bar, action.GetPopupUrl(100)); 254 ASSERT_EQ(url_bar, action.GetPopupUrl(100));
228 255
229 action.ClearAllValuesForTab(100); 256 action.ClearAllValuesForTab(100);
230 ASSERT_EQ(url_baz, action.GetPopupUrl(1)); 257 ASSERT_EQ(url_baz, action.GetPopupUrl(1));
231 ASSERT_EQ(url_baz, action.GetPopupUrl(100)); 258 ASSERT_EQ(url_baz, action.GetPopupUrl(100));
232 } 259 }
233 260
234 } // namespace 261 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698