tor-browser

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

restriction-speech-synthesis.https.html (2127B)


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