tor-browser

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

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>