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

Side by Side Diff: chrome/browser/extensions/extension_action_manager_unittest.cc

Issue 1739183003: Make extensions::DictionaryBuilder and extensions::ListValue unmovable. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/browser/extensions/extension_action_manager.h" 5 #include "chrome/browser/extensions/extension_action_manager.h"
6 6
7 #include "base/strings/string_number_conversions.h" 7 #include "base/strings/string_number_conversions.h"
8 #include "chrome/browser/extensions/extension_action.h" 8 #include "chrome/browser/extensions/extension_action.h"
9 #include "chrome/test/base/testing_profile.h" 9 #include "chrome/test/base/testing_profile.h"
10 #include "content/public/test/test_browser_thread_bundle.h" 10 #include "content/public/test/test_browser_thread_bundle.h"
(...skipping 12 matching lines...) Expand all
23 23
24 } // namespace 24 } // namespace
25 25
26 class ExtensionActionManagerTest : public testing::Test { 26 class ExtensionActionManagerTest : public testing::Test {
27 public: 27 public:
28 ExtensionActionManagerTest(); 28 ExtensionActionManagerTest();
29 29
30 protected: 30 protected:
31 // Build an extension, populating |action_type| key with |action|, and 31 // Build an extension, populating |action_type| key with |action|, and
32 // "icons" key with |extension_icons|. 32 // "icons" key with |extension_icons|.
33 scoped_refptr<Extension> BuildExtension(DictionaryBuilder extension_icons, 33 scoped_refptr<Extension> BuildExtension(
34 DictionaryBuilder action, 34 scoped_ptr<base::DictionaryValue> extension_icons,
35 const char* action_type); 35 scoped_ptr<base::DictionaryValue> action,
36 const char* action_type);
36 37
37 // Returns true if |action|'s title matches |extension|'s name. 38 // Returns true if |action|'s title matches |extension|'s name.
38 bool TitlesMatch(const Extension& extension, const ExtensionAction& action); 39 bool TitlesMatch(const Extension& extension, const ExtensionAction& action);
39 40
40 // Returns true if |action|'s icon for size |action_key| matches 41 // Returns true if |action|'s icon for size |action_key| matches
41 // |extension|'s icon for size |extension_key|; 42 // |extension|'s icon for size |extension_key|;
42 bool IconsMatch(const Extension& extension, 43 bool IconsMatch(const Extension& extension,
43 int extension_key, 44 int extension_key,
44 const ExtensionAction& action, 45 const ExtensionAction& action,
45 int action_key); 46 int action_key);
(...skipping 18 matching lines...) Expand all
64 }; 65 };
65 66
66 ExtensionActionManagerTest::ExtensionActionManagerTest() 67 ExtensionActionManagerTest::ExtensionActionManagerTest()
67 : curr_id_(0), 68 : curr_id_(0),
68 profile_(new TestingProfile) { 69 profile_(new TestingProfile) {
69 registry_ = ExtensionRegistry::Get(profile_.get()); 70 registry_ = ExtensionRegistry::Get(profile_.get());
70 manager_ = ExtensionActionManager::Get(profile_.get()); 71 manager_ = ExtensionActionManager::Get(profile_.get());
71 } 72 }
72 73
73 scoped_refptr<Extension> ExtensionActionManagerTest::BuildExtension( 74 scoped_refptr<Extension> ExtensionActionManagerTest::BuildExtension(
74 DictionaryBuilder extension_icons, 75 scoped_ptr<base::DictionaryValue> extension_icons,
75 DictionaryBuilder action, 76 scoped_ptr<base::DictionaryValue> action,
76 const char* action_type) { 77 const char* action_type) {
77 std::string id = base::IntToString(curr_id_++); 78 std::string id = base::IntToString(curr_id_++);
78 scoped_refptr<Extension> extension = 79 scoped_refptr<Extension> extension =
79 ExtensionBuilder() 80 ExtensionBuilder()
80 .SetManifest(std::move( 81 .SetManifest(
81 DictionaryBuilder() 82 DictionaryBuilder()
82 .Set("version", "1") 83 .Set("version", "1")
83 .Set("manifest_version", 2) 84 .Set("manifest_version", 2)
84 .Set("icons", std::move(extension_icons)) 85 .Set("icons", std::move(extension_icons))
85 .Set(action_type, std::move(action)) 86 .Set(action_type, std::move(action))
86 .Set("name", std::string("Test Extension").append(id)))) 87 .Set("name", std::string("Test Extension").append(id))
88 .Build())
87 .SetID(id) 89 .SetID(id)
88 .Build(); 90 .Build();
89 registry_->AddEnabled(extension); 91 registry_->AddEnabled(extension);
90 return extension; 92 return extension;
91 } 93 }
92 94
93 bool ExtensionActionManagerTest::TitlesMatch(const Extension& extension, 95 bool ExtensionActionManagerTest::TitlesMatch(const Extension& extension,
94 const ExtensionAction& action) { 96 const ExtensionAction& action) {
95 return action.GetTitle(ExtensionAction::kDefaultTabId) == extension.name(); 97 return action.GetTitle(ExtensionAction::kDefaultTabId) == extension.name();
96 } 98 }
(...skipping 15 matching lines...) Expand all
112 manager_->GetBrowserAction(extension) : 114 manager_->GetBrowserAction(extension) :
113 manager_->GetPageAction(extension); 115 manager_->GetPageAction(extension);
114 } 116 }
115 117
116 void ExtensionActionManagerTest::TestPopulateMissingValues( 118 void ExtensionActionManagerTest::TestPopulateMissingValues(
117 const char* action_type) { 119 const char* action_type) {
118 // Test that the largest icon from the extension's "icons" key is chosen as a 120 // Test that the largest icon from the extension's "icons" key is chosen as a
119 // replacement for missing action default_icons keys. "19" should not be 121 // replacement for missing action default_icons keys. "19" should not be
120 // replaced because "38" can always be used in its place. 122 // replaced because "38" can always be used in its place.
121 scoped_refptr<Extension> extension = 123 scoped_refptr<Extension> extension =
122 BuildExtension(std::move(DictionaryBuilder() 124 BuildExtension(DictionaryBuilder()
123 .Set("48", "icon48.png") 125 .Set("48", "icon48.png")
124 .Set("128", "icon128.png")), 126 .Set("128", "icon128.png")
125 DictionaryBuilder(), action_type); 127 .Build(),
128 DictionaryBuilder().Build(), action_type);
126 129
127 ASSERT_TRUE(extension.get()); 130 ASSERT_TRUE(extension.get());
128 const ExtensionAction* action = GetAction(action_type, *extension.get()); 131 const ExtensionAction* action = GetAction(action_type, *extension.get());
129 ASSERT_TRUE(action); 132 ASSERT_TRUE(action);
130 133
131 ASSERT_TRUE(TitlesMatch(*extension.get(), *action)); 134 ASSERT_TRUE(TitlesMatch(*extension.get(), *action));
132 ASSERT_TRUE(IconsMatch(*extension.get(), 48, *action, 38)); 135 ASSERT_TRUE(IconsMatch(*extension.get(), 48, *action, 38));
133 136
134 // Test that the action's missing default_icons are not replaced with smaller 137 // Test that the action's missing default_icons are not replaced with smaller
135 // icons. 138 // icons.
136 extension = 139 extension =
137 BuildExtension(std::move(DictionaryBuilder().Set("24", "icon24.png")), 140 BuildExtension(DictionaryBuilder().Set("24", "icon24.png").Build(),
138 DictionaryBuilder(), action_type); 141 DictionaryBuilder().Build(), action_type);
139 142
140 ASSERT_TRUE(extension.get()); 143 ASSERT_TRUE(extension.get());
141 action = GetAction(action_type, *extension.get()); 144 action = GetAction(action_type, *extension.get());
142 ASSERT_TRUE(action); 145 ASSERT_TRUE(action);
143 146
144 ASSERT_TRUE(IconsMatch(*extension.get(), 24, *action, 19)); 147 ASSERT_TRUE(IconsMatch(*extension.get(), 24, *action, 19));
145 ASSERT_FALSE(IconsMatch(*extension.get(), 24, *action, 38)); 148 ASSERT_FALSE(IconsMatch(*extension.get(), 24, *action, 38));
146 149
147 // Test that an action's 19px icon is not replaced if a 38px action icon 150 // Test that an action's 19px icon is not replaced if a 38px action icon
148 // exists. 151 // exists.
149 extension = BuildExtension( 152 extension = BuildExtension(
150 std::move(DictionaryBuilder().Set("128", "icon128.png")), 153 DictionaryBuilder().Set("128", "icon128.png").Build(),
151 std::move(DictionaryBuilder().Set( 154 DictionaryBuilder()
152 "default_icon", 155 .Set("default_icon",
153 std::move(DictionaryBuilder().Set("38", "action38.png")))), 156 DictionaryBuilder().Set("38", "action38.png").Build())
157 .Build(),
154 action_type); 158 action_type);
155 159
156 ASSERT_TRUE(extension.get()); 160 ASSERT_TRUE(extension.get());
157 action = GetAction(action_type, *extension.get()); 161 action = GetAction(action_type, *extension.get());
158 ASSERT_TRUE(action); 162 ASSERT_TRUE(action);
159 163
160 ASSERT_FALSE(IconsMatch(*extension.get(), 128, *action, 19)); 164 ASSERT_FALSE(IconsMatch(*extension.get(), 128, *action, 19));
161 165
162 // Test that existing default_icons and default_title are not replaced. 166 // Test that existing default_icons and default_title are not replaced.
163 extension = BuildExtension( 167 extension =
164 std::move(DictionaryBuilder().Set("128", "icon128.png")), 168 BuildExtension(DictionaryBuilder().Set("128", "icon128.png").Build(),
165 std::move( 169 DictionaryBuilder()
166 DictionaryBuilder() 170 .Set("default_title", "Action!")
167 .Set("default_title", "Action!") 171 .Set("default_icon", DictionaryBuilder()
168 .Set("default_icon", std::move(DictionaryBuilder() 172 .Set("19", "action19.png")
169 .Set("19", "action19.png") 173 .Set("38", "action38.png")
170 .Set("38", "action38.png")))), 174 .Build())
171 action_type); 175 .Build(),
176 action_type);
172 177
173 ASSERT_TRUE(extension.get()); 178 ASSERT_TRUE(extension.get());
174 action = GetAction(action_type, *extension.get()); 179 action = GetAction(action_type, *extension.get());
175 ASSERT_TRUE(action); 180 ASSERT_TRUE(action);
176 181
177 ASSERT_FALSE(TitlesMatch(*extension.get(), *action)); 182 ASSERT_FALSE(TitlesMatch(*extension.get(), *action));
178 ASSERT_FALSE(IconsMatch(*extension.get(), 128, *action, 19)); 183 ASSERT_FALSE(IconsMatch(*extension.get(), 128, *action, 19));
179 ASSERT_FALSE(IconsMatch(*extension.get(), 128, *action, 38)); 184 ASSERT_FALSE(IconsMatch(*extension.get(), 128, *action, 38));
180 } 185 }
181 186
182 namespace { 187 namespace {
183 188
184 TEST_F(ExtensionActionManagerTest, PopulateBrowserAction) { 189 TEST_F(ExtensionActionManagerTest, PopulateBrowserAction) {
185 TestPopulateMissingValues(kBrowserAction); 190 TestPopulateMissingValues(kBrowserAction);
186 } 191 }
187 192
188 TEST_F(ExtensionActionManagerTest, PopulatePageAction) { 193 TEST_F(ExtensionActionManagerTest, PopulatePageAction) {
189 TestPopulateMissingValues(kPageAction); 194 TestPopulateMissingValues(kPageAction);
190 } 195 }
191 196
192 TEST_F(ExtensionActionManagerTest, GetBestFitActionTest) { 197 TEST_F(ExtensionActionManagerTest, GetBestFitActionTest) {
193 // Create an extension with page action defaults. 198 // Create an extension with page action defaults.
194 scoped_refptr<Extension> extension = BuildExtension( 199 scoped_refptr<Extension> extension = BuildExtension(
195 std::move(DictionaryBuilder().Set("48", "icon48.png")), 200 DictionaryBuilder().Set("48", "icon48.png").Build(),
196 std::move(DictionaryBuilder() 201 DictionaryBuilder()
197 .Set("default_title", "Action!") 202 .Set("default_title", "Action!")
198 .Set("default_icon", std::move(DictionaryBuilder().Set( 203 .Set("default_icon",
199 "38", "action38.png")))), 204 DictionaryBuilder().Set("38", "action38.png").Build())
205 .Build(),
200 kPageAction); 206 kPageAction);
201 ASSERT_TRUE(extension.get()); 207 ASSERT_TRUE(extension.get());
202 208
203 // Get a "best fit" browser action for |extension|. 209 // Get a "best fit" browser action for |extension|.
204 scoped_ptr<ExtensionAction> action = 210 scoped_ptr<ExtensionAction> action =
205 manager()->GetBestFitAction(*extension.get(), ActionInfo::TYPE_BROWSER); 211 manager()->GetBestFitAction(*extension.get(), ActionInfo::TYPE_BROWSER);
206 ASSERT_TRUE(action.get()); 212 ASSERT_TRUE(action.get());
207 ASSERT_EQ(action->action_type(), ActionInfo::TYPE_BROWSER); 213 ASSERT_EQ(action->action_type(), ActionInfo::TYPE_BROWSER);
208 214
209 // |action|'s title and default icon should match |extension|'s page action's. 215 // |action|'s title and default icon should match |extension|'s page action's.
210 ASSERT_EQ(action->GetTitle(ExtensionAction::kDefaultTabId), "Action!"); 216 ASSERT_EQ(action->GetTitle(ExtensionAction::kDefaultTabId), "Action!");
211 ASSERT_EQ(action->default_icon()->Get(38, ExtensionIconSet::MATCH_EXACTLY), 217 ASSERT_EQ(action->default_icon()->Get(38, ExtensionIconSet::MATCH_EXACTLY),
212 "action38.png"); 218 "action38.png");
213 219
214 // Create a new extension without page action defaults. 220 // Create a new extension without page action defaults.
215 extension = 221 extension =
216 BuildExtension(std::move(DictionaryBuilder().Set("48", "icon48.png")), 222 BuildExtension(DictionaryBuilder().Set("48", "icon48.png").Build(),
217 DictionaryBuilder(), kPageAction); 223 DictionaryBuilder().Build(), kPageAction);
218 ASSERT_TRUE(extension.get()); 224 ASSERT_TRUE(extension.get());
219 225
220 action = 226 action =
221 manager()->GetBestFitAction(*extension.get(), ActionInfo::TYPE_BROWSER); 227 manager()->GetBestFitAction(*extension.get(), ActionInfo::TYPE_BROWSER);
222 228
223 // Now these values match because |extension| does not have page action 229 // Now these values match because |extension| does not have page action
224 // defaults. 230 // defaults.
225 ASSERT_TRUE(TitlesMatch(*extension.get(), *action)); 231 ASSERT_TRUE(TitlesMatch(*extension.get(), *action));
226 ASSERT_TRUE(IconsMatch(*extension.get(), 48, *action, 38)); 232 ASSERT_TRUE(IconsMatch(*extension.get(), 48, *action, 38));
227 } 233 }
228 234
229 } // namespace 235 } // namespace
230 } // namespace extensions 236 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698