tor-browser

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

onEnterFrame-async-resumption-01.js (1134B)


      1 // A Debugger can {return:} from the first onEnterFrame for an async function.
      2 // (The exact behavior is undocumented; we're testing that it doesn't crash.)
      3 
      4 ignoreUnhandledRejections();
      5 
      6 let g = newGlobal({newCompartment: true});
      7 g.hit2 = false;
      8 g.eval(`async function f(x) { await x; return "ponies"; }`);
      9 
     10 let dbg = new Debugger;
     11 let gw = dbg.addDebuggee(g);
     12 let hits = 0;
     13 let resumption = undefined;
     14 dbg.onEnterFrame = frame => {
     15    if (frame.type == "call" && frame.callee.name === "f") {
     16        frame.onPop = completion => {
     17            assertEq(completion.return.isPromise, true);
     18            hits++;
     19        };
     20 
     21        // If we force-return a generator object here, the caller will receive
     22        // a promise object resolved with that generator.
     23        resumption = frame.eval(`(function* f2() { hit2 = true; })()`);
     24        assertEq(resumption.return.class, "Generator");
     25        return resumption;
     26    }
     27 };
     28 
     29 let p = g.f(0);
     30 assertEq(hits, 1);
     31 assertEq(g.hit2, false);
     32 let pw = gw.makeDebuggeeValue(p);
     33 assertEq(pw.isPromise, true);
     34 assertEq(pw.promiseState, "fulfilled");
     35 assertEq(pw.promiseValue, resumption.return);