tor-browser

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

Frame-onStep-assign-generator.js (1382B)


      1 // Changing onStep while the generator is suspended/dead is allowed.
      2 
      3 load(libdir + "asserts.js");
      4 
      5 const g = newGlobal({ newCompartment: true });
      6 const dbg = new Debugger(g);
      7 
      8 let steps = new Set();
      9 dbg.onDebuggerStatement = function(frame) {
     10  // Setting 'onStep' while alive is allowed.
     11  steps.add("debugger 1");
     12  assertEq(frame.onStack, true);
     13  frame.onStep = function() {
     14    steps.add("onstep 1");
     15  };
     16 
     17  dbg.onDebuggerStatement = function() {
     18    // Clear the 'onStep' while suspended.
     19    steps.add("debugger 2");
     20    assertEq(frame.onStack, false);
     21 
     22    // Clearing 'onStep' while suspended is allowed.
     23    frame.onStep = undefined;
     24 
     25      // Setting 'onStep' while suspended is allowed.
     26    frame.onStep = function() {
     27      steps.add("onstep 2");
     28    };
     29 
     30    dbg.onDebuggerStatement = function() {
     31      steps.add("debugger 3");
     32      assertEq(frame.onStack, false);
     33 
     34      // Clearing 'onStep' while dead is allowed.
     35      frame.onStep = undefined;
     36 
     37        // Setting 'onStep' while dead is allowed.
     38      frame.onStep = function() {
     39        steps.add("onstep 3");
     40      };
     41    };
     42  };
     43 };
     44 
     45 g.eval(
     46  `
     47    function* myGen() {
     48      debugger;
     49      yield;
     50    }
     51 
     52    const g = myGen();
     53    g.next();
     54 
     55    debugger;
     56    g.next();
     57 
     58    debugger;
     59  `
     60 );
     61 
     62 assertDeepEq(Array.from(steps), [
     63  "debugger 1",
     64  "onstep 1",
     65  "debugger 2",
     66  "onstep 2",
     67  "debugger 3",
     68 ]);