tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

Object-getOwnPropertyDescriptor-06.js (1154B)


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