tor-browser

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

Frame-onPop-assign-function.js (929B)


      1 // Changing onPop while the function is 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 'onPop' while alive is allowed.
     11  steps.add("debugger 1");
     12  assertEq(frame.onStack, true);
     13  frame.onPop = function() {
     14    steps.add("onpop 1");
     15  };
     16 
     17  dbg.onDebuggerStatement = function() {
     18    // Clear the 'onPop' while dead.
     19    steps.add("debugger 2");
     20    assertEq(frame.onStack, false);
     21 
     22    // Clearing 'onPop' while dead is allowed.
     23    frame.onPop = undefined;
     24 
     25      // Setting 'onPop' while dead is allowed.
     26    frame.onPop = function() {
     27      steps.add("onpop 2");
     28    };
     29  };
     30 };
     31 
     32 g.eval(
     33  `
     34    function myGen() {
     35      debugger;
     36    }
     37 
     38    const g = myGen();
     39 
     40    debugger;
     41  `
     42 );
     43 
     44 assertDeepEq(Array.from(steps), [
     45  "debugger 1",
     46  "onpop 1",
     47  "debugger 2",
     48 ]);