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

Side by Side Diff: extensions/renderer/module_system_unittest.cc

Issue 1417513003: [Extensions] Don't allow built-in extensions code to be overridden (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Jochen's Created 5 years, 1 month 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 "base/memory/scoped_ptr.h" 5 #include "base/memory/scoped_ptr.h"
6 #include "extensions/renderer/module_system.h" 6 #include "extensions/renderer/module_system.h"
7 #include "extensions/renderer/module_system_test.h" 7 #include "extensions/renderer/module_system_test.h"
8 #include "gin/modules/module_registry.h" 8 #include "gin/modules/module_registry.h"
9 9
10 namespace extensions { 10 namespace extensions {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 env()->module_system()->Require("test"); 59 env()->module_system()->Require("test");
60 ASSERT_TRUE(handler->handled_exception()); 60 ASSERT_TRUE(handler->handled_exception());
61 61
62 ExpectNoAssertionsMade(); 62 ExpectNoAssertionsMade();
63 } 63 }
64 64
65 TEST_F(ModuleSystemTest, TestRequire) { 65 TEST_F(ModuleSystemTest, TestRequire) {
66 ModuleSystem::NativesEnabledScope natives_enabled_scope( 66 ModuleSystem::NativesEnabledScope natives_enabled_scope(
67 env()->module_system()); 67 env()->module_system());
68 env()->RegisterModule("add", 68 env()->RegisterModule("add",
69 "exports.Add = function(x, y) { return x + y; };"); 69 "exports.$set('Add',"
70 "function(x, y) { return x + y; });");
70 env()->RegisterModule("test", 71 env()->RegisterModule("test",
71 "var Add = require('add').Add;" 72 "var Add = require('add').Add;"
72 "requireNative('assert').AssertTrue(Add(3, 5) == 8);"); 73 "requireNative('assert').AssertTrue(Add(3, 5) == 8);");
73 env()->module_system()->Require("test"); 74 env()->module_system()->Require("test");
74 } 75 }
75 76
76 TEST_F(ModuleSystemTest, TestNestedRequire) { 77 TEST_F(ModuleSystemTest, TestNestedRequire) {
77 ModuleSystem::NativesEnabledScope natives_enabled_scope( 78 ModuleSystem::NativesEnabledScope natives_enabled_scope(
78 env()->module_system()); 79 env()->module_system());
79 env()->RegisterModule("add", 80 env()->RegisterModule("add",
80 "exports.Add = function(x, y) { return x + y; };"); 81 "exports.$set('Add',"
82 "function(x, y) { return x + y; });");
81 env()->RegisterModule("double", 83 env()->RegisterModule("double",
82 "var Add = require('add').Add;" 84 "var Add = require('add').Add;"
83 "exports.Double = function(x) { return Add(x, x); };"); 85 "exports.$set('Double',"
86 "function(x) { return Add(x, x); });");
84 env()->RegisterModule("test", 87 env()->RegisterModule("test",
85 "var Double = require('double').Double;" 88 "var Double = require('double').Double;"
86 "requireNative('assert').AssertTrue(Double(3) == 6);"); 89 "requireNative('assert').AssertTrue(Double(3) == 6);");
87 env()->module_system()->Require("test"); 90 env()->module_system()->Require("test");
88 } 91 }
89 92
90 TEST_F(ModuleSystemTest, TestModuleInsulation) { 93 TEST_F(ModuleSystemTest, TestModuleInsulation) {
91 ModuleSystem::NativesEnabledScope natives_enabled_scope( 94 ModuleSystem::NativesEnabledScope natives_enabled_scope(
92 env()->module_system()); 95 env()->module_system());
93 env()->RegisterModule("x", 96 env()->RegisterModule("x",
94 "var x = 10;" 97 "var x = 10;"
95 "exports.X = function() { return x; };"); 98 "exports.$set('X', function() { return x; });");
96 env()->RegisterModule("y", 99 env()->RegisterModule("y",
97 "var x = 15;" 100 "var x = 15;"
98 "require('x');" 101 "require('x');"
99 "exports.Y = function() { return x; };"); 102 "exports.$set('Y', function() { return x; });");
100 env()->RegisterModule("test", 103 env()->RegisterModule("test",
101 "var Y = require('y').Y;" 104 "var Y = require('y').Y;"
102 "var X = require('x').X;" 105 "var X = require('x').X;"
103 "var assert = requireNative('assert');" 106 "var assert = requireNative('assert');"
104 "assert.AssertTrue(!this.hasOwnProperty('x'));" 107 "assert.AssertTrue(!this.hasOwnProperty('x'));"
105 "assert.AssertTrue(Y() == 15);" 108 "assert.AssertTrue(Y() == 15);"
106 "assert.AssertTrue(X() == 10);"); 109 "assert.AssertTrue(X() == 10);");
107 env()->module_system()->Require("test"); 110 env()->module_system()->Require("test");
108 } 111 }
109 112
(...skipping 23 matching lines...) Expand all
133 ModuleSystem::NativesEnabledScope natives_enabled_inner( 136 ModuleSystem::NativesEnabledScope natives_enabled_inner(
134 env()->module_system()); 137 env()->module_system());
135 } 138 }
136 env()->module_system()->Require("test"); 139 env()->module_system()->Require("test");
137 } 140 }
138 } 141 }
139 142
140 TEST_F(ModuleSystemTest, TestLazyField) { 143 TEST_F(ModuleSystemTest, TestLazyField) {
141 ModuleSystem::NativesEnabledScope natives_enabled_scope( 144 ModuleSystem::NativesEnabledScope natives_enabled_scope(
142 env()->module_system()); 145 env()->module_system());
143 env()->RegisterModule("lazy", "exports.x = 5;"); 146 env()->RegisterModule("lazy", "exports.$set('x', 5);");
144 147
145 v8::Local<v8::Object> object = env()->CreateGlobal("object"); 148 v8::Local<v8::Object> object = env()->CreateGlobal("object");
146 149
147 env()->module_system()->SetLazyField(object, "blah", "lazy", "x"); 150 env()->module_system()->SetLazyField(object, "blah", "lazy", "x");
148 151
149 env()->RegisterModule("test", 152 env()->RegisterModule("test",
150 "var assert = requireNative('assert');" 153 "var assert = requireNative('assert');"
151 "assert.AssertTrue(object.blah == 5);"); 154 "assert.AssertTrue(object.blah == 5);");
152 env()->module_system()->Require("test"); 155 env()->module_system()->Require("test");
153 } 156 }
154 157
155 TEST_F(ModuleSystemTest, TestLazyFieldYieldingObject) { 158 TEST_F(ModuleSystemTest, TestLazyFieldYieldingObject) {
156 ModuleSystem::NativesEnabledScope natives_enabled_scope( 159 ModuleSystem::NativesEnabledScope natives_enabled_scope(
157 env()->module_system()); 160 env()->module_system());
158 env()->RegisterModule( 161 env()->RegisterModule(
159 "lazy", 162 "lazy",
160 "var object = {};" 163 "var object = {};"
161 "object.__defineGetter__('z', function() { return 1; });" 164 "object.__defineGetter__('z', function() { return 1; });"
162 "object.x = 5;" 165 "object.x = 5;"
163 "object.y = function() { return 10; };" 166 "object.y = function() { return 10; };"
164 "exports.object = object;"); 167 "exports.$set('object', object);");
165 168
166 v8::Local<v8::Object> object = env()->CreateGlobal("object"); 169 v8::Local<v8::Object> object = env()->CreateGlobal("object");
167 170
168 env()->module_system()->SetLazyField(object, "thing", "lazy", "object"); 171 env()->module_system()->SetLazyField(object, "thing", "lazy", "object");
169 172
170 env()->RegisterModule("test", 173 env()->RegisterModule("test",
171 "var assert = requireNative('assert');" 174 "var assert = requireNative('assert');"
172 "assert.AssertTrue(object.thing.x == 5);" 175 "assert.AssertTrue(object.thing.x == 5);"
173 "assert.AssertTrue(object.thing.y() == 10);" 176 "assert.AssertTrue(object.thing.y() == 10);"
174 "assert.AssertTrue(object.thing.z == 1);"); 177 "assert.AssertTrue(object.thing.z == 1);");
175 env()->module_system()->Require("test"); 178 env()->module_system()->Require("test");
176 } 179 }
177 180
178 TEST_F(ModuleSystemTest, TestLazyFieldIsOnlyEvaledOnce) { 181 TEST_F(ModuleSystemTest, TestLazyFieldIsOnlyEvaledOnce) {
179 ModuleSystem::NativesEnabledScope natives_enabled_scope( 182 ModuleSystem::NativesEnabledScope natives_enabled_scope(
180 env()->module_system()); 183 env()->module_system());
181 env()->module_system()->RegisterNativeHandler( 184 env()->module_system()->RegisterNativeHandler(
182 "counter", 185 "counter",
183 scoped_ptr<NativeHandler>(new CounterNatives(env()->context()))); 186 scoped_ptr<NativeHandler>(new CounterNatives(env()->context())));
184 env()->RegisterModule("lazy", 187 env()->RegisterModule("lazy",
185 "requireNative('counter').Increment();" 188 "requireNative('counter').Increment();"
186 "exports.x = 5;"); 189 "exports.$set('x', 5);");
187 190
188 v8::Local<v8::Object> object = env()->CreateGlobal("object"); 191 v8::Local<v8::Object> object = env()->CreateGlobal("object");
189 192
190 env()->module_system()->SetLazyField(object, "x", "lazy", "x"); 193 env()->module_system()->SetLazyField(object, "x", "lazy", "x");
191 194
192 env()->RegisterModule("test", 195 env()->RegisterModule("test",
193 "var assert = requireNative('assert');" 196 "var assert = requireNative('assert');"
194 "var counter = requireNative('counter');" 197 "var counter = requireNative('counter');"
195 "assert.AssertTrue(counter.Get() == 0);" 198 "assert.AssertTrue(counter.Get() == 0);"
196 "object.x;" 199 "object.x;"
197 "assert.AssertTrue(counter.Get() == 1);" 200 "assert.AssertTrue(counter.Get() == 1);"
198 "object.x;" 201 "object.x;"
199 "assert.AssertTrue(counter.Get() == 1);"); 202 "assert.AssertTrue(counter.Get() == 1);");
200 env()->module_system()->Require("test"); 203 env()->module_system()->Require("test");
201 } 204 }
202 205
203 TEST_F(ModuleSystemTest, TestRequireNativesAfterLazyEvaluation) { 206 TEST_F(ModuleSystemTest, TestRequireNativesAfterLazyEvaluation) {
204 ModuleSystem::NativesEnabledScope natives_enabled_scope( 207 ModuleSystem::NativesEnabledScope natives_enabled_scope(
205 env()->module_system()); 208 env()->module_system());
206 env()->RegisterModule("lazy", "exports.x = 5;"); 209 env()->RegisterModule("lazy", "exports.$set('x', 5);");
207 v8::Local<v8::Object> object = env()->CreateGlobal("object"); 210 v8::Local<v8::Object> object = env()->CreateGlobal("object");
208 211
209 env()->module_system()->SetLazyField(object, "x", "lazy", "x"); 212 env()->module_system()->SetLazyField(object, "x", "lazy", "x");
210 env()->RegisterModule("test", 213 env()->RegisterModule("test",
211 "object.x;" 214 "object.x;"
212 "requireNative('assert').AssertTrue(true);"); 215 "requireNative('assert').AssertTrue(true);");
213 env()->module_system()->Require("test"); 216 env()->module_system()->Require("test");
214 } 217 }
215 218
216 TEST_F(ModuleSystemTest, TestTransitiveRequire) { 219 TEST_F(ModuleSystemTest, TestTransitiveRequire) {
217 ModuleSystem::NativesEnabledScope natives_enabled_scope( 220 ModuleSystem::NativesEnabledScope natives_enabled_scope(
218 env()->module_system()); 221 env()->module_system());
219 env()->RegisterModule("dependency", "exports.x = 5;"); 222 env()->RegisterModule("dependency", "exports.$set('x', 5);");
220 env()->RegisterModule("lazy", "exports.output = require('dependency');"); 223 env()->RegisterModule("lazy",
224 "exports.$set('output', require('dependency'));");
221 225
222 v8::Local<v8::Object> object = env()->CreateGlobal("object"); 226 v8::Local<v8::Object> object = env()->CreateGlobal("object");
223 227
224 env()->module_system()->SetLazyField(object, "thing", "lazy", "output"); 228 env()->module_system()->SetLazyField(object, "thing", "lazy", "output");
225 229
226 env()->RegisterModule("test", 230 env()->RegisterModule("test",
227 "var assert = requireNative('assert');" 231 "var assert = requireNative('assert');"
228 "assert.AssertTrue(object.thing.x == 5);"); 232 "assert.AssertTrue(object.thing.x == 5);");
229 env()->module_system()->Require("test"); 233 env()->module_system()->Require("test");
230 } 234 }
(...skipping 15 matching lines...) Expand all
246 "assert.AssertTrue(counter.Get() == 1);" 250 "assert.AssertTrue(counter.Get() == 1);"
247 "require('incrementsWhenEvaled');" 251 "require('incrementsWhenEvaled');"
248 "assert.AssertTrue(counter.Get() == 1);"); 252 "assert.AssertTrue(counter.Get() == 1);");
249 253
250 env()->module_system()->Require("test"); 254 env()->module_system()->Require("test");
251 } 255 }
252 256
253 TEST_F(ModuleSystemTest, TestOverrideNativeHandler) { 257 TEST_F(ModuleSystemTest, TestOverrideNativeHandler) {
254 ModuleSystem::NativesEnabledScope natives_enabled_scope( 258 ModuleSystem::NativesEnabledScope natives_enabled_scope(
255 env()->module_system()); 259 env()->module_system());
256 env()->OverrideNativeHandler("assert", "exports.AssertTrue = function() {};"); 260 env()->OverrideNativeHandler("assert",
261 "exports.$set('AssertTrue', function() {});");
257 env()->RegisterModule("test", "requireNative('assert').AssertTrue(true);"); 262 env()->RegisterModule("test", "requireNative('assert').AssertTrue(true);");
258 ExpectNoAssertionsMade(); 263 ExpectNoAssertionsMade();
259 env()->module_system()->Require("test"); 264 env()->module_system()->Require("test");
260 } 265 }
261 266
262 TEST_F(ModuleSystemTest, TestOverrideNonExistentNativeHandler) { 267 TEST_F(ModuleSystemTest, TestOverrideNonExistentNativeHandler) {
263 ModuleSystem::NativesEnabledScope natives_enabled_scope( 268 ModuleSystem::NativesEnabledScope natives_enabled_scope(
264 env()->module_system()); 269 env()->module_system());
265 env()->OverrideNativeHandler("thing", "exports.x = 5;"); 270 env()->OverrideNativeHandler("thing", "exports.$set('x', 5);");
266 env()->RegisterModule("test", 271 env()->RegisterModule("test",
267 "var assert = requireNative('assert');" 272 "var assert = requireNative('assert');"
268 "assert.AssertTrue(requireNative('thing').x == 5);"); 273 "assert.AssertTrue(requireNative('thing').x == 5);");
269 env()->module_system()->Require("test"); 274 env()->module_system()->Require("test");
270 } 275 }
271 276
272 TEST_F(ModuleSystemTest, TestRequireAsync) { 277 TEST_F(ModuleSystemTest, TestRequireAsync) {
273 ModuleSystem::NativesEnabledScope natives_enabled_scope( 278 ModuleSystem::NativesEnabledScope natives_enabled_scope(
274 env()->module_system()); 279 env()->module_system());
275 env()->RegisterModule("add", 280 env()->RegisterModule("add",
(...skipping 20 matching lines...) Expand all
296 "define('add', [], function() {" 301 "define('add', [], function() {"
297 " return { Add: function(x, y) { return x + y; } };" 302 " return { Add: function(x, y) { return x + y; } };"
298 "});"); 303 "});");
299 env()->RegisterModule( 304 env()->RegisterModule(
300 "subtract", 305 "subtract",
301 "define('subtract', [], function() {" 306 "define('subtract', [], function() {"
302 " return { Subtract: function(x, y) { return x - y; } };" 307 " return { Subtract: function(x, y) { return x - y; } };"
303 "});"); 308 "});");
304 env()->RegisterModule( 309 env()->RegisterModule(
305 "math", 310 "math",
306 "exports.AddAndSubtract = function(x, y, z) {" 311 "exports.$set('AddAndSubtract', function(x, y, z) {"
307 " return Promise.all([requireAsync('add')," 312 " return Promise.all([requireAsync('add'),"
308 " requireAsync('subtract')" 313 " requireAsync('subtract')"
309 " ]).then(function(modules) {" 314 " ]).then(function(modules) {"
310 " return modules[1].Subtract(modules[0].Add(x, y), z);" 315 " return modules[1].Subtract(modules[0].Add(x, y), z);"
311 " });" 316 " });"
312 "};"); 317 "});");
313 env()->RegisterModule("test", 318 env()->RegisterModule("test",
314 "var AddAndSubtract = require('math').AddAndSubtract;" 319 "var AddAndSubtract = require('math').AddAndSubtract;"
315 "AddAndSubtract(3, 5, 2).then(function(result) {" 320 "AddAndSubtract(3, 5, 2).then(function(result) {"
316 " requireNative('assert').AssertTrue(result == 6);" 321 " requireNative('assert').AssertTrue(result == 6);"
317 "});"); 322 "});");
318 env()->module_system()->Require("test"); 323 env()->module_system()->Require("test");
319 RunResolvedPromises(); 324 RunResolvedPromises();
320 } 325 }
321 326
322 TEST_F(ModuleSystemTest, TestNestedRequireAsyncs) { 327 TEST_F(ModuleSystemTest, TestNestedRequireAsyncs) {
(...skipping 14 matching lines...) Expand all
337 "}).then(function(module) {" 342 "}).then(function(module) {"
338 " requireNative('assert').AssertTrue(module.next === '');" 343 " requireNative('assert').AssertTrue(module.next === '');"
339 "});"); 344 "});");
340 env()->module_system()->Require("test"); 345 env()->module_system()->Require("test");
341 RunResolvedPromises(); 346 RunResolvedPromises();
342 } 347 }
343 348
344 TEST_F(ModuleSystemTest, TestRequireFromAMDModule) { 349 TEST_F(ModuleSystemTest, TestRequireFromAMDModule) {
345 ModuleSystem::NativesEnabledScope natives_enabled_scope( 350 ModuleSystem::NativesEnabledScope natives_enabled_scope(
346 env()->module_system()); 351 env()->module_system());
347 env()->RegisterModule("add", 352 env()->RegisterModule(
348 "exports.Add = function(x, y) { return x + y; };"); 353 "add", "exports.$set('Add', function(x, y) { return x + y; });");
349 env()->RegisterModule("math", 354 env()->RegisterModule("math",
350 "define('math', [], function() {" 355 "define('math', [], function() {"
351 " var add = require('add');" 356 " var add = require('add');"
352 " return { Add: add.Add };" 357 " return { Add: add.Add };"
353 "});"); 358 "});");
354 env()->RegisterModule( 359 env()->RegisterModule(
355 "test", 360 "test",
356 "requireAsync('math').then(function(math) {" 361 "requireAsync('math').then(function(math) {"
357 " requireNative('assert').AssertTrue(math.Add(3, 5) == 8);" 362 " requireNative('assert').AssertTrue(math.Add(3, 5) == 8);"
358 "});"); 363 "});");
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
489 gin::ModuleRegistry::From(env()->context()->v8_context()) 494 gin::ModuleRegistry::From(env()->context()->v8_context())
490 ->AddBuiltinModule( 495 ->AddBuiltinModule(
491 env()->isolate(), "natives", 496 env()->isolate(), "natives",
492 other_env->module_system()->NewInstance()); 497 other_env->module_system()->NewInstance());
493 other_env->ShutdownModuleSystem(); 498 other_env->ShutdownModuleSystem();
494 env()->module_system()->Require("test"); 499 env()->module_system()->Require("test");
495 RunResolvedPromises(); 500 RunResolvedPromises();
496 } 501 }
497 502
498 } // namespace extensions 503 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/renderer/module_system.cc ('k') | extensions/renderer/resources/app_runtime_custom_bindings.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698