tor-browser

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

switch-realms-native.js (1630B)


      1 function testCall() {
      2    var g = newGlobal({sameCompartmentAs: this});
      3    for (var i = 0; i < 20; i++) {
      4        assertEq(objectGlobal(g.Array(1, 2, 3)), g);
      5        assertEq(objectGlobal(new g.Array(1, 2, 3)), g);
      6    }
      7    for (var i = 0; i < 20; i++) {
      8        g.Error();
      9        g.assertCorrectRealm();
     10        if (i > 15)
     11            g.gc();
     12    }
     13 }
     14 testCall();
     15 
     16 function testAccessor() {
     17    var g = newGlobal({sameCompartmentAs: this});
     18    var o = {};
     19    Object.defineProperty(o, "foo", {get: g.assertCorrectRealm,
     20                                     set: g.assertCorrectRealm});
     21    for (var i = 0; i < 20; i++)
     22        o.foo;
     23    for (var i = 0; i < 20; i++)
     24        o.foo = 1;
     25    Object.defineProperty(o, "arr", {get: g.Array});
     26    for (var i = 0; i < 20; i++) {
     27        var arr = o.arr;
     28        assertEq(objectGlobal(arr), g);
     29        assertEq(arr.__proto__, g.Array.prototype);
     30    }
     31 }
     32 testAccessor();
     33 
     34 function testException1() {
     35    var g = newGlobal({sameCompartmentAs: this});
     36    for (var i = 0; i < 20; i++) {
     37        var ex;
     38        try {
     39            g.throwOutOfMemory();
     40        } catch(e) {
     41            ex = e;
     42        }
     43        assertCorrectRealm();
     44        assertEq(typeof ex, "string");
     45    }
     46 }
     47 testException1();
     48 
     49 function testDOMCalls() {
     50    var g = newGlobal({sameCompartmentAs: this});
     51    var obj = g.evaluate("new FakeDOMObject()");
     52    for (var i = 0; i < 2000; i++) {
     53        assertCorrectRealm();
     54        assertEq(obj.doFoo(1), 1);
     55        assertEq(typeof obj.x, "number");
     56        assertEq(obj.global, g);
     57        obj.global = g; // Throws if not setter's global.
     58    }
     59 }
     60 testDOMCalls();