tor-browser

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

test_cueless_webm_seek-1.html (3904B)


      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-1
     31 function testWebM1(e) {
     32  var v = e.target;
     33  v.removeEventListener('loadeddata', testWebM1);
     34 
     35  var startPassed = false;
     36  var endPassed = false;
     37  var seekFlagStart = false;
     38  var seekFlagEnd = false;
     39  var readonly = true;
     40  var completed = false;
     41 
     42  ok(v.buffered.length >= 1, "Should have a buffered range");
     43  var halfBuffered = v.buffered.end(0) / 2;
     44 
     45  function start() {
     46    is(v.seekable.start(0), v.buffered.start(0), "Seekable start should be buffered start");
     47    is(v.seekable.end(0), v.buffered.end(0), "Seekable end should be buffered end");
     48    ok(!completed, "Should not be completed yet");
     49    ok(!v.seeking, "seeking should default to false");
     50    try {
     51      v.seeking = true;
     52      readonly = v.seeking === false;
     53    }
     54    catch(ex) {
     55      readonly = "threw exception: " + ex;
     56    }
     57    is(readonly, true, "seeking should be readonly");
     58 
     59    v.currentTime = halfBuffered;
     60    seekFlagStart = v.seeking;
     61  }
     62 
     63  function seekStarted() {
     64    ok(!completed, "should not be completed yet");
     65    startPassed = true;
     66  }
     67 
     68  function seekEnded() {
     69    ok(!completed, "should not be completed yet");
     70    ok(Math.abs(v.currentTime - halfBuffered) < 0.1,
     71       "Video currentTime should be around " + halfBuffered + ": " + v.currentTime + " (seeked)");
     72    endPassed = true;
     73    seekFlagEnd = v.seeking;
     74    v.play();
     75  }
     76 
     77  function playbackEnded() {
     78    ok(!completed, "should not be completed yet");
     79 
     80    completed = true;
     81    ok(startPassed, "seeking event");
     82    ok(endPassed, "seeked event");
     83    ok(seekFlagStart, "seeking flag on start should be true");
     84    ok(!seekFlagEnd, "seeking flag on end should be false");
     85    removeNodeAndSource(v);
     86    manager.finished(v._token);
     87  }
     88 
     89  once(v, "ended", playbackEnded);
     90  once(v, "seeking", seekStarted);
     91  once(v, "seeked", seekEnded);
     92 
     93  start();
     94 }
     95 
     96 // Fetch the media resource using XHR so we can be sure the entire
     97 // resource is loaded before we test buffered ranges. This ensures
     98 // we have deterministic behaviour.
     99 function fetch(url, fetched_callback) {
    100  var xhr = new XMLHttpRequest();
    101  xhr.open("GET", url, true);
    102  xhr.responseType = "blob";
    103 
    104  var loaded = function () {
    105    if (xhr.status == 200 || xhr.status == 206) {
    106      // Request fulfilled. Note sometimes we get 206... Presumably because either
    107      // httpd.js or Necko cached the result.
    108      fetched_callback(window.URL.createObjectURL(xhr.response));
    109    } else {
    110      ok(false, "Fetch failed headers=" + xhr.getAllResponseHeaders());
    111    }
    112  };
    113 
    114  xhr.addEventListener("load", loaded);
    115  xhr.send();
    116 }
    117 
    118 function startTest(test, token) {
    119  var onfetched = function(uri) {
    120    var v = document.createElement('video');
    121    v._token = token;
    122    v.src = uri;
    123    v.addEventListener("loadeddata", testWebM1);
    124    document.body.appendChild(v);
    125  }
    126  manager.started(token);
    127  fetch(test.name, onfetched);
    128 }
    129 
    130 SimpleTest.waitForExplicitFinish();
    131 manager.runTests(gCuelessWebMTests, startTest);
    132 
    133 </script>
    134 </pre>
    135 </body>
    136 </html>