<!DOCTYPE html>
<title>Access to the speech synthesis is deferred</title>
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/utils.js"></script>
<script src="../resources/utils.js"></script>
<script src="resources/utils.js"></script>

<body>
<script>
setup(() => assertSpeculationRulesIsSupported());

function RunTest(method, description) {
  promise_test(async t => {
    const uid = token();
    const bc = new PrerenderChannel('test-channel', uid);
    t.add_cleanup(_ => bc.close());

    const gotMessage = new Promise(resolve => {
      bc.addEventListener('message', e => {
        resolve(e.data);
      }, {
        once: true
      });
    });
    const url = `resources/speech-synthesis.https.html?method=${method}&uid=${uid}`;
    window.open(url, '_blank', 'noopener');

    const result = await gotMessage;
    const expected = [
      {
        event: `started waiting speechSynthesis.${method}`,
        prerendering: true
      },
      {
        event: `prerendering change`,
        prerendering: false
      },
      {
        event: `finished waiting speechSynthesis.${method}`,
        prerendering: false
      },
    ];
    assert_equals(result.length, expected.length);
    for (let i = 0; i < result.length; i++) {
      assert_equals(result[i].event, expected[i].event, `event${i}`);
      assert_equals(result[i].prerendering, expected[i].prerendering,
        `prerendering${i}`);
    }

    // Send a close signal to PrerenderEventCollector on the prerendered page.
    new PrerenderChannel('close', uid).postMessage('');
  }, description);
}

RunTest('speak', `speechSynthesis.speak(utterance) should be deferred until the prerendered page is activated`);
RunTest('cancel', `speechSynthesis.cancel() should be deferred until the prerendered page is activated`);
RunTest('pause', `speechSynthesis.pause() should be deferred until the prerendered page is activated`);
RunTest('resume', `speechSynthesis.resume() should be deferred until the prerendered page is activated`);
</script>
