tor-browser

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

Debugger-adoptFrame.js (1739B)


      1 // validate the common behavior of of Debugger.adoptFrame
      2 
      3 load(libdir + "asserts.js");
      4 
      5 const g = newGlobal({ newCompartment: true });
      6 
      7 const dbg1 = new Debugger();
      8 const gDO1 = dbg1.addDebuggee(g);
      9 
     10 let suspendedFrame;
     11 dbg1.onDebuggerStatement = function() {
     12  // Test working with an onStack frame.
     13  const frame1 = dbg1.getNewestFrame();
     14 
     15  const dbg = new Debugger();
     16  assertErrorMessage(
     17    () => dbg.adoptFrame(frame1),
     18    Error,
     19    "Debugger.Frame's global is not a debuggee"
     20  );
     21 
     22  dbg.addDebuggee(g);
     23 
     24  const frame2 = dbg.adoptFrame(frame1);
     25 
     26  assertMatchingFrame(frame1, frame2);
     27 
     28  suspendedFrame = frame1;
     29 };
     30 const generator = g.eval(`
     31 function* fn() {
     32  debugger;
     33  yield;
     34 }
     35 fn();
     36 `);
     37 generator.next();
     38 
     39 (function() {
     40  // Test working with a suspended generator frame.
     41  const dbg = new Debugger();
     42  assertErrorMessage(
     43    () => dbg.adoptFrame(suspendedFrame),
     44    Error,
     45    "Debugger.Frame's global is not a debuggee"
     46  );
     47 
     48  dbg.addDebuggee(g);
     49 
     50  const frame2 = dbg.adoptFrame(suspendedFrame);
     51 
     52  assertMatchingFrame(frame2, suspendedFrame);
     53 })();
     54 
     55 generator.next();
     56 const deadFrame = suspendedFrame;
     57 
     58 (function() {
     59  // Test working with a dead frame.
     60  const dbg = new Debugger();
     61 
     62  // This doesn't throw because the dead frame doesn't have any
     63  // debuggee-specific data associated with it anymore.
     64  dbg.adoptFrame(deadFrame);
     65 
     66  dbg.addDebuggee(g);
     67 
     68  const frame2 = dbg.adoptFrame(deadFrame);
     69 
     70  assertMatchingFrame(frame2, deadFrame);
     71 })();
     72 
     73 function assertMatchingFrame(frame1, frame2) {
     74  assertEq(frame2.onStack, frame1.onStack);
     75  assertEq(frame2.terminated, frame1.terminated);
     76 
     77  if (!frame2.terminated) {
     78    assertEq(frame2.type, frame1.type);
     79    assertEq(frame2.offset, frame1.offset);
     80  }
     81 }