tor-browser

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

test_eme_waitingforkey.html (2476B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4  <title>Test Encrypted Media Extensions</title>
      5  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      6  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
      7  <script type="text/javascript" src="manifest.js"></script>
      8  <script type="text/javascript" src="https://example.com:443/tests/dom/media/test/eme.js"></script>
      9 </head>
     10 <body>
     11 <pre id="test">
     12 <script class="testbody" type="text/javascript">
     13 /* import-globals-from eme.js */
     14 var manager = new MediaTestManager;
     15 
     16 function startTest(test, token)
     17 {
     18  manager.started(token);
     19 
     20  let v = document.createElement("video");
     21  document.body.appendChild(v);
     22 
     23  var gotWaitingForKey = 0;
     24  var gotOnwaitingforkey = 0;
     25 
     26  let waitForKey = new EMEPromise;
     27  v.addEventListener("waitingforkey", function() {
     28    gotWaitingForKey += 1;
     29    waitForKey.resolve();
     30  });
     31 
     32  v.onwaitingforkey = function() {
     33    gotOnwaitingforkey += 1;
     34  };
     35 
     36  v.addEventListener("loadedmetadata", function() {
     37    ok(SpecialPowers.do_lookupGetter(v, "isEncrypted").apply(v),
     38       TimeStamp(token) + " isEncrypted should be true");
     39    is(v.isEncrypted, undefined, "isEncrypted should not be accessible from content");
     40  });
     41 
     42  let finish = new EMEPromise;
     43  v.addEventListener("ended", function() {
     44    ok(true, TimeStamp(token) + " got ended event");
     45    // We expect only one waitingForKey as we delay until all sessions are ready.
     46    // I.e. one waitingForKey should be fired, after which, we process all sessions,
     47    // so it should not be possible to be blocked by a key after that point.
     48    ok(gotWaitingForKey == 1,  "Expected number 1 wait, got: " + gotWaitingForKey);
     49    ok(gotOnwaitingforkey == gotWaitingForKey, "Should have as many event listener calls as event handler calls, got: " + gotOnwaitingforkey);
     50 
     51    finish.resolve();
     52  });
     53 
     54  Promise.all([
     55    LoadInitData(v, test, token),
     56    CreateAndSetMediaKeys(v, test, token),
     57    LoadTest(test, v, token),
     58    waitForKey.promise])
     59  .then(values => {
     60    let initData = values[0];
     61    return ProcessInitData(v, test, token, initData);
     62  })
     63  .then(sessions => {
     64    Log(token, "Updated all sessions, loading complete -> Play");
     65    v.play();
     66    finish.promise.then(() => CloseSessions(v, sessions));
     67    return finish.promise;
     68  })
     69  .catch(reason => ok(false, reason))
     70  .then(() => manager.finished(token));
     71 }
     72 
     73 SimpleTest.waitForExplicitFinish();
     74 manager.runTests(gEMETests, startTest);
     75 </script>
     76 </pre>
     77 </body>
     78 </html>