OLD | NEW |
---|---|
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project 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 // Flags: --restricted-realms | |
6 | |
5 var realms = [Realm.current(), Realm.create()]; | 7 var realms = [Realm.current(), Realm.create()]; |
6 | 8 |
7 // Check stack trace filtering across security contexts. | 9 // Check stack trace filtering across security contexts. |
8 var thrower_script = | 10 var thrower_script = |
9 "(function () { Realm.eval(Realm.current(), 'throw Error()') })"; | 11 "(function () { Realm.eval(Realm.current(), 'throw Error()') })"; |
10 Realm.shared = { | 12 Realm.shared = { |
11 thrower_0: Realm.eval(realms[0], thrower_script), | 13 thrower_0: Realm.eval(realms[0], thrower_script), |
12 thrower_1: Realm.eval(realms[1], thrower_script), | 14 thrower_1: Realm.eval(realms[1], thrower_script), |
13 }; | 15 }; |
14 | 16 |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
81 | 83 |
82 var o = new f(); | 84 var o = new f(); |
83 var proto = Object.getPrototypeOf(o); | 85 var proto = Object.getPrototypeOf(o); |
84 assertFalse(proto === Object.prototype); | 86 assertFalse(proto === Object.prototype); |
85 assertTrue(proto === otherObject.prototype); | 87 assertTrue(proto === otherObject.prototype); |
86 | 88 |
87 o = Realm.eval(realmIndex, "new f()"); | 89 o = Realm.eval(realmIndex, "new f()"); |
88 proto = Object.getPrototypeOf(o); | 90 proto = Object.getPrototypeOf(o); |
89 assertFalse(proto === Object.prototype); | 91 assertFalse(proto === Object.prototype); |
90 assertTrue(proto === otherObject.prototype); | 92 assertTrue(proto === otherObject.prototype); |
93 | |
94 // Check function constructor. | |
95 var ctor_script = "Function.constructor"; | |
Toon Verwaest
2016/06/06 14:59:51
Why Function.constructor? Function.constructor ===
| |
96 var ctor_a_script = | |
97 "(function() { return Function.constructor.apply(this, ['return 1;']); })"; | |
98 var ctor_b_script = "Function.constructor.bind(this, 'return 1;')"; | |
99 var ctor_c_script = | |
100 "(function() { return Function.constructor.call(this, 'return 1;'); })"; | |
101 Realm.shared = { | |
102 ctor_0 : Realm.eval(realms[0], ctor_script), | |
103 ctor_1 : Realm.eval(realms[1], ctor_script), | |
104 ctor_a_0 : Realm.eval(realms[0], ctor_a_script), | |
105 ctor_a_1 : Realm.eval(realms[1], ctor_a_script), | |
106 ctor_b_0 : Realm.eval(realms[0], ctor_b_script), | |
107 ctor_b_1 : Realm.eval(realms[1], ctor_b_script), | |
108 ctor_c_0 : Realm.eval(realms[0], ctor_c_script), | |
109 ctor_c_1 : Realm.eval(realms[1], ctor_c_script), | |
110 } | |
111 var script_0 = " \ | |
112 var ctor_0 = Realm.shared.ctor_0; \ | |
113 Realm.shared.direct_0 = ctor_0('return 1'); \ | |
114 Realm.shared.indirect_0 = (function() { return ctor_0('return 1;'); })(); \ | |
115 Realm.shared.apply_0 = ctor_0.apply(this, ['return 1']); \ | |
116 Realm.shared.bind_0 = ctor_0.bind(this, 'return 1')(); \ | |
117 Realm.shared.call_0 = ctor_0.call(this, 'return 1'); \ | |
118 Realm.shared.a_0 = Realm.shared.ctor_a_0(); \ | |
119 Realm.shared.b_0 = Realm.shared.ctor_b_0(); \ | |
120 Realm.shared.c_0 = Realm.shared.ctor_c_0(); \ | |
121 "; | |
122 script = script_0 + script_0.replace(/_0/g, "_1"); | |
123 Realm.eval(realms[0], script); | |
124 assertSame(1, Realm.shared.direct_0()); | |
125 assertSame(1, Realm.shared.indirect_0()); | |
126 assertSame(1, Realm.shared.apply_0()); | |
127 assertSame(1, Realm.shared.bind_0()); | |
128 assertSame(1, Realm.shared.call_0()); | |
129 assertSame(1, Realm.shared.a_0()); | |
130 assertSame(1, Realm.shared.b_0()); | |
131 assertSame(1, Realm.shared.c_0()); | |
132 assertSame(undefined, Realm.shared.direct_1); | |
133 assertSame(undefined, Realm.shared.indirect_1); | |
134 assertSame(undefined, Realm.shared.apply_1); | |
135 assertSame(undefined, Realm.shared.bind_1); | |
136 assertSame(undefined, Realm.shared.call_1); | |
137 assertSame(1, Realm.shared.a_1()); | |
138 assertSame(undefined, Realm.shared.b_1); | |
139 assertSame(1, Realm.shared.c_1()); | |
140 Realm.eval(realms[1], script); | |
141 assertSame(undefined, Realm.shared.direct_0); | |
142 assertSame(undefined, Realm.shared.indirect_0); | |
143 assertSame(undefined, Realm.shared.apply_0); | |
144 assertSame(undefined, Realm.shared.bind_0); | |
145 assertSame(undefined, Realm.shared.call_0); | |
146 assertSame(1, Realm.shared.a_0()); | |
147 assertSame(undefined, Realm.shared.b_0); | |
148 assertSame(1, Realm.shared.c_1()); | |
149 assertSame(1, Realm.shared.direct_1()); | |
150 assertSame(1, Realm.shared.indirect_1()); | |
151 assertSame(1, Realm.shared.apply_1()); | |
152 assertSame(1, Realm.shared.bind_1()); | |
153 assertSame(1, Realm.shared.call_1()); | |
154 assertSame(1, Realm.shared.a_1()); | |
155 assertSame(1, Realm.shared.b_1()); | |
156 assertSame(1, Realm.shared.c_1()); | |
OLD | NEW |