tor-browser

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

test_cueless_webm_seek-3.html (3305B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <!--
      4 https://bugzilla.mozilla.org/show_bug.cgi?id=657791
      5 -->
      6 <head>
      7  <title>Test for Bug 657791</title>
      8  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      9  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
     10  <script type="text/javascript" src="manifest.js"></script>
     11 </head>
     12 <body>
     13 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=657791">Mozilla Bug 657791</a>
     14 
     15 <p id="display"></p>
     16 <div id="content" style="display: none">
     17 
     18 </div>
     19 <pre id="test">
     20 <script type="application/javascript">
     21 
     22 // Subset of seek tests for cueless WebMs. When random seeking (rather than just
     23 // in buffered ranges) is implemented for WebM, these tests can be removed and
     24 // the cueless WebM(s) references can be moved to the general test_seek test
     25 // array.
     26 // Test array is defined in manifest.js
     27 
     28 var manager = new MediaTestManager;
     29 
     30 // Exercise functionality as in test_seek-3
     31 function testWebM3(e) {
     32  var v = e.target;
     33  v.removeEventListener('loadeddata', testWebM3);
     34 
     35  var completed = false;
     36  var gotTimeupdate = false;
     37 
     38  ok(v.buffered.length >= 1, "Should have a buffered range");
     39  var halfBuffered = v.buffered.end(0) / 2;
     40 
     41  function start() {
     42    if (completed)
     43      return;
     44 
     45    is(v.seekable.start(0), v.buffered.start(0), "Seekable start should be buffered start");
     46    is(v.seekable.end(0), v.buffered.end(0), "Seekable end should be buffered end");
     47    v.currentTime=halfBuffered;
     48  }
     49 
     50  function timeupdate() {
     51    gotTimeupdate = true;
     52    v.removeEventListener("timeupdate", timeupdate);
     53  }
     54 
     55  function seekStarted() {
     56    if (completed)
     57      return;
     58 
     59    v.addEventListener("timeupdate", timeupdate);
     60  }
     61 
     62  function seekEnded() {
     63    if (completed)
     64      return;
     65 
     66    var t = v.currentTime;
     67    ok(Math.abs(t - halfBuffered) <= 0.1, "Video currentTime should be around " + halfBuffered + ": " + t);
     68    ok(gotTimeupdate, "Should have got timeupdate between seeking and seekended");
     69    completed = true;
     70    removeNodeAndSource(v);
     71    manager.finished(v._token);
     72  }
     73 
     74  v.addEventListener("seeking", seekStarted);
     75  v.addEventListener("seeked", seekEnded);
     76 
     77  start()
     78 }
     79 
     80 // Fetch the media resource using XHR so we can be sure the entire
     81 // resource is loaded before we test buffered ranges. This ensures
     82 // we have deterministic behaviour.
     83 function fetch(url, fetched_callback) {
     84  var xhr = new XMLHttpRequest();
     85  xhr.open("GET", url, true);
     86  xhr.responseType = "blob";
     87 
     88  var loaded = function () {
     89    if (xhr.status == 200 || xhr.status == 206) {
     90      // Request fulfilled. Note sometimes we get 206... Presumably because either
     91      // httpd.js or Necko cached the result.
     92      fetched_callback(window.URL.createObjectURL(xhr.response));
     93    } else {
     94      ok(false, "Fetch failed headers=" + xhr.getAllResponseHeaders());
     95    }
     96  };
     97 
     98  xhr.addEventListener("load", loaded);
     99  xhr.send();
    100 }
    101 
    102 function startTest(test, token) {
    103  var onfetched = function(uri) {
    104    var v = document.createElement('video');
    105    v._token = token;
    106    v.src = uri;
    107    v.addEventListener("loadeddata", testWebM3);
    108    document.body.appendChild(v);
    109  }
    110  manager.started(token);
    111  fetch(test.name, onfetched);
    112 }
    113 
    114 SimpleTest.waitForExplicitFinish();
    115 manager.runTests(gCuelessWebMTests, startTest);
    116 
    117 </script>
    118 </pre>
    119 </body>
    120 </html>