tor-browser

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

Frame-offset-04.js (1144B)


      1 // frame.offset works in async fns.
      2 
      3 load(libdir + "asserts.js");
      4 
      5 var g = newGlobal({ newCompartment: true });
      6 var dbg = new Debugger(g);
      7 g.eval(`
      8 async function f() {
      9  await Promise.resolve();
     10 }
     11 `);
     12 
     13 const ranges = [];
     14 let script;
     15 let frame;
     16 dbg.onEnterFrame = function(f) {
     17  if (frame) {
     18    assertEq(f, frame);
     19    assertEq(f.script, script);
     20  } else {
     21    frame = f;
     22    script = f.script;
     23    assertEq(frame instanceof Debugger.Frame, true);
     24    assertEq(script instanceof Debugger.Script, true);
     25  }
     26 
     27  const range = [script.getOffsetMetadata(frame.offset).lineNumber, null];
     28  ranges.push(range);
     29  f.onPop = () => {
     30    range[1] = script.getOffsetMetadata(frame.offset).lineNumber;
     31  };
     32 };
     33 
     34 (async () => {
     35  const promise = g.f();
     36 
     37  assertEq(ranges.length, 1);
     38  assertEq(ranges[0][0], 2);
     39  assertEq(ranges[0][1], 3);
     40  assertEq(script.getOffsetMetadata(frame.offset).lineNumber, 3);
     41 
     42  await promise;
     43 
     44  assertEq(ranges.length, 2);
     45  assertEq(ranges[1][0], 3);
     46  assertEq(ranges[1][1], 4);
     47 
     48  // The frame has finished evaluating, so the callee is no longer accessible.
     49  assertThrowsInstanceOf(() => frame.offset, Error);
     50 })();