tor-browser

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

onEnterFrame-async-resumption-06.js (1317B)


      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.eval(`async function f(x) { await x; return "ponies"; }`);
      8 g.eval(`async function f2(x) { await x; return "moar ponies"; }`);
      9 
     10 let dbg = new Debugger;
     11 let gw = dbg.addDebuggee(g);
     12 let hits = 0;
     13 let resumption = undefined;
     14 let savedAsyncGen = undefined;
     15 dbg.onEnterFrame = frame => {
     16    if (frame.type == "call" && frame.callee.name === "f2") {
     17        frame.onPop = completion => {
     18            if (savedAsyncGen === undefined) {
     19                savedAsyncGen = completion.return;
     20            }
     21        };
     22    }
     23    if (frame.type == "call" && frame.callee.name === "f") {
     24        frame.onPop = completion => {
     25            hits++;
     26        };
     27 
     28        return {return: savedAsyncGen};
     29    }
     30 };
     31 
     32 let p2 = g.f2(0);
     33 let p = g.f(0);
     34 
     35 assertEq(hits, 1);
     36 
     37 drainJobQueue();
     38 
     39 assertEq(hits, 1);
     40 
     41 let pw2 = gw.makeDebuggeeValue(p2);
     42 assertEq(pw2.isPromise, true);
     43 assertEq(pw2.promiseState, "fulfilled");
     44 assertEq(pw2.promiseValue, "moar ponies");
     45 
     46 let pw = gw.makeDebuggeeValue(p);
     47 assertEq(pw.isPromise, true);
     48 assertEq(pw.promiseState, "fulfilled");
     49 assertEq(pw.promiseValue, "moar ponies");