tor-browser

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

test_bug879717.html (3559B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4  <title>Test for bug 879717, check that a video element can be drawn into a canvas at various states of playback</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 var manager = new MediaTestManager;
     14 
     15 var canvas = document.createElement('canvas');
     16 document.body.appendChild(canvas);
     17 
     18 var checkDrawImage = function(eventName, videoElement) {
     19  var exception = null;
     20  var exceptionName = "nothing";
     21  try {
     22    var ctx = canvas.getContext('2d');
     23    ctx.drawImage(videoElement, 0, 0, canvas.width, canvas.height);
     24  } catch (e) {
     25    exception = e;
     26    exceptionName = e.name;
     27  }
     28  ok(exception === null,
     29    "drawImage shouldn't throw an exception on " + eventName +
     30    " of " + videoElement.testName + ", got " + exceptionName);
     31 };
     32 
     33 var checkDrawImageEventHandler = function(ev) {
     34  checkDrawImage(ev.type, ev.target);
     35 };
     36 var startTest = function(media, token) {
     37  manager.started(token);
     38 
     39  // File playback
     40  var v1 = document.createElement("video");
     41  v1.autoplay = true;
     42 
     43  // Captured file playback
     44  var v2 = document.createElement("video");
     45 
     46  // Stream playback
     47  var v3 = document.createElement("video");
     48  v3.autoplay = true;
     49 
     50  v1.gotLoadeddata = false;
     51  v2.gotLoadeddata = false;
     52  v3.gotLoadeddata = false;
     53 
     54  v1.testName = "v1 (" + media.name + ")";
     55  v2.testName = "v2 (Captured " + media.name + ")";
     56  v3.testName = "v3 (Stream of " + media.name + ")";
     57 
     58  checkDrawImage("beforeplay", v1);
     59  checkDrawImage("beforeplay", v2);
     60  checkDrawImage("beforeplay", v3);
     61 
     62  v1.onloadedmetadata = checkDrawImageEventHandler;
     63  v2.onloadedmetadata = checkDrawImageEventHandler;
     64  v3.onloadedmetadata = checkDrawImageEventHandler;
     65 
     66  v1.onplay = checkDrawImageEventHandler;
     67  v2.onplay = checkDrawImageEventHandler;
     68  v3.onplay = checkDrawImageEventHandler;
     69 
     70  function onplaying(ev) {
     71    if (!ev.target.gotPlaying) {
     72      ev.target.gotPlaying = true;
     73      checkDrawImageEventHandler(ev);
     74    }
     75  }
     76  v1.onplaying = onplaying;
     77  v2.onplaying = onplaying;
     78  v3.onplaying = onplaying;
     79 
     80  var onloadeddata = function(ev) {
     81    ev.target.gotLoadeddata = true;
     82    checkDrawImageEventHandler(ev);
     83  };
     84 
     85  v1.onloadeddata = onloadeddata;
     86  v2.onloadeddata = onloadeddata;
     87  v3.onloadeddata = onloadeddata;
     88 
     89  var checkFinished = function() {
     90    if (!v1.testFinished || !v2.testFinished || !v3.testFinished) {
     91      return;
     92    }
     93 
     94    ok(v1.gotLoadeddata, v1.testName + " should have gotten the 'loadeddata' event callback");
     95    ok(v2.gotLoadeddata, v2.testName + " should have gotten the 'loadeddata' event callback");
     96    ok(v3.gotLoadeddata, v3.testName + " should have gotten the 'loadeddata' event callback");
     97 
     98    manager.finished(token);
     99  };
    100 
    101  var onended = function(ev) {
    102    checkDrawImageEventHandler(ev);
    103    removeNodeAndSource(ev.target);
    104    ev.target.testFinished = true;
    105    checkFinished();
    106  };
    107 
    108  v1.onended = onended;
    109  v2.onended = onended;
    110  v3.onended = onended;
    111 
    112  document.body.appendChild(v1);
    113  document.body.appendChild(v2);
    114  document.body.appendChild(v3);
    115 
    116  v1.src = media.name;
    117  v2.src = media.name;
    118  v2.preload = 'metadata';
    119 
    120  v2.addEventListener('loadedmetadata', function () {
    121    v3.srcObject = v2.mozCaptureStreamUntilEnded();
    122    v2.play();
    123  });
    124 }
    125 
    126 manager.runTests(getPlayableVideos(gSmallTests), startTest);
    127 </script>
    128 </pre>
    129 </body>
    130 </html>