tor-browser

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

Frame-onPop-04.js (946B)


      1 // When a termination is propagated out of multiple frames, their onPop
      2 // handlers are called in the correct order, and no onExceptionUnwind
      3 // handlers are called.
      4 var g = newGlobal({newCompartment: true});
      5 g.eval("function f() { terminate(); }");
      6 g.eval("function g() { f(); }");
      7 g.eval("function h() { g(); }");
      8 g.eval("function i() { h(); }");
      9 
     10 var dbg = new Debugger(g);
     11 var log;
     12 var count = 0;
     13 function makePopHandler(label, resumption) {
     14    return function handlePop(completion) { 
     15        log += label;
     16        assertEq(completion, null);
     17        return resumption;
     18    };
     19 }
     20 dbg.onEnterFrame = function handleEnter(f) {
     21    log += "(" + f.callee.name;
     22    f.onPop = makePopHandler(f.callee.name + ")",
     23                             count++ == 0 ? { return: 'king' } : undefined);
     24 };
     25 dbg.onExceptionUnwind = function handleExceptionUnwind(f, x) {
     26    log += 'u';  
     27 };
     28 log = '';
     29 assertEq(g.i(), 'king');
     30 assertEq(log, "(i(h(g(ff)g)h)i)");