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

Side by Side Diff: chrome/browser/extensions/api/declarative_content/content_action_unittest.cc

Issue 493633003: Browser changes for wiring up RequestContentScript API to shared memory (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove browsertests. AGAIN. Created 6 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
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/browser/extensions/api/declarative_content/content_action.h" 5 #include "chrome/browser/extensions/api/declarative_content/content_action.h"
6 6
7 #include "base/run_loop.h"
7 #include "base/test/values_test_util.h" 8 #include "base/test/values_test_util.h"
8 #include "chrome/browser/extensions/extension_action.h" 9 #include "chrome/browser/extensions/extension_action.h"
9 #include "chrome/browser/extensions/extension_action_manager.h" 10 #include "chrome/browser/extensions/extension_action_manager.h"
11 #include "chrome/browser/extensions/extension_service_test_base.h"
10 #include "chrome/browser/extensions/extension_tab_util.h" 12 #include "chrome/browser/extensions/extension_tab_util.h"
11 #include "chrome/browser/extensions/test_extension_environment.h" 13 #include "chrome/browser/extensions/test_extension_environment.h"
14 #include "chrome/browser/extensions/test_extension_system.h"
15 #include "chrome/test/base/testing_profile.h"
12 #include "chrome/test/base/testing_profile.h" 16 #include "chrome/test/base/testing_profile.h"
13 #include "content/public/browser/web_contents.h" 17 #include "content/public/browser/web_contents.h"
18 #include "extensions/browser/extension_registry.h"
Devlin 2014/08/27 21:22:05 don't need.
Mark Dittmer 2014/08/28 19:57:08 Done.
19 #include "extensions/browser/extension_system.h"
20 #include "extensions/common/extension.h"
14 #include "extensions/common/extension_builder.h" 21 #include "extensions/common/extension_builder.h"
15 #include "testing/gmock/include/gmock/gmock.h" 22 #include "testing/gmock/include/gmock/gmock.h"
16 #include "testing/gtest/include/gtest/gtest.h" 23 #include "testing/gtest/include/gtest/gtest.h"
17 24
18 namespace extensions { 25 namespace extensions {
19 namespace { 26 namespace {
20 27
21 using base::test::ParseJson; 28 using base::test::ParseJson;
22 using testing::HasSubstr; 29 using testing::HasSubstr;
23 30
31
32 scoped_ptr<base::DictionaryValue> SimpleManifest() {
33 return DictionaryBuilder()
34 .Set("name", "extension")
35 .Set("manifest_version", 2)
36 .Set("version", "1.0")
37 .Build();
38 }
39
40 class RequestContentScriptTest : public ExtensionServiceTestBase {
41 public:
42 RequestContentScriptTest();
43
44 Profile* profile() { return profile_.get(); }
45 Extension* extension() { return extension_.get(); }
46
47 private:
48 scoped_refptr<Extension> extension_;
49 };
50
51 RequestContentScriptTest::RequestContentScriptTest()
52 : extension_(ExtensionBuilder().SetManifest(SimpleManifest()).Build()) {
53 profile_.reset(TestingProfile::Builder().Build().release());
Devlin 2014/08/27 21:22:05 Two things: 1. These should almost certainly not g
Mark Dittmer 2014/08/28 12:22:17 Done. I'm not sure what you meant by "within your
Devlin 2014/08/28 17:58:10 Sometimes, there's a problem with calling Initiali
Mark Dittmer 2014/08/28 19:57:07 Very unfortunate. The subsequent lines depend on i
54 static_cast<TestExtensionSystem*>(ExtensionSystem::Get(profile_.get()))->
55 SetReady();
56 base::RunLoop().RunUntilIdle();
57 }
58
24 TEST(DeclarativeContentActionTest, InvalidCreation) { 59 TEST(DeclarativeContentActionTest, InvalidCreation) {
25 TestExtensionEnvironment env; 60 TestExtensionEnvironment env;
26 std::string error; 61 std::string error;
27 bool bad_message = false; 62 bool bad_message = false;
28 scoped_refptr<const ContentAction> result; 63 scoped_refptr<const ContentAction> result;
29 64
30 // Test wrong data type passed. 65 // Test wrong data type passed.
31 error.clear(); 66 error.clear();
32 result = ContentAction::Create(NULL, *ParseJson("[]"), &error, &bad_message); 67 result = ContentAction::Create(
68 NULL, NULL, *ParseJson("[]"), &error, &bad_message);
33 EXPECT_TRUE(bad_message); 69 EXPECT_TRUE(bad_message);
34 EXPECT_EQ("", error); 70 EXPECT_EQ("", error);
35 EXPECT_FALSE(result.get()); 71 EXPECT_FALSE(result.get());
36 72
37 // Test missing instanceType element. 73 // Test missing instanceType element.
38 error.clear(); 74 error.clear();
39 result = ContentAction::Create(NULL, *ParseJson("{}"), &error, &bad_message); 75 result = ContentAction::Create(
76 NULL, NULL, *ParseJson("{}"), &error, &bad_message);
40 EXPECT_TRUE(bad_message); 77 EXPECT_TRUE(bad_message);
41 EXPECT_EQ("", error); 78 EXPECT_EQ("", error);
42 EXPECT_FALSE(result.get()); 79 EXPECT_FALSE(result.get());
43 80
44 // Test wrong instanceType element. 81 // Test wrong instanceType element.
45 error.clear(); 82 error.clear();
46 result = ContentAction::Create(NULL, *ParseJson( 83 result = ContentAction::Create(NULL, NULL, *ParseJson(
47 "{\n" 84 "{\n"
48 " \"instanceType\": \"declarativeContent.UnknownType\",\n" 85 " \"instanceType\": \"declarativeContent.UnknownType\",\n"
49 "}"), 86 "}"),
50 &error, &bad_message); 87 &error, &bad_message);
51 EXPECT_THAT(error, HasSubstr("invalid instanceType")); 88 EXPECT_THAT(error, HasSubstr("invalid instanceType"));
52 EXPECT_FALSE(result.get()); 89 EXPECT_FALSE(result.get());
53 } 90 }
54 91
55 TEST(DeclarativeContentActionTest, ShowPageActionWithoutPageAction) { 92 TEST(DeclarativeContentActionTest, ShowPageActionWithoutPageAction) {
56 TestExtensionEnvironment env; 93 TestExtensionEnvironment env;
57 94
58 const Extension* extension = env.MakeExtension(base::DictionaryValue()); 95 const Extension* extension = env.MakeExtension(base::DictionaryValue());
59 std::string error; 96 std::string error;
60 bool bad_message = false; 97 bool bad_message = false;
61 scoped_refptr<const ContentAction> result = ContentAction::Create( 98 scoped_refptr<const ContentAction> result = ContentAction::Create(
99 NULL,
62 extension, 100 extension,
63 *ParseJson( 101 *ParseJson(
64 "{\n" 102 "{\n"
65 " \"instanceType\": \"declarativeContent.ShowPageAction\",\n" 103 " \"instanceType\": \"declarativeContent.ShowPageAction\",\n"
66 "}"), 104 "}"),
67 &error, 105 &error,
68 &bad_message); 106 &bad_message);
69 EXPECT_THAT(error, testing::HasSubstr("without a page action")); 107 EXPECT_THAT(error, testing::HasSubstr("without a page action"));
70 EXPECT_FALSE(bad_message); 108 EXPECT_FALSE(bad_message);
71 ASSERT_FALSE(result.get()); 109 ASSERT_FALSE(result.get());
72 } 110 }
73 111
74 TEST(DeclarativeContentActionTest, ShowPageAction) { 112 TEST(DeclarativeContentActionTest, ShowPageAction) {
75 TestExtensionEnvironment env; 113 TestExtensionEnvironment env;
76 114
77 const Extension* extension = env.MakeExtension( 115 const Extension* extension = env.MakeExtension(
78 *ParseJson("{\"page_action\": { \"default_title\": \"Extension\" } }")); 116 *ParseJson("{\"page_action\": { \"default_title\": \"Extension\" } }"));
79 std::string error; 117 std::string error;
80 bool bad_message = false; 118 bool bad_message = false;
81 scoped_refptr<const ContentAction> result = ContentAction::Create( 119 scoped_refptr<const ContentAction> result = ContentAction::Create(
120 NULL,
82 extension, 121 extension,
83 *ParseJson( 122 *ParseJson(
84 "{\n" 123 "{\n"
85 " \"instanceType\": \"declarativeContent.ShowPageAction\",\n" 124 " \"instanceType\": \"declarativeContent.ShowPageAction\",\n"
86 "}"), 125 "}"),
87 &error, 126 &error,
88 &bad_message); 127 &bad_message);
89 EXPECT_EQ("", error); 128 EXPECT_EQ("", error);
90 EXPECT_FALSE(bad_message); 129 EXPECT_FALSE(bad_message);
91 ASSERT_TRUE(result.get()); 130 ASSERT_TRUE(result.get());
(...skipping 10 matching lines...) Expand all
102 result->Apply(extension->id(), base::Time(), &apply_info); 141 result->Apply(extension->id(), base::Time(), &apply_info);
103 EXPECT_TRUE(page_action->GetIsVisible(tab_id)); 142 EXPECT_TRUE(page_action->GetIsVisible(tab_id));
104 result->Apply(extension->id(), base::Time(), &apply_info); 143 result->Apply(extension->id(), base::Time(), &apply_info);
105 EXPECT_TRUE(page_action->GetIsVisible(tab_id)); 144 EXPECT_TRUE(page_action->GetIsVisible(tab_id));
106 result->Revert(extension->id(), base::Time(), &apply_info); 145 result->Revert(extension->id(), base::Time(), &apply_info);
107 EXPECT_TRUE(page_action->GetIsVisible(tab_id)); 146 EXPECT_TRUE(page_action->GetIsVisible(tab_id));
108 result->Revert(extension->id(), base::Time(), &apply_info); 147 result->Revert(extension->id(), base::Time(), &apply_info);
109 EXPECT_FALSE(page_action->GetIsVisible(tab_id)); 148 EXPECT_FALSE(page_action->GetIsVisible(tab_id));
110 } 149 }
111 150
112 TEST(DeclarativeContentActionTest, RequestContentScriptMissingScripts) { 151 TEST_F(RequestContentScriptTest, MissingScripts) {
113 TestExtensionEnvironment env;
114
115 std::string error; 152 std::string error;
116 bool bad_message = false; 153 bool bad_message = false;
117 scoped_refptr<const ContentAction> result = ContentAction::Create( 154 scoped_refptr<const ContentAction> result = ContentAction::Create(
118 NULL, 155 profile(),
156 extension(),
119 *ParseJson( 157 *ParseJson(
120 "{\n" 158 "{\n"
121 " \"instanceType\": \"declarativeContent.RequestContentScript\",\n" 159 " \"instanceType\": \"declarativeContent.RequestContentScript\",\n"
122 " \"allFrames\": true,\n" 160 " \"allFrames\": true,\n"
123 " \"matchAboutBlank\": true\n" 161 " \"matchAboutBlank\": true\n"
124 "}"), 162 "}"),
125 &error, 163 &error,
126 &bad_message); 164 &bad_message);
127 EXPECT_THAT(error, testing::HasSubstr("Missing parameter is required")); 165 EXPECT_THAT(error, testing::HasSubstr("Missing parameter is required"));
128 EXPECT_FALSE(bad_message); 166 EXPECT_FALSE(bad_message);
129 ASSERT_FALSE(result.get()); 167 ASSERT_FALSE(result.get());
130 } 168 }
131 169
132 TEST(DeclarativeContentActionTest, RequestContentScriptCSS) { 170 TEST_F(RequestContentScriptTest, CSS) {
133 TestExtensionEnvironment env;
134
135 std::string error; 171 std::string error;
136 bool bad_message = false; 172 bool bad_message = false;
137 scoped_refptr<const ContentAction> result = ContentAction::Create( 173 scoped_refptr<const ContentAction> result = ContentAction::Create(
138 NULL, 174 profile(),
175 extension(),
139 *ParseJson( 176 *ParseJson(
140 "{\n" 177 "{\n"
141 " \"instanceType\": \"declarativeContent.RequestContentScript\",\n" 178 " \"instanceType\": \"declarativeContent.RequestContentScript\",\n"
142 " \"css\": [\"style.css\"]\n" 179 " \"css\": [\"style.css\"]\n"
143 "}"), 180 "}"),
144 &error, 181 &error,
145 &bad_message); 182 &bad_message);
146 EXPECT_EQ("", error); 183 EXPECT_EQ("", error);
147 EXPECT_FALSE(bad_message); 184 EXPECT_FALSE(bad_message);
148 ASSERT_TRUE(result.get()); 185 ASSERT_TRUE(result.get());
149 EXPECT_EQ(ContentAction::ACTION_REQUEST_CONTENT_SCRIPT, result->GetType()); 186 EXPECT_EQ(ContentAction::ACTION_REQUEST_CONTENT_SCRIPT, result->GetType());
150 } 187 }
151 188
152 TEST(DeclarativeContentActionTest, RequestContentScriptJS) { 189 TEST_F(RequestContentScriptTest, JS) {
153 TestExtensionEnvironment env;
154
155 std::string error; 190 std::string error;
156 bool bad_message = false; 191 bool bad_message = false;
157 scoped_refptr<const ContentAction> result = ContentAction::Create( 192 scoped_refptr<const ContentAction> result = ContentAction::Create(
158 NULL, 193 profile(),
194 extension(),
159 *ParseJson( 195 *ParseJson(
160 "{\n" 196 "{\n"
161 " \"instanceType\": \"declarativeContent.RequestContentScript\",\n" 197 " \"instanceType\": \"declarativeContent.RequestContentScript\",\n"
162 " \"js\": [\"script.js\"]\n" 198 " \"js\": [\"script.js\"]\n"
163 "}"), 199 "}"),
164 &error, 200 &error,
165 &bad_message); 201 &bad_message);
166 EXPECT_EQ("", error); 202 EXPECT_EQ("", error);
167 EXPECT_FALSE(bad_message); 203 EXPECT_FALSE(bad_message);
168 ASSERT_TRUE(result.get()); 204 ASSERT_TRUE(result.get());
169 EXPECT_EQ(ContentAction::ACTION_REQUEST_CONTENT_SCRIPT, result->GetType()); 205 EXPECT_EQ(ContentAction::ACTION_REQUEST_CONTENT_SCRIPT, result->GetType());
170 } 206 }
171 207
172 TEST(DeclarativeContentActionTest, RequestContentScriptCSSBadType) { 208 TEST_F(RequestContentScriptTest, CSSBadType) {
173 TestExtensionEnvironment env;
174
175 std::string error; 209 std::string error;
176 bool bad_message = false; 210 bool bad_message = false;
177 scoped_refptr<const ContentAction> result = ContentAction::Create( 211 scoped_refptr<const ContentAction> result = ContentAction::Create(
178 NULL, 212 profile(),
213 extension(),
179 *ParseJson( 214 *ParseJson(
180 "{\n" 215 "{\n"
181 " \"instanceType\": \"declarativeContent.RequestContentScript\",\n" 216 " \"instanceType\": \"declarativeContent.RequestContentScript\",\n"
182 " \"css\": \"style.css\"\n" 217 " \"css\": \"style.css\"\n"
183 "}"), 218 "}"),
184 &error, 219 &error,
185 &bad_message); 220 &bad_message);
186 EXPECT_TRUE(bad_message); 221 EXPECT_TRUE(bad_message);
187 ASSERT_FALSE(result.get()); 222 ASSERT_FALSE(result.get());
188 } 223 }
189 224
190 TEST(DeclarativeContentActionTest, RequestContentScriptJSBadType) { 225 TEST_F(RequestContentScriptTest, JSBadType) {
191 TestExtensionEnvironment env;
192
193 std::string error; 226 std::string error;
194 bool bad_message = false; 227 bool bad_message = false;
195 scoped_refptr<const ContentAction> result = ContentAction::Create( 228 scoped_refptr<const ContentAction> result = ContentAction::Create(
196 NULL, 229 profile(),
230 extension(),
197 *ParseJson( 231 *ParseJson(
198 "{\n" 232 "{\n"
199 " \"instanceType\": \"declarativeContent.RequestContentScript\",\n" 233 " \"instanceType\": \"declarativeContent.RequestContentScript\",\n"
200 " \"js\": \"script.js\"\n" 234 " \"js\": \"script.js\"\n"
201 "}"), 235 "}"),
202 &error, 236 &error,
203 &bad_message); 237 &bad_message);
204 EXPECT_TRUE(bad_message); 238 EXPECT_TRUE(bad_message);
205 ASSERT_FALSE(result.get()); 239 ASSERT_FALSE(result.get());
206 } 240 }
207 241
208 TEST(DeclarativeContentActionTest, RequestContentScriptAllFrames) { 242 TEST_F(RequestContentScriptTest, AllFrames) {
209 TestExtensionEnvironment env;
210
211 std::string error; 243 std::string error;
212 bool bad_message = false; 244 bool bad_message = false;
213 scoped_refptr<const ContentAction> result = ContentAction::Create( 245 scoped_refptr<const ContentAction> result = ContentAction::Create(
214 NULL, 246 profile(),
247 extension(),
215 *ParseJson( 248 *ParseJson(
216 "{\n" 249 "{\n"
217 " \"instanceType\": \"declarativeContent.RequestContentScript\",\n" 250 " \"instanceType\": \"declarativeContent.RequestContentScript\",\n"
218 " \"js\": [\"script.js\"],\n" 251 " \"js\": [\"script.js\"],\n"
219 " \"allFrames\": true\n" 252 " \"allFrames\": true\n"
220 "}"), 253 "}"),
221 &error, 254 &error,
222 &bad_message); 255 &bad_message);
223 EXPECT_EQ("", error); 256 EXPECT_EQ("", error);
224 EXPECT_FALSE(bad_message); 257 EXPECT_FALSE(bad_message);
225 ASSERT_TRUE(result.get()); 258 ASSERT_TRUE(result.get());
226 EXPECT_EQ(ContentAction::ACTION_REQUEST_CONTENT_SCRIPT, result->GetType()); 259 EXPECT_EQ(ContentAction::ACTION_REQUEST_CONTENT_SCRIPT, result->GetType());
227 } 260 }
228 261
229 TEST(DeclarativeContentActionTest, RequestContentScriptMatchAboutBlank) { 262 TEST_F(RequestContentScriptTest, MatchAboutBlank) {
230 TestExtensionEnvironment env;
231
232 std::string error; 263 std::string error;
233 bool bad_message = false; 264 bool bad_message = false;
234 scoped_refptr<const ContentAction> result = ContentAction::Create( 265 scoped_refptr<const ContentAction> result = ContentAction::Create(
235 NULL, 266 profile(),
267 extension(),
236 *ParseJson( 268 *ParseJson(
237 "{\n" 269 "{\n"
238 " \"instanceType\": \"declarativeContent.RequestContentScript\",\n" 270 " \"instanceType\": \"declarativeContent.RequestContentScript\",\n"
239 " \"js\": [\"script.js\"],\n" 271 " \"js\": [\"script.js\"],\n"
240 " \"matchAboutBlank\": true\n" 272 " \"matchAboutBlank\": true\n"
241 "}"), 273 "}"),
242 &error, 274 &error,
243 &bad_message); 275 &bad_message);
244 EXPECT_EQ("", error); 276 EXPECT_EQ("", error);
245 EXPECT_FALSE(bad_message); 277 EXPECT_FALSE(bad_message);
246 ASSERT_TRUE(result.get()); 278 ASSERT_TRUE(result.get());
247 EXPECT_EQ(ContentAction::ACTION_REQUEST_CONTENT_SCRIPT, result->GetType()); 279 EXPECT_EQ(ContentAction::ACTION_REQUEST_CONTENT_SCRIPT, result->GetType());
248 } 280 }
249 281
250 TEST(DeclarativeContentActionTest, RequestContentScriptAllFramesBadType) { 282 TEST_F(RequestContentScriptTest, AllFramesBadType) {
251 TestExtensionEnvironment env;
252
253 std::string error; 283 std::string error;
254 bool bad_message = false; 284 bool bad_message = false;
255 scoped_refptr<const ContentAction> result = ContentAction::Create( 285 scoped_refptr<const ContentAction> result = ContentAction::Create(
256 NULL, 286 profile(),
287 extension(),
257 *ParseJson( 288 *ParseJson(
258 "{\n" 289 "{\n"
259 " \"instanceType\": \"declarativeContent.RequestContentScript\",\n" 290 " \"instanceType\": \"declarativeContent.RequestContentScript\",\n"
260 " \"js\": [\"script.js\"],\n" 291 " \"js\": [\"script.js\"],\n"
261 " \"allFrames\": null\n" 292 " \"allFrames\": null\n"
262 "}"), 293 "}"),
263 &error, 294 &error,
264 &bad_message); 295 &bad_message);
265 EXPECT_TRUE(bad_message); 296 EXPECT_TRUE(bad_message);
266 ASSERT_FALSE(result.get()); 297 ASSERT_FALSE(result.get());
267 } 298 }
268 299
269 TEST(DeclarativeContentActionTest, RequestContentScriptMatchAboutBlankBadType) { 300 TEST_F(RequestContentScriptTest, MatchAboutBlankBadType) {
270 TestExtensionEnvironment env;
271
272 std::string error; 301 std::string error;
273 bool bad_message = false; 302 bool bad_message = false;
274 scoped_refptr<const ContentAction> result = ContentAction::Create( 303 scoped_refptr<const ContentAction> result = ContentAction::Create(
275 NULL, 304 profile(),
305 extension(),
276 *ParseJson( 306 *ParseJson(
277 "{\n" 307 "{\n"
278 " \"instanceType\": \"declarativeContent.RequestContentScript\",\n" 308 " \"instanceType\": \"declarativeContent.RequestContentScript\",\n"
279 " \"js\": [\"script.js\"],\n" 309 " \"js\": [\"script.js\"],\n"
280 " \"matchAboutBlank\": null\n" 310 " \"matchAboutBlank\": null\n"
281 "}"), 311 "}"),
282 &error, 312 &error,
283 &bad_message); 313 &bad_message);
284 EXPECT_TRUE(bad_message); 314 EXPECT_TRUE(bad_message);
285 ASSERT_FALSE(result.get()); 315 ASSERT_FALSE(result.get());
286 } 316 }
287 317
288 } // namespace 318 } // namespace
289 } // namespace extensions 319 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698