tor-browser

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

restriction-media-play.https.html (2347B)


      1 <!DOCTYPE html>
      2 <!--
      3 The test aligns with the spec on which behavior is deferred. The test asserts
      4 that media resources are not loaded during prerendering, but it's possible the
      5 spec will allow loading and only disallow playback.
      6 -->
      7 <title>Access to the Play of the Media is deferred</title>
      8 <meta name="variant" content="?target_hint=_self">
      9 <meta name="variant" content="?target_hint=_blank">
     10 <meta name="timeout" content="long">
     11 <script src="/resources/testharness.js"></script>
     12 <script src="/resources/testharnessreport.js"></script>
     13 <script src="/common/utils.js"></script>
     14 <script src="../resources/utils.js"></script>
     15 <script src="resources/utils.js"></script>
     16 
     17 <body>
     18 <script>
     19 setup(() => assertSpeculationRulesIsSupported());
     20 
     21 function RunTest(type, description) {
     22  promise_test(async t => {
     23    const uid = token();
     24    const bc = new PrerenderChannel('test-channel', uid);
     25    t.add_cleanup(_ => bc.close());
     26 
     27    const gotMessage = new Promise(resolve => {
     28      bc.addEventListener('message', e => {
     29        resolve(e.data);
     30      }, {
     31        once: true
     32      });
     33    });
     34 
     35    const url = `resources/media-play.html?type=${type}&uid=${uid}&target_hint=${getTargetHint()}`;
     36    window.open(url, '_blank', 'noopener');
     37 
     38    const result = await gotMessage;
     39    const expected = [
     40      {
     41        event: 'started waiting Media.Play',
     42        prerendering: true
     43      },
     44      {
     45        event: 'prerendering change',
     46        prerendering: false
     47      },
     48      {
     49        event: 'fired loadedmetadata event after prerendering is activated',
     50        prerendering: false
     51      },
     52      {
     53        event: 'finished waiting Media.Play',
     54        prerendering: false
     55      },
     56    ];
     57 
     58    assert_equals(result.length, expected.length, `${type}`);
     59    for (let i = 0; i < result.length; i++) {
     60      assert_equals(result[i].event, expected[i].event, `event${i}`);
     61      assert_equals(result[i].prerendering, expected[i].prerendering,
     62        `prerendering${i}`);
     63    }
     64 
     65    // Send a close signal to PrerenderEventCollector on the prerendered page.
     66    new PrerenderChannel('close', uid).postMessage('');
     67  }, description);
     68 }
     69 
     70 RunTest('audio', `play of the audio media should be deferred until the prerendered page is activated`);
     71 
     72 RunTest('video', `play of the video media should be deferred until the prerendered page is activated`);
     73 </script>