tor-browser

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

restriction-media-microphone.https.html (1942B)


      1 <!DOCTYPE html>
      2 <title>Access to the Microphone of the user media device is deferred</title>
      3 <meta name="variant" content="?target_hint=_self">
      4 <meta name="variant" content="?target_hint=_blank">
      5 <meta name="timeout" content="long">
      6 <script src="/resources/testharness.js"></script>
      7 <script src="/resources/testharnessreport.js"></script>
      8 <script src="/common/utils.js"></script>
      9 <script src="../resources/utils.js"></script>
     10 <script src="resources/utils.js"></script>
     11 
     12 <body>
     13 <script>
     14 setup(() => assertSpeculationRulesIsSupported());
     15 
     16 promise_test(async t => {
     17  const uid = token();
     18  const bc = new PrerenderChannel('test-channel', uid);
     19  t.add_cleanup(_ => bc.close());
     20 
     21  const gotMessage = new Promise(resolve => {
     22    bc.addEventListener('message', e => {
     23      resolve(e.data);
     24    }, {
     25      once: true
     26    });
     27  });
     28  const url = `resources/media-devices-access.https.html?&audio=true&uid=${uid}&target_hint=${getTargetHint()}`;
     29  window.open(url, '_blank', 'noopener');
     30  // According to spec, gUM will resolve only if the window has focus.
     31  window.focus();
     32 
     33  const result = await gotMessage;
     34  const expected = [
     35    {
     36      event: 'started waiting navigator.mediaDevices.getUserMedia',
     37      prerendering: true
     38    },
     39    {
     40      event: 'prerendering change',
     41      prerendering: false
     42    },
     43    {
     44      event: 'finished waiting navigator.mediaDevices.getUserMedia',
     45      prerendering: false
     46    },
     47  ];
     48  assert_equals(result.length, expected.length);
     49  for (let i = 0; i < result.length; i++) {
     50    assert_equals(result[i].event, expected[i].event, `event${i}`);
     51    assert_equals(result[i].prerendering, expected[i].prerendering,
     52      `prerendering${i}`);
     53  }
     54 
     55  // Send a close signal to PrerenderEventCollector on the prerendered page.
     56  new PrerenderChannel('close', uid).postMessage('');
     57 }, `the access to the Microphone of the user media should be deferred until the
     58    prerendered page is activated`);
     59 </script>