tor-browser

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

test_media_selection.html (4688B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4  <title>Media test: media selection</title>
      5  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      6  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
      7  <script type="application/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 function maketest(attach_media, name, type, check_metadata) {
     16  return function (token) {
     17    var e = document.createElement('video');
     18    e.preload = "metadata";
     19    token = name + "-" + token;
     20    manager.started(token);
     21    var errorRun = false;
     22    if (check_metadata) {
     23      e.addEventListener('loadedmetadata', function () {
     24          ok(e.readyState >= HTMLMediaElement.HAVE_METADATA,
     25             'test ' +  token + ' readyState ' + e.readyState + ' expected >= ' + HTMLMediaElement.HAVE_METADATA);
     26          is(e.currentSrc.substring(e.currentSrc.length - name.length), name, 'test ' + token);
     27          // The load can go idle due to cache size limits
     28          ok(e.networkState >= HTMLMediaElement.NETWORK_IDLE,
     29              'test ' + token + ' networkState = ' + e.networkState + ' expected >= ' + HTMLMediaElement.NETWORK_IDLE);
     30          check_metadata(e);
     31          removeNodeAndSource(e);
     32          manager.finished(token);
     33        });
     34    } else {
     35      e.addEventListener('error', function onerror() {
     36        is(errorRun, false, "error handler should run once only!");
     37        errorRun = true;
     38        is(e.readyState, HTMLMediaElement.HAVE_NOTHING,
     39           'test ' + token + ' readyState should be HAVE_NOTHING when load fails.');
     40        e.removeEventListener('error', onerror, true);
     41        removeNodeAndSource(e);
     42        manager.finished(token);
     43      }, true);
     44    }
     45    attach_media(e, name, type);
     46  }
     47 }
     48 
     49 function set_src(element, name) {
     50  element.src = name;
     51  document.body.appendChild(element);
     52 }
     53 
     54 function add_source(element, name, type) {
     55  do_add_source(element, name, type);
     56  document.body.appendChild(element);
     57 }
     58 
     59 function do_add_source(element, name, type) {
     60  var source = document.createElement('source');
     61  if (type) {
     62    source.type = type;
     63  }
     64  source.src = name;
     65  element.appendChild(source);
     66 }
     67 
     68 function add_sources_last(element, name, type) {
     69  do_add_source(element, name, 'unsupported/type');
     70  do_add_source(element, name, type);
     71  document.body.appendChild(element);
     72 }
     73 
     74 function add_sources_first(element, name, type) {
     75  do_add_source(element, name, type);
     76  do_add_source(element, name, 'unsupported/type');
     77  document.body.appendChild(element);
     78 }
     79 
     80 function late_add_sources_last(element, name, type) {
     81  document.body.appendChild(element);
     82  do_add_source(element, name, 'unsupported/type');
     83  do_add_source(element, name, type);
     84 }
     85 
     86 function late_add_sources_first(element, name, type) {
     87  document.body.appendChild(element);
     88  do_add_source(element, name, type);
     89  do_add_source(element, name, 'unsupported/type');
     90 }
     91 
     92 var nextTest  = 0;
     93 var subtests = [
     94  maketest(add_source, 'unknown.raw', 'bogus/type', null)
     95 ];
     96 
     97 var tmpVid = document.createElement('video');
     98 
     99 for (var i = 0; i < gSmallTests.length; ++i) {
    100  var test = gSmallTests[i];
    101  var src = test.name;
    102  var type = test.type;
    103 
    104  if (!tmpVid.canPlayType(type))
    105    continue;
    106 
    107  // The following nested function hack is to ensure that 'test' is correctly
    108  // captured in the closure and we don't end up getting the value 'test'
    109  // had in the last iteration of the loop. I blame Brendan.
    110  var check = function(t) { return function (e) {
    111    checkMetadata(t.name, e, t);
    112  }}(test);
    113 
    114  var otherType = type.match(/^video\//) ? "audio/x-wav" : "video/webm";
    115  subtests.push(maketest(set_src, src, null, check),
    116                maketest(add_source, src, null, check),
    117                maketest(add_source, src, type, check),
    118                maketest(add_sources_last, src, null, check),
    119                maketest(add_sources_first, src, type, check),
    120 
    121                // type hint matches a decoder, actual type matches different decoder
    122                maketest(add_source, src, otherType, check),
    123                maketest(add_source, 'unknown.raw', type, null),
    124 
    125                // should not start loading, type excludes it from media candiate list
    126                maketest(add_source, src, 'bogus/type', null),
    127 
    128                // element doesn't notice source children attached later, needs bug 462455 fixed
    129                maketest(late_add_sources_last, src, type, check),
    130                maketest(late_add_sources_first, src, type, check));
    131 }
    132 
    133 function startTest(t, token) {
    134  t(token);
    135 }
    136 
    137 manager.runTests(subtests, startTest);
    138 
    139 </script>
    140 </pre>
    141 </body>
    142 </html>