tor-browser

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

Frame-onPop-error-error.js (1811B)


      1 // |jit-test| error: TestComplete
      2 // onPop can request a termination when stopped for a termination
      3 
      4 var g = newGlobal({newCompartment: true});
      5 var dbg = new Debugger(g);
      6 
      7 // We use Debugger.Frame.prototype.eval and ignore the outer 'eval' frame so we 
      8 // can catch the termination.
      9 
     10 function test(type, provocation) {
     11    // Help people figure out which 'test' call failed.
     12    print("type:        " + JSON.stringify(type));
     13    print("provocation: " + JSON.stringify(provocation));
     14 
     15    var log;
     16    dbg.onEnterFrame = function handleFirstFrame(f) {
     17        log += 'f';
     18        dbg.onDebuggerStatement = function handleDebugger(f) {
     19            log += 'd';
     20            return null;
     21        };
     22 
     23        dbg.onEnterFrame = function handleSecondFrame(f) {
     24            log += 'e';
     25            assertEq(f.type, 'eval');
     26 
     27            dbg.onEnterFrame = function handleThirdFrame(f) {
     28                log += '(';
     29                assertEq(f.type, type);
     30 
     31                dbg.onEnterFrame = function handleExtraFrames(f) {
     32                    // This should never be called.
     33                    assertEq(false, true);
     34                };
     35 
     36                f.onPop = function handlePop(c) {
     37                    log += ')';
     38                    assertEq(c, null);
     39                    return null;
     40                };
     41            };
     42        };
     43 
     44        assertEq(f.eval(provocation), null);
     45    };
     46 
     47    log = '';
     48    // This causes handleFirstFrame to be called.
     49    assertEq(typeof g.eval('eval'), 'function');
     50    assertEq(log, 'fe(d)');
     51 
     52    print();
     53 }
     54 
     55 g.eval('function f() { debugger; return \'termination fail\'; }');
     56 test('call', 'f();');
     57 test('call', 'new f;');
     58 test('eval', 'eval(\'debugger; \\\'termination fail\\\';\');');
     59 test('global', 'evaluate(\'debugger; \\\'termination fail\\\';\');');
     60 throw 'TestComplete';