tor-browser

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

onEnterFrame-async-resumption-02.js (984B)


      1 // A Debugger can {throw:} from onEnterFrame in an async function.
      2 // The resulting promise (if any) is rejected with the thrown error value.
      3 
      4 load(libdir + "asserts.js");
      5 
      6 let g = newGlobal({newCompartment: true});
      7 g.eval(`
      8    async function f() { await 1; }
      9    var err = new TypeError("object too hairy");
     10 `);
     11 
     12 let dbg = new Debugger;
     13 let gw = dbg.addDebuggee(g);
     14 let errw = gw.makeDebuggeeValue(g.err);
     15 
     16 // Repeat the test for each onEnterFrame event.
     17 // It fires up to two times:
     18 // - when the async function g.f is called;
     19 // - when we resume after the await to run to the end.
     20 for (let when = 0; when < 2; when++) {
     21    let hits = 0;
     22    dbg.onEnterFrame = frame => {
     23        return hits++ < when ? undefined : {throw: errw};
     24    };
     25 
     26    let result = undefined;
     27    g.f()
     28        .then(value => { result = {returned: value}; })
     29        .catch(err => { result = {threw: err}; });
     30 
     31    drainJobQueue();
     32 
     33    assertEq(hits, when + 1);
     34    assertDeepEq(result, {threw: g.err});
     35 }