tor-browser

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

switch-realms-scripted.js (3249B)


      1 function testBasic() {
      2    var g = newGlobal({sameCompartmentAs: this});
      3    g.evaluate("function foo() { return scriptedCallerGlobal(); }");
      4    for (var i = 0; i < 20; i++)
      5        assertEq(g.foo(), g);
      6 
      7    g.evaluate("function Obj() {}");
      8    for (var i = 0; i < 30; i++)
      9        assertEq(objectGlobal(new g.Obj()), g);
     10 }
     11 testBasic();
     12 
     13 function testFunCall() {
     14    var g = newGlobal({sameCompartmentAs: this});
     15    g.evaluate("function foo() { return scriptedCallerGlobal(); }");
     16    for (var i = 0; i < 20; i++)
     17        assertEq(g.foo.call(1, 2), g);
     18 }
     19 testFunCall();
     20 
     21 function testFunApplyArgs() {
     22    var g = newGlobal({sameCompartmentAs: this});
     23    g.evaluate("function foo() { return scriptedCallerGlobal(); }");
     24    for (var i = 0; i < 2000; i++)
     25        assertEq(g.foo.apply(null, arguments), g);
     26 }
     27 testFunApplyArgs(1, 2);
     28 
     29 function testFunApplyArray() {
     30    var g = newGlobal({sameCompartmentAs: this});
     31    g.evaluate("function foo() { return scriptedCallerGlobal(); }");
     32    var arr = [1, 2];
     33    for (var i = 0; i < 2000; i++)
     34        assertEq(g.foo.apply(null, arr), g);
     35 }
     36 testFunApplyArray();
     37 
     38 function testAccessor() {
     39    var g = newGlobal({sameCompartmentAs: this});
     40    g.evaluate("function foo() { return scriptedCallerGlobal(); }");
     41    var o = {};
     42    Object.defineProperty(o, "foo", {get: g.foo, set: g.foo});
     43    for (var i = 0; i < 20; i++) {
     44        assertEq(o.foo, g);
     45        o.foo = 1;
     46    }
     47 }
     48 testAccessor();
     49 
     50 function testGenerator() {
     51    var thisGlobalGen = function*() {};
     52    var thisGlobalGenObj = thisGlobalGen();
     53 
     54    var g = newGlobal({sameCompartmentAs: this});
     55    g.evaluate("function* gen() { for (var i = 0; i < 2; i++) yield new Array(1, 2); }");
     56    for (var i = 0; i < 20; i++) {
     57        var o = g.gen();
     58        for (var j = 0; j < 2; j++) {
     59            var res = thisGlobalGenObj.next.call(o);
     60            assertEq(objectGlobal(res), g);
     61            assertEq(Array.isArray(res.value), true);
     62            assertEq(objectGlobal(res.value), g);
     63        }
     64    }
     65 }
     66 testGenerator();
     67 
     68 function testException1() {
     69    var g = newGlobal({sameCompartmentAs: this});
     70    g.evaluate("function throwEx() { throw this; }");
     71    for (var i = 0; i < 20; i++) {
     72        var ex;
     73        try {
     74            g.throwEx();
     75        } catch(e) {
     76            ex = e;
     77        }
     78        assertCorrectRealm();
     79        assertEq(ex, g);
     80    }
     81 }
     82 testException1();
     83 
     84 function testException2() {
     85    var g = newGlobal({sameCompartmentAs: this});
     86    g.evaluate("function f1(x) { if (x > 100) throw x; }");
     87    g.f2 = function(x) { return g.f1(x); }
     88    g.f3 = function(x) { return g.f2(x); }
     89    g.evaluate("function f4(x) { try { return f3(x); } finally { assertCorrectRealm(); } }");
     90    var ex;
     91    try {
     92        for (var i = 0; i < 110; i++) {
     93            g.f4(i);
     94        }
     95    } catch (e) {
     96        ex = e;
     97    }
     98    assertCorrectRealm();
     99    assertEq(ex, 101);
    100 }
    101 testException2();
    102 testException2();
    103 
    104 function testException3(x) {
    105    var g = newGlobal({sameCompartmentAs: this});
    106    g.f1 = function(x) { if (x === max + 2) throw 1; }
    107    g.evaluate("function f2(x) { try { return f1(x); } catch(e) {} }");
    108    var max = 15;
    109    for (var i = 0; i < max; i++)
    110        g.f2(x * max + i);
    111 }
    112 testException3(0);
    113 testException3(1);