tor-browser

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

test_buffered.html (3441B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <!--
      4 https://bugzilla.mozilla.org/show_bug.cgi?id=462957
      5 -->
      6 <head>
      7  <title>Test for Bug 462957</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=462957">Mozilla Bug 462957</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 // Test for Bug 462957; HTMLMediaElement.buffered.
     23 
     24 var manager = new MediaTestManager;
     25 
     26 function testBuffered(e) {
     27  var v = e.target;
     28 
     29  // The whole media should be buffered...
     30  var b = v.buffered;
     31  is(b.length, 1, v._name + ": Should be buffered in one range");
     32  is(b.start(0), 0, v._name + ": First range start should be media start");
     33  ok(Math.abs(b.end(0) - v.duration) < 0.1, v._name + ": First range end should be media end");
     34 
     35  // Ensure INDEX_SIZE_ERR is thrown when we access outside the range
     36  var caught = false;
     37  try {
     38    b.start(-1);
     39  } catch (ex) {
     40    caught = ex.name == "IndexSizeError" && ex.code == DOMException.INDEX_SIZE_ERR;
     41  }
     42  is(caught, true, v._name + ": Should throw INDEX_SIZE_ERR on under start bounds range");
     43 
     44  caught = false;
     45  try {
     46    b.end(-1);
     47  } catch (ex) {
     48    caught = ex.name == "IndexSizeError" && ex.code == DOMException.INDEX_SIZE_ERR;
     49  }
     50  is(caught, true, v._name + ": Should throw INDEX_SIZE_ERR on under end bounds range");
     51 
     52  caught = false;
     53  try {
     54    b.start(b.length);
     55  } catch (ex) {
     56    caught = ex.name == "IndexSizeError" && ex.code == DOMException.INDEX_SIZE_ERR;
     57  }
     58  is(caught, true, v._name + ": Should throw INDEX_SIZE_ERR on over start bounds range");
     59 
     60  caught = false;
     61  try {
     62    b.end(b.length);
     63  } catch (ex) {
     64    caught = ex.name == "IndexSizeError" && ex.code == DOMException.INDEX_SIZE_ERR;
     65  }
     66  is(caught, true, v._name + ": Should throw INDEX_SIZE_ERR on over end bounds range");
     67 
     68  removeNodeAndSource(v);
     69  manager.finished(v._token);
     70 }
     71 
     72 function fetch(url, fetched_callback) {
     73  var xhr = new XMLHttpRequest();
     74  xhr.open("GET", url, true);
     75  xhr.responseType = "blob";
     76 
     77  var loaded = function () {
     78    if (xhr.status == 200 || xhr.status == 206) {
     79      ok(true, `${url}: Fetch succeeded, status=${xhr.status}`);
     80      // Request fulfilled. Note sometimes we get 206... Presumably because either
     81      // httpd.js or Necko cached the result.
     82      fetched_callback(window.URL.createObjectURL(xhr.response));
     83    } else {
     84      ok(false, `${url}: Fetch failed, headers=${xhr.getAllResponseHeaders()}`);
     85    }
     86  };
     87 
     88  xhr.addEventListener("load", loaded);
     89  xhr.send();
     90 }
     91 
     92 function startTest(test, token) {
     93  // Fetch the media resource using XHR so we can be sure the entire
     94  // resource is loaded before we test buffered ranges. This ensures
     95  // we have deterministic behaviour.
     96  var onfetched = function(uri) {
     97    var v = document.createElement('video');
     98    v._token = token;
     99    v.src = uri;
    100    v._name = test.name;
    101    v._test = test;
    102    v.addEventListener("loadeddata", testBuffered, {once: true});
    103    document.body.appendChild(v);
    104  };
    105 
    106  manager.started(token);
    107  fetch(test.name, onfetched);
    108 }
    109 
    110 // Note: No need to set media test prefs, since we're using XHR to fetch
    111 // media data.
    112 manager.runTests(gSeekTests, startTest);
    113 
    114 </script>
    115 </pre>
    116 </body>
    117 </html>