tor-browser

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

mediasource-seekable.html (3780B)


      1 <!DOCTYPE html>
      2 <!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
      3 <meta charset="utf-8">
      4 <script src="/resources/testharness.js"></script>
      5 <script src="/resources/testharnessreport.js"></script>
      6 <script src="mediasource-util.js"></script>
      7 <script>
      8    mediasource_test(function(test, mediaElement, mediaSource)
      9    {
     10        mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));
     11        mediaElement.addEventListener('ended', test.step_func_done(function () {}));
     12 
     13        var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_ONLY_TYPE);
     14 
     15        assertSeekableEquals(mediaElement, '{ }', 'mediaElement.seekable');
     16        test.done();
     17    }, 'Get seekable time ranges when the sourcebuffer is empty.');
     18 
     19    mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
     20    {
     21        var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init);
     22        test.expectEvent(mediaElement, 'durationchange', 'mediaElement got duration');
     23        sourceBuffer.appendBuffer(initSegment);
     24        test.waitForExpectedEvents(function()
     25        {
     26            assert_equals(mediaElement.duration, segmentInfo.duration);
     27            assertSeekableEquals(mediaElement, '{ [0.000, ' + segmentInfo.duration.toFixed(3) + ') }', 'mediaElement.seekable');
     28            test.done();
     29        });
     30    }, 'Get seekable time ranges after init segment received.');
     31 
     32    mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
     33    {
     34        var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init);
     35        test.expectEvent(mediaElement, 'durationchange', 'mediaElement got duration after initsegment');
     36        test.expectEvent(sourceBuffer, 'update');
     37        test.expectEvent(sourceBuffer, 'updateend');
     38        sourceBuffer.appendBuffer(initSegment);
     39        test.waitForExpectedEvents(function()
     40        {
     41            assert_false(sourceBuffer.updating, "updating attribute is false");
     42            test.expectEvent(mediaElement, 'durationchange', 'mediaElement got infinity duration');
     43            mediaSource.duration = Infinity;
     44            test.waitForExpectedEvents(function()
     45            {
     46                assertSeekableEquals(mediaElement, '{ }', 'mediaElement.seekable');
     47 
     48                // Append a segment from the middle of the stream to make sure that seekable does not use buffered.start(0) or duration as first or last value
     49                var midSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.media[2]);
     50                test.expectEvent(sourceBuffer, 'update');
     51                test.expectEvent(sourceBuffer, 'updateend');
     52                sourceBuffer.appendBuffer(midSegment);
     53                test.waitForExpectedEvents(function()
     54                {
     55                    assert_equals(mediaElement.seekable.length, 1, 'mediaElement.seekable.length');
     56                    assert_equals(mediaElement.buffered.length, 1, 'mediaElement.buffered.length');
     57                    assert_not_equals(mediaElement.seekable.start(0), mediaElement.buffered.start(0));
     58                    assert_equals(mediaElement.seekable.start(0), 0);
     59                    assert_not_equals(mediaElement.seekable.end(0), mediaElement.duration);
     60                    assert_not_equals(mediaElement.seekable.end(0), mediaElement.buffered.start(0));
     61                    assert_equals(mediaElement.seekable.end(0), mediaElement.buffered.end(0));
     62                    test.done();
     63                });
     64            });
     65        });
     66    }, 'Get seekable time ranges on an infinite stream.');
     67 </script>