tor-browser

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

mediasource-removesourcebuffer.html (8069B)


      1 <!DOCTYPE html>
      2 <!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
      3 <html>
      4    <head>
      5        <title>MediaSource.removeSourceBuffer() test cases.</title>
      6        <script src="/resources/testharness.js"></script>
      7        <script src="/resources/testharnessreport.js"></script>
      8        <script src="mediasource-util.js"></script>
      9    </head>
     10    <body>
     11        <div id="log"></div>
     12        <script>
     13          mediasource_test(function(test, mediaElement, mediaSource)
     14          {
     15              var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
     16              assert_class_string(sourceBuffer, "SourceBuffer", "New SourceBuffer returned");
     17 
     18              mediaSource.removeSourceBuffer(sourceBuffer);
     19 
     20              var sourceBuffer2 = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
     21              assert_class_string(sourceBuffer2, "SourceBuffer", "New SourceBuffer returned");
     22              assert_not_equals(sourceBuffer, sourceBuffer2, "SourceBuffers are different instances.");
     23              assert_equals(mediaSource.sourceBuffers.length, 1, "sourceBuffers.length == 1");
     24 
     25              test.done();
     26          }, "Test addSourceBuffer(), removeSourceBuffer(), addSourceBuffer() sequence.");
     27 
     28          mediasource_test(function(test, mediaElement, mediaSource)
     29          {
     30              assert_throws_js(TypeError,
     31                          function() { mediaSource.removeSourceBuffer(null); },
     32                          "removeSourceBuffer() threw an exception when passed null.");
     33              test.done();
     34          }, "Test removeSourceBuffer() with null");
     35 
     36          mediasource_test(function(test, mediaElement, mediaSource)
     37          {
     38              var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
     39              assert_class_string(sourceBuffer, "SourceBuffer", "New SourceBuffer returned");
     40 
     41              mediaSource.removeSourceBuffer(sourceBuffer);
     42 
     43              assert_throws_dom("NotFoundError",
     44                  function() { mediaSource.removeSourceBuffer(sourceBuffer); },
     45                  "removeSourceBuffer() threw an exception for a SourceBuffer that was already removed.");
     46 
     47              test.done();
     48          }, "Test calling removeSourceBuffer() twice with the same object.");
     49 
     50          mediasource_test(function(test, mediaElement1, mediaSource1)
     51          {
     52              var sourceBuffer1 = mediaSource1.addSourceBuffer(MediaSourceUtil.AUDIO_ONLY_TYPE);
     53              assert_class_string(sourceBuffer1, "SourceBuffer", "New SourceBuffer returned");
     54 
     55              var mediaElement2 = document.createElement("video");
     56              document.body.appendChild(mediaElement2);
     57              test.add_cleanup(function() { document.body.removeChild(mediaElement2); });
     58 
     59              var mediaSource2 = new MediaSource();
     60              var mediaSource2URL = URL.createObjectURL(mediaSource2);
     61              mediaElement2.src = mediaSource2URL;
     62              test.expectEvent(mediaSource2, "sourceopen", "Second MediaSource opened");
     63              test.waitForExpectedEvents(function()
     64              {
     65                  URL.revokeObjectURL(mediaSource2URL);
     66 
     67                  var sourceBuffer2 = mediaSource2.addSourceBuffer(MediaSourceUtil.VIDEO_ONLY_TYPE);
     68                  assert_class_string(sourceBuffer2, "SourceBuffer", "Second new SourceBuffer returned");
     69                  assert_not_equals(mediaSource1, mediaSource2, "MediaSources are different instances");
     70                  assert_not_equals(sourceBuffer1, sourceBuffer2, "SourceBuffers are different instances");
     71                  assert_equals(mediaSource1.sourceBuffers[0], sourceBuffer1);
     72                  assert_equals(mediaSource2.sourceBuffers[0], sourceBuffer2);
     73                  assert_throws_dom("NotFoundError",
     74                      function() { mediaSource1.removeSourceBuffer(sourceBuffer2); },
     75                      "MediaSource1.removeSourceBuffer() threw an exception for SourceBuffer2");
     76                  assert_throws_dom("NotFoundError",
     77                      function() { mediaSource2.removeSourceBuffer(sourceBuffer1); },
     78                      "MediaSource2.removeSourceBuffer() threw an exception for SourceBuffer1");
     79                  mediaSource1.removeSourceBuffer(sourceBuffer1);
     80                  mediaSource2.removeSourceBuffer(sourceBuffer2);
     81                  test.done();
     82              });
     83          }, "Test calling removeSourceBuffer() for a sourceBuffer belonging to a different mediaSource instance.");
     84 
     85          mediasource_test(function(test, mediaElement, mediaSource)
     86          {
     87              var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
     88              assert_class_string(sourceBuffer, "SourceBuffer", "New SourceBuffer returned");
     89 
     90              mediaSource.endOfStream();
     91              assert_equals(mediaSource.readyState, "ended", "MediaSource in ended state");
     92              mediaSource.removeSourceBuffer(sourceBuffer);
     93 
     94              assert_equals(mediaSource.sourceBuffers.length, 0, "MediaSource.sourceBuffers is empty");
     95              assert_equals(mediaSource.activeSourceBuffers.length, 0, "MediaSource.activesourceBuffers is empty");
     96 
     97              test.done();
     98          }, "Test calling removeSourceBuffer() in ended state.");
     99 
    100          mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
    101          {
    102              var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init);
    103 
    104              test.expectEvent(sourceBuffer, "updateend", "initSegment append ended.");
    105              test.expectEvent(mediaElement, "loadedmetadata", "loadedmetadata done.");
    106              sourceBuffer.appendBuffer(initSegment);
    107 
    108              test.waitForExpectedEvents(function()
    109              {
    110                  assert_equals(mediaSource.sourceBuffers.length, 1, "MediaSource.sourceBuffers is not empty");
    111                  assert_equals(mediaSource.activeSourceBuffers.length, 1, "MediaSource.activesourceBuffers is not empty");
    112                  assert_equals(mediaElement.readyState, mediaElement.HAVE_METADATA);
    113                  assert_equals(mediaSource.duration, segmentInfo.duration);
    114                  test.expectEvent(mediaSource.activeSourceBuffers, "removesourcebuffer", "SourceBuffer removed from activeSourceBuffers.");
    115                  test.expectEvent(mediaSource.sourceBuffers, "removesourcebuffer", "SourceBuffer removed.");
    116                  mediaSource.removeSourceBuffer(sourceBuffer);
    117              });
    118 
    119              test.waitForExpectedEvents(function()
    120              {
    121                  assert_equals(mediaSource.sourceBuffers.length, 0, "MediaSource.sourceBuffers is empty");
    122                  assert_equals(mediaSource.activeSourceBuffers.length, 0, "MediaSource.activesourceBuffers is empty");
    123                  test.done();
    124              });
    125          }, "Test removesourcebuffer event on activeSourceBuffers.");
    126 
    127          mediasource_test(function(test, mediaElement, mediaSource)
    128          {
    129              mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));
    130              var mimetype = MediaSourceUtil.AUDIO_VIDEO_TYPE;
    131              var sourceBuffer = mediaSource.addSourceBuffer(mimetype);
    132              sourceBuffer.appendBuffer(new Uint8Array(0));
    133              assert_true(sourceBuffer.updating, "Updating flag set when a buffer is appended.");
    134              test.expectEvent(sourceBuffer, 'abort');
    135              test.expectEvent(sourceBuffer, 'updateend');
    136 
    137              mediaSource.removeSourceBuffer(sourceBuffer);
    138              assert_false(sourceBuffer.updating, "Updating flag reset after abort.");
    139              test.waitForExpectedEvents(function()
    140              {
    141                  test.done();
    142              });
    143          }, "Test abort event when removeSourceBuffer() called while SourceBuffer is updating");
    144        </script>
    145    </body>
    146 </html>