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"; |
| 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 |