blob: b0d9facb7e4bc120b6f0ae4e5d66fc4219454005 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
// obj.getOwnPropertyDescriptor works when obj is a transparent cross-compartment wrapper.
var g1 = newGlobal({newCompartment: true});
var g2 = newGlobal({newCompartment: true});
g1.next = g2;
// This test is a little hard to follow, especially the !== assertions.
//
// Bottom line: the value of a property of g1 can only be an object in g1's
// compartment, so any Debugger.Objects obtained by calling
// g1obj.getOwnPropertyDescriptor should all have referents in g1's
// compartment.
var dbg = new Debugger;
var g1obj = dbg.addDebuggee(g1);
var g2obj = dbg.addDebuggee(g2);
var wobj = g1obj.getOwnPropertyDescriptor("next").value;
assertEq(wobj instanceof Debugger.Object, true);
assertEq(wobj !== g2obj, true); // referents are in two different compartments
g2.x = "ok";
assertEq(wobj.getOwnPropertyDescriptor("x").value, "ok");
g1.g2min = g2.min = g2.Math.min;
g2.eval("Object.defineProperty(this, 'y', {get: min});");
assertEq(g2.y, Infinity);
var wmin = wobj.getOwnPropertyDescriptor("y").get;
assertEq(wmin !== g2obj.getOwnPropertyDescriptor("min").value, true); // as above
assertEq(wmin, g1obj.getOwnPropertyDescriptor("g2min").value);
|