tor-browser

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

test_getUserMedia_addtrack_removetrack_events.html (2712B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4  <script type="application/javascript" src="mediaStreamPlayback.js"></script>
      5 </head>
      6 <body>
      7 <pre id="test">
      8 <script type="application/javascript">
      9 "use strict";
     10 
     11 createHTML({
     12  title: "MediaStream's 'addtrack' and 'removetrack' events shouldn't fire on manual operations",
     13  bug: "1208328"
     14 });
     15 
     16 var spinEventLoop = () => new Promise(r => setTimeout(r, 0));
     17 
     18 var stream;
     19 var clone;
     20 var newStream;
     21 var tracks = [];
     22 
     23 var addTrack = track => {
     24  info("Adding track " + track.id);
     25  stream.addTrack(track);
     26 };
     27 var removeTrack = track => {
     28  info("Removing track " + track.id);
     29  stream.removeTrack(track);
     30 };
     31 var stopTrack = track => {
     32  if (track.readyState == "live") {
     33    info("Stopping track " + track.id);
     34  }
     35  track.stop();
     36 };
     37 
     38 runTest(() => getUserMedia({audio: true, video: true})
     39  .then(s => {
     40    stream = s;
     41    clone = s.clone();
     42    stream.addEventListener("addtrack", function onAddtrack(event) {
     43      ok(false, "addtrack fired unexpectedly for track " + event.track.id);
     44    });
     45    stream.addEventListener("removetrack", function onRemovetrack(event) {
     46      ok(false, "removetrack fired unexpectedly for track " + event.track.id);
     47    });
     48 
     49    return getUserMedia({audio: true, video: true});
     50  })
     51  .then(s => {
     52    newStream = s;
     53    info("Stopping an original track");
     54    stopTrack(stream.getTracks()[0]);
     55 
     56    return spinEventLoop();
     57  })
     58  .then(() => {
     59    info("Removing original tracks");
     60    stream.getTracks().forEach(t => {
     61      stream.removeTrack(t);
     62      return tracks.push(t);
     63    });
     64 
     65    return spinEventLoop();
     66  })
     67  .then(() => {
     68    info("Adding other gUM tracks");
     69    newStream.getTracks().forEach(t => addTrack(t))
     70 
     71    return spinEventLoop();
     72  })
     73  .then(() => {
     74    info("Adding cloned tracks");
     75    let clone = stream.clone();
     76    clone.getTracks().forEach(t => addTrack(t));
     77 
     78    return spinEventLoop();
     79  })
     80  .then(() => {
     81    info("Removing a clone");
     82    removeTrack(clone.getTracks()[0]);
     83 
     84    return spinEventLoop();
     85  })
     86  .then(() => {
     87    info("Stopping clones");
     88    clone.getTracks().forEach(t => stopTrack(t));
     89 
     90    return spinEventLoop();
     91  })
     92  .then(() => {
     93    info("Stopping originals");
     94    stream.getTracks().forEach(t => stopTrack(t));
     95    tracks.forEach(t => stopTrack(t));
     96 
     97    return spinEventLoop();
     98  })
     99  .then(() => {
    100    info("Removing remaining tracks");
    101    stream.getTracks().forEach(t => removeTrack(t));
    102 
    103    return spinEventLoop();
    104  })
    105  .then(() => {
    106      // Test MediaStreamTrackEvent required args here.
    107      mustThrowWith("MediaStreamTrackEvent without required args",
    108                    "TypeError", () => new MediaStreamTrackEvent("addtrack", {}));
    109  }));
    110 </script>
    111 </pre>
    112 </body>
    113 </html>