| <!DOCTYPE html> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script src="/speculation-rules/prerender/resources/utils.js"></script> | |
| <script src="/speculation-rules/prerender/resources/deferred-promise-utils.js"></script> | |
| <script src="webspeech.js"></script> | |
| <script> | |
| const params = new URLSearchParams(location.search); | |
| // The main test page (restriction-speech-synthesis.https.html) loads the | |
| // initiator page, then the initiator page will prerender itself with the | |
| // `prerendering` parameter. | |
| const isPrerendering = params.has('prerendering'); | |
| if (!isPrerendering) { | |
| loadInitiatorPage(); | |
| } else { | |
| const method = params.get('method'); | |
| const prerenderEventCollector = new PrerenderEventCollector(); | |
| const promise = new Promise((resolve, reject) => { | |
| switch(method) { | |
| case 'speak': { | |
| const utter = new SpeechSynthesisUtterance('1'); | |
| // https://wicg.github.io/speech-api/#tts-methods | |
| // This tests that speak() is completed after prerendering activation. | |
| utter.onend = () => { resolve(); } | |
| speechSynthesis.speak(utter); | |
| break; | |
| } | |
| case 'cancel': { | |
| const utter = new SpeechSynthesisUtterance('1'); | |
| // https://wicg.github.io/speech-api/#speechsynthesiserrorevent-attributes | |
| // A cancel method call causes 'canceled' or 'interrupted'. | |
| // This tests if one of them happens after prerendering activation. | |
| utter.onerror = (e) => { | |
| if (e.error == 'canceled' || e.error == 'interrupted') | |
| resolve(); | |
| } | |
| speechSynthesis.speak(utter); | |
| speechSynthesis.cancel(); | |
| break; | |
| } | |
| case 'pause': { | |
| const utter = new SpeechSynthesisUtterance('1'); | |
| utter.onpause = () => { resolve(); } | |
| speechSynthesis.speak(utter); | |
| speechSynthesis.pause(); | |
| // To reset the current status for the next test, it calls cancel(). | |
| speechSynthesis.cancel(); | |
| break; | |
| } | |
| case 'resume': { | |
| const utter = new SpeechSynthesisUtterance('1'); | |
| utter.onresume = () => { resolve(); } | |
| speechSynthesis.speak(utter); | |
| speechSynthesis.pause(); | |
| speechSynthesis.resume(); | |
| break; | |
| } | |
| } | |
| }); | |
| prerenderEventCollector.start(promise, `speechSynthesis.${method}`); | |
| } | |
| </script> |