tor-browser

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

test_mediatrack_consuming_mediaresource.html (5662B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4  <title>Test track interfaces when consuming media resources</title>
      5  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      6  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
      7  <script type="text/javascript" src="manifest.js"></script>
      8 </head>
      9 <body>
     10 <pre id="test">
     11 <script class="testbody" type="text/javascript">
     12 
     13 const manager = new MediaTestManager;
     14 
     15 function startTest(test, token) {
     16  const elemType = getMajorMimeType(test.type);
     17  const element = document.createElement(elemType);
     18 
     19  let audioOnchange = 0;
     20  let audioOnaddtrack = 0;
     21  let audioOnremovetrack = 0;
     22  let videoOnchange = 0;
     23  let videoOnaddtrack = 0;
     24  let videoOnremovetrack = 0;
     25  let isPlaying = false;
     26 
     27  isnot(element.audioTracks, undefined,
     28        'HTMLMediaElement::AudioTracks() property should be available.');
     29  isnot(element.videoTracks, undefined,
     30        'HTMLMediaElement::VideoTracks() property should be available.');
     31 
     32  element.audioTracks.onaddtrack = function() {
     33    audioOnaddtrack++;
     34  }
     35 
     36  element.audioTracks.onremovetrack = function() {
     37    audioOnremovetrack++;
     38  }
     39 
     40  element.audioTracks.onchange = function() {
     41    audioOnchange++;
     42  }
     43 
     44  element.videoTracks.onaddtrack = function() {
     45    videoOnaddtrack++;
     46  }
     47 
     48  element.videoTracks.onremovetrack = function() {
     49    videoOnremovetrack++;
     50  }
     51 
     52  element.videoTracks.onchange = function() {
     53    videoOnchange++;
     54  }
     55 
     56  function checkTrackNotRemoved() {
     57    is(audioOnremovetrack, 0, 'Should have no calls of onremovetrack on audioTracks.');
     58    is(videoOnremovetrack, 0, 'Should have no calls of onremovetrack on videoTracks.');
     59    if (isPlaying) {
     60      is(element.audioTracks.length, test.hasAudio ? 1 : 0,
     61        'Expected length of audioTracks.');
     62      is(element.videoTracks.length, test.hasVideo ? 1 : 0,
     63        'Expected length of videoTracks.');
     64    }
     65  }
     66 
     67  function checkTrackRemoved() {
     68    is(element.audioTracks.length, 0, 'The length of audioTracks should be 0.');
     69    is(element.videoTracks.length, 0, 'The length of videoTracks should be 0.');
     70    if (isPlaying) {
     71      is(audioOnremovetrack, test.hasAudio ? 1 : 0,
     72        'Expected calls of onremovetrack on audioTracks.');
     73      is(videoOnremovetrack, test.hasVideo ? 1 : 0,
     74        'Expected calls of onremovetrack on videoTracks.');
     75    }
     76  }
     77 
     78  function onended() {
     79    ok(true, 'Event ended is expected to be fired on element.');
     80    checkTrackNotRemoved();
     81    element.onended = null;
     82    element.onplaying = null;
     83    element.onpause = null;
     84    element.src = "";
     85    is(element.audioTracks.length, 0, 'audioTracks have been forgotten');
     86    is(element.videoTracks.length, 0, 'videoTracks have been forgotten');
     87    is(audioOnremovetrack, 0, 'No audio removetrack events yet');
     88    is(videoOnremovetrack, 0, 'No video removetrack events yet');
     89    setTimeout(() => {
     90      checkTrackRemoved();
     91      manager.finished(element.token);
     92    }, 100);
     93  }
     94 
     95  function checkTrackAdded() {
     96    isPlaying = true;
     97    if (test.hasAudio) {
     98      is(audioOnaddtrack, 1, 'Calls of onaddtrack on audioTracks should be 1.');
     99      is(element.audioTracks.length, 1, 'The length of audioTracks should be 1.');
    100      ok(element.audioTracks[0].enabled, 'Audio track should be enabled as default.');
    101    }
    102    if (test.hasVideo) {
    103      is(videoOnaddtrack, 1, 'Calls of onaddtrack on videoTracks should be 1.');
    104      is(element.videoTracks.length, 1, 'The length of videoTracks should be 1.');
    105      is(element.videoTracks.selectedIndex, 0,
    106         'The first video track is set selected as default.');
    107    }
    108  }
    109 
    110  function setTrackEnabled(enabled) {
    111    if (test.hasAudio) {
    112      element.audioTracks[0].enabled = enabled;
    113    }
    114    if (test.hasVideo) {
    115      element.videoTracks[0].selected = enabled;
    116    }
    117  }
    118 
    119  function checkTrackChanged(calls, enabled) {
    120    if (test.hasAudio) {
    121      is(audioOnchange, calls, 'Calls of onchange on audioTracks should be '+calls);
    122      is(element.audioTracks[0].enabled, enabled,
    123         'Enabled value of the audio track should be ' +enabled);
    124    }
    125    if (test.hasVideo) {
    126      is(videoOnchange, calls, 'Calls of onchange on videoTracks should be '+calls);
    127      is(element.videoTracks[0].selected, enabled,
    128         'Selected value of the video track should be ' +enabled);
    129      var index = enabled ? 0 : -1;
    130      is(element.videoTracks.selectedIndex, index,
    131         'SelectedIndex of video tracks should be ' +index);
    132    }
    133  }
    134 
    135  function onpause() {
    136    element.onpause = null;
    137    if (element.ended) {
    138      return;
    139    }
    140    if (steps == 1) {
    141      setTrackEnabled(false);
    142      element.onplaying = onplaying;
    143      element.play();
    144      steps++;
    145    } else if (steps == 2) {
    146      setTrackEnabled(true);
    147      element.onplaying = onplaying;
    148      element.play();
    149      steps++;
    150    }
    151  }
    152 
    153  function onplaying() {
    154    element.onplaying = null;
    155    if (element.ended) {
    156      return;
    157    }
    158    if (steps == 1) {
    159      element.onpause = onpause;
    160      element.pause();
    161      checkTrackAdded();
    162    } else if (steps == 2) {
    163      element.onpause = onpause;
    164      element.pause();
    165      checkTrackChanged(1, false);
    166    } else if (steps == 3) {
    167      checkTrackChanged(2, true);
    168    }
    169  }
    170 
    171  var steps = 0;
    172 
    173  element.token = token;
    174  manager.started(token);
    175 
    176  element.src = test.name;
    177  element.test = test;
    178  element.onplaying = onplaying;
    179  element.onended = onended;
    180  element.play();
    181  steps++;
    182 }
    183 
    184 SimpleTest.waitForExplicitFinish();
    185 SpecialPowers.pushPrefEnv(
    186  {
    187    "set": [
    188      ["media.track.enabled", true]
    189    ]
    190  },
    191  function() {
    192    manager.runTests(gTrackTests, startTest);
    193  });
    194 
    195 </script>
    196 </pre>
    197 </body>
    198 </html>