| // META: script=/resources/WebIDLParser.js |
| // META: script=/resources/idlharness.js |
| // META: timeout=long |
| |
| 'use strict'; |
| |
| // https://w3c.github.io/speech-api/#dom-speechsynthesis-getvoices can |
| // return an empty list and a voiceschanged event is fired if the list of |
| // voices is determined asynchronously. |
| function getVoices() { |
| return new Promise(resolve => { |
| const voices = speechSynthesis.getVoices(); |
| if (voices.length) { |
| resolve(voices); |
| } else { |
| // wait for voiceschanged event |
| speechSynthesis.addEventListener('voiceschanged', () => { |
| resolve(speechSynthesis.getVoices()); |
| }, { once: true }); |
| } |
| }); |
| } |
| |
| idl_test( |
| ['speech-api'], |
| ['dom', 'html'], |
| (idl_array, t) => { |
| idl_array.add_objects({ |
| SpeechGrammar: ['new SpeechGrammar()'], |
| SpeechGrammarList: ['new SpeechGrammarList()'], |
| SpeechRecognition: ['new SpeechRecognition()'], |
| // TODO: SpeechRecognitionAlternative |
| // TODO: SpeechRecognitionErrorEvent |
| // TODO: SpeechRecognitionEvent |
| // TODO: SpeechRecognitionResult |
| // TODO: SpeechRecognitionResultList |
| SpeechSynthesis: ['speechSynthesis'], |
| // TODO: SpeechSynthesisErrorEvent |
| // TODO: SpeechSynthesisEvent |
| SpeechSynthesisUtterance: ['new SpeechSynthesisUtterance()'], |
| SpeechSynthesisVoice: ['voice'], |
| Window: ['self'], |
| }); |
| |
| const awaitVoice = getVoices().then(voices => self.voice = voices[0]); |
| const timeout = new Promise((_, reject) => { |
| t.step_timeout(() => reject('Timed out waiting for voice'), 3000); |
| }); |
| return Promise.race([awaitVoice, timeout]); |
| } |
| ); |