tor-browser

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

onEnterFrame-async-resumption-03.js (982B)


      1 // A Debugger can {return:} from onEnterFrame at any resume point in an async function.
      2 // The async function's promise is resolved with the returned value.
      3 
      4 let g = newGlobal({newCompartment: true});
      5 g.eval(`async function f(x) { await x; }`);
      6 
      7 let dbg = new Debugger(g);
      8 function test(when) {
      9    let hits = 0;
     10    dbg.onEnterFrame = frame => {
     11        if (frame.type == "call" && frame.callee.name === "f") {
     12            if (hits++ == when) {
     13                return {return: "exit"};
     14            }
     15        }
     16    };
     17 
     18    let result = undefined;
     19    let finished = false;
     20    g.f("hello").then(value => { result = value; finished = true; });
     21    drainJobQueue();
     22    assertEq(finished, true);
     23    assertEq(hits, when + 1);
     24    assertEq(result, "exit");
     25 }
     26 
     27 // onEnterFrame with hits==0 is not a resume point; {return:} behaves differently there
     28 // (see onEnterFrame-async-resumption-02.js).
     29 test(1);  // force return from first resume point, immediately after the await instruction