tor-browser

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

Frame-asyncPromise-01.js (1688B)


      1 // Testing the promise property on async function frames.
      2 
      3 load(libdir + 'asserts.js');
      4 
      5 var g = newGlobal({ newCompartment: true });
      6 var dbg = Debugger(g);
      7 g.eval(`
      8 async function f() {
      9  debugger;
     10  await Promise.resolve();
     11  debugger;
     12 }
     13 `);
     14 
     15 let frame;
     16 const promises = [];
     17 dbg.onEnterFrame = function(f) {
     18  frame = f;
     19  promises.push(["start", frame.asyncPromise]);
     20 
     21  dbg.onEnterFrame = function(f) {
     22    assertEq(f, frame);
     23    promises.push(["resume", frame.asyncPromise]);
     24  };
     25 
     26  frame.onPop = function() {
     27    promises.push(["suspend", frame.asyncPromise]);
     28 
     29    frame.onPop = function() {
     30      promises.push(["finish", frame.asyncPromise]);
     31    };
     32  };
     33 
     34  dbg.onDebuggerStatement = function(f) {
     35    assertEq(f, frame);
     36    promises.push(["dbg", frame.asyncPromise]);
     37  };
     38 };
     39 
     40 (async () => {
     41  const resultPromise = g.f();
     42 
     43  const framePromise = frame.asyncPromise;
     44  assertEq(framePromise instanceof Debugger.Object, true);
     45  assertEq(framePromise.unsafeDereference(), resultPromise);
     46 
     47  assertEq(promises.length, 3);
     48  assertEq(promises[0][0], "start");
     49  assertEq(promises[0][1], null);
     50 
     51  assertEq(promises[1][0], "dbg");
     52  assertEq(promises[1][1], framePromise);
     53 
     54  assertEq(promises[2][0], "suspend");
     55  assertEq(promises[2][1], framePromise);
     56 
     57  await resultPromise;
     58 
     59  // Frame has terminated, so accessing the property throws.
     60  assertThrowsInstanceOf(() => frame.asyncPromise, Error);
     61 
     62  assertEq(promises.length, 6);
     63 
     64  assertEq(promises[3][0], "resume");
     65  assertEq(promises[3][1], framePromise);
     66 
     67  assertEq(promises[4][0], "dbg");
     68  assertEq(promises[4][1], framePromise);
     69 
     70  assertEq(promises[5][0], "finish");
     71  assertEq(promises[5][1], framePromise);
     72 })();