file_global_queue_pause.html (5094B)
1 <!DOCTYPE HTML> 2 <html> 3 <!-- 4 https://bugzilla.mozilla.org/show_bug.cgi?id=1188099 5 --> 6 <head> 7 <meta charset="utf-8"> 8 <title>Test for Bug 1188099: Calling pause() should work correctly with global queue</title> 9 <script type="application/javascript"> 10 window.SimpleTest = parent.SimpleTest; 11 window.info = parent.info; 12 window.is = parent.is; 13 window.isnot = parent.isnot; 14 window.ok = parent.ok; 15 window.todo = parent.todo; 16 </script> 17 <script type="application/javascript" src="common.js"></script> 18 </head> 19 <body> 20 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1188099">Mozilla Bug 1188099</a> 21 <iframe id="frame1"></iframe> 22 <iframe id="frame2"></iframe> 23 <div id="content" style="display: none"> 24 25 </div> 26 <pre id="test"> 27 <script type="application/javascript"> 28 Promise.all([loadFrame('frame1'), loadFrame('frame2')]).then(function ([frame1, frame2]) { 29 var win1 = frame1.contentWindow; 30 var win2 = frame2.contentWindow; 31 32 var utterance1 = new win1.SpeechSynthesisUtterance("Speak utterance 1."); 33 utterance1.lang = 'it-IT-noend'; 34 var utterance2 = new win2.SpeechSynthesisUtterance("Speak utterance 2."); 35 var utterance3 = new win1.SpeechSynthesisUtterance("Speak utterance 3."); 36 var utterance4 = new win2.SpeechSynthesisUtterance("Speak utterance 4."); 37 var eventOrder = ['start1', 'pause1', 'resume1', 'end1', 'start2', 'end2', 38 'start4', 'end4', 'start3', 'end3']; 39 40 utterance1.addEventListener('start', function(e) { 41 is(eventOrder.shift(), 'start1', 'start1'); 42 win1.speechSynthesis.pause(); 43 }); 44 utterance1.addEventListener('pause', function(e) { 45 var expectedEvent = eventOrder.shift() 46 is(expectedEvent, 'pause1', 'pause1'); 47 testSynthState(win1, { speaking: true, pending: false, paused: true}); 48 testSynthState(win2, { speaking: true, pending: true, paused: false}); 49 50 if (expectedEvent == 'pause1') { 51 win1.speechSynthesis.resume(); 52 } 53 }); 54 utterance1.addEventListener('resume', function(e) { 55 is(eventOrder.shift(), 'resume1', 'resume1'); 56 testSynthState(win1, { speaking: true, pending: false, paused: false}); 57 testSynthState(win2, { speaking: true, pending: true, paused: false}); 58 59 win2.speechSynthesis.pause(); 60 61 testSynthState(win1, { speaking: true, pending: false, paused: false}); 62 testSynthState(win2, { speaking: true, pending: true, paused: true }); 63 64 // We now make the utterance end. 65 SpecialPowers.wrap(win1.speechSynthesis).forceEnd(); 66 }); 67 utterance1.addEventListener('end', function(e) { 68 is(eventOrder.shift(), 'end1', 'end1'); 69 testSynthState(win1, { speaking: false, pending: false, paused: false}); 70 testSynthState(win2, { speaking: false, pending: true, paused: true}); 71 72 win2.speechSynthesis.resume(); 73 }); 74 75 utterance2.addEventListener('start', function(e) { 76 is(eventOrder.shift(), 'start2', 'start2'); 77 testSynthState(win1, { speaking: true, pending: false, paused: false}); 78 testSynthState(win2, { speaking: true, pending: false, paused: false}); 79 }); 80 utterance2.addEventListener('end', function(e) { 81 is(eventOrder.shift(), 'end2', 'end2'); 82 testSynthState(win1, { speaking: false, pending: false, paused: false}); 83 testSynthState(win2, { speaking: false, pending: false, paused: false}); 84 85 win1.speechSynthesis.pause(); 86 87 testSynthState(win1, { speaking: false, pending: false, paused: true}); 88 testSynthState(win2, { speaking: false, pending: false, paused: false}); 89 90 win1.speechSynthesis.speak(utterance3); 91 win2.speechSynthesis.speak(utterance4); 92 93 testSynthState(win1, { speaking: false, pending: true, paused: true}); 94 testSynthState(win2, { speaking: false, pending: true, paused: false}); 95 }); 96 97 utterance4.addEventListener('start', function(e) { 98 is(eventOrder.shift(), 'start4', 'start4'); 99 testSynthState(win1, { speaking: true, pending: true, paused: true}); 100 testSynthState(win2, { speaking: true, pending: false, paused: false}); 101 102 win1.speechSynthesis.resume(); 103 }); 104 utterance4.addEventListener('end', function(e) { 105 is(eventOrder.shift(), 'end4', 'end4'); 106 testSynthState(win1, { speaking: false, pending: true, paused: false}); 107 testSynthState(win2, { speaking: false, pending: false, paused: false}); 108 }); 109 110 utterance3.addEventListener('start', function(e) { 111 is(eventOrder.shift(), 'start3', 'start3'); 112 testSynthState(win1, { speaking: true, pending: false, paused: false}); 113 testSynthState(win2, { speaking: true, pending: false, paused: false}); 114 }); 115 116 utterance3.addEventListener('end', function(e) { 117 is(eventOrder.shift(), 'end3', 'end3'); 118 testSynthState(win1, { speaking: false, pending: false, paused: false}); 119 testSynthState(win2, { speaking: false, pending: false, paused: false}); 120 121 SimpleTest.finish(); 122 }); 123 124 win1.speechSynthesis.speak(utterance1); 125 win2.speechSynthesis.speak(utterance2); 126 }); 127 </script> 128 </pre> 129 </body> 130 </html>