tor-browser

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

mediasource-avtracks.html (7498B)


      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_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
      9    {
     10        var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init);
     11        sourceBuffer.appendBuffer(initSegment);
     12        test.expectEvent(sourceBuffer.audioTracks, "addtrack", "sourceBuffer.audioTracks addtrack event");
     13        test.expectEvent(sourceBuffer.videoTracks, "addtrack", "sourceBuffer.videoTracks addtrack event");
     14        test.expectEvent(mediaElement.audioTracks, "addtrack", "mediaElement.audioTracks addtrack event");
     15        test.expectEvent(mediaElement.videoTracks, "addtrack", "mediaElement.videoTracks addtrack event");
     16        test.expectEvent(mediaElement, "loadedmetadata", "loadedmetadata done.");
     17        test.expectEvent(sourceBuffer, "updateend", "initSegment append ended.");
     18        test.waitForExpectedEvents(function()
     19        {
     20            assert_equals(sourceBuffer.videoTracks.length, 1, "videoTracks.length");
     21            assert_equals(sourceBuffer.videoTracks[0].kind, "main", "videoTrack.kind");
     22            assert_equals(sourceBuffer.videoTracks[0].label, "", "videoTrack.label");
     23            assert_equals(sourceBuffer.videoTracks[0].language, "eng", "videoTrack.language");
     24            assert_equals(sourceBuffer.videoTracks[0].sourceBuffer, sourceBuffer, "videoTrack.sourceBuffer");
     25            // The first video track is selected by default.
     26            assert_true(sourceBuffer.videoTracks[0].selected, "sourceBuffer.videoTracks[0].selected");
     27 
     28            assert_equals(sourceBuffer.audioTracks.length, 1, "audioTracks.length");
     29            assert_equals(sourceBuffer.audioTracks[0].kind, "main", "audioTrack.kind");
     30            assert_equals(sourceBuffer.audioTracks[0].label, "", "audioTrack.label");
     31            assert_equals(sourceBuffer.audioTracks[0].language, "eng", "audioTrack.language");
     32            assert_equals(sourceBuffer.audioTracks[0].sourceBuffer, sourceBuffer, "audioTrack.sourceBuffer");
     33            // The first audio track is enabled by default.
     34            assert_true(sourceBuffer.audioTracks[0].enabled, "sourceBuffer.audioTracks[0].enabled");
     35 
     36            assert_not_equals(sourceBuffer.audioTracks[0].id, sourceBuffer.videoTracks[0].id, "track ids must be unique");
     37 
     38            assert_equals(mediaElement.videoTracks.length, 1, "videoTracks.length");
     39            assert_equals(mediaElement.videoTracks[0], sourceBuffer.videoTracks[0], "mediaElement.videoTrack == sourceBuffer.videoTrack");
     40 
     41            assert_equals(mediaElement.audioTracks.length, 1, "audioTracks.length");
     42            assert_equals(mediaElement.audioTracks[0], sourceBuffer.audioTracks[0], "mediaElement.audioTrack == sourceBuffer.audioTrack");
     43 
     44            test.done();
     45        });
     46    }, "Check that media tracks and their properties are populated properly");
     47 
     48    function verifyTrackRemoval(test, mediaElement, mediaSource, sourceBuffer, trackRemovalAction, successCallback) {
     49        assert_equals(sourceBuffer.audioTracks.length, 1, "audioTracks.length");
     50        assert_true(sourceBuffer.audioTracks[0].enabled, "sourceBuffer.audioTracks[0].enabled");
     51        assert_equals(sourceBuffer.videoTracks.length, 1, "videoTracks.length");
     52        assert_true(sourceBuffer.videoTracks[0].selected, "sourceBuffer.videoTracks[0].selected");
     53 
     54        var audioTrack = sourceBuffer.audioTracks[0];
     55        var videoTrack = sourceBuffer.videoTracks[0];
     56 
     57        // Verify removetrack events.
     58        test.expectEvent(sourceBuffer.audioTracks, "removetrack", "sourceBuffer.audioTracks removetrack event");
     59        test.expectEvent(sourceBuffer.videoTracks, "removetrack", "sourceBuffer.videoTracks removetrack event");
     60        test.expectEvent(mediaElement.audioTracks, "removetrack", "mediaElement.audioTracks removetrack event");
     61        test.expectEvent(mediaElement.videoTracks, "removetrack", "mediaElement.videoTracks removetrack event");
     62 
     63        // Removing enabled audio track and selected video track should fire "change" events on mediaElement track lists.
     64        test.expectEvent(mediaElement.audioTracks, "change", "mediaElement.audioTracks changed.");
     65        test.expectEvent(mediaElement.videoTracks, "change", "mediaElement.videoTracks changed.");
     66 
     67        trackRemovalAction();
     68 
     69        test.waitForExpectedEvents(function()
     70        {
     71            assert_equals(mediaSource.sourceBuffers.length, 0, "mediaSource.sourceBuffers.length");
     72            assert_equals(mediaElement.videoTracks.length, 0, "videoTracks.length");
     73            assert_equals(mediaElement.audioTracks.length, 0, "audioTracks.length");
     74            assert_equals(sourceBuffer.videoTracks.length, 0, "videoTracks.length");
     75            assert_equals(sourceBuffer.audioTracks.length, 0, "audioTracks.length");
     76            // Since audio and video tracks have been removed, their .sourceBuffer property should be null now.
     77            assert_equals(audioTrack.sourceBuffer, null, "audioTrack.sourceBuffer");
     78            assert_equals(videoTrack.sourceBuffer, null, "videoTrack.sourceBuffer");
     79            test.done();
     80        });
     81    }
     82 
     83    mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
     84    {
     85        var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init);
     86        sourceBuffer.appendBuffer(initSegment);
     87        test.expectEvent(sourceBuffer, "updateend", "initSegment append ended.");
     88        test.waitForExpectedEvents(function()
     89        {
     90            verifyTrackRemoval(test, mediaElement, mediaSource, sourceBuffer, test.step_func(function ()
     91            {
     92                mediaSource.removeSourceBuffer(sourceBuffer);
     93            }));
     94        });
     95    }, "Media tracks must be removed when the SourceBuffer is removed from the MediaSource");
     96 
     97    mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
     98    {
     99        var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init);
    100        sourceBuffer.appendBuffer(initSegment);
    101        test.expectEvent(sourceBuffer, "updateend", "initSegment append ended.");
    102        test.waitForExpectedEvents(function()
    103        {
    104            verifyTrackRemoval(test, mediaElement, mediaSource, sourceBuffer, test.step_func(function ()
    105            {
    106                mediaElement.src = "";
    107            }));
    108        });
    109    }, "Media tracks must be removed when the HTMLMediaElement.src is changed");
    110 
    111    mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
    112    {
    113        var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init);
    114        sourceBuffer.appendBuffer(initSegment);
    115        test.expectEvent(sourceBuffer, "updateend", "initSegment append ended.");
    116        test.waitForExpectedEvents(function()
    117        {
    118            verifyTrackRemoval(test, mediaElement, mediaSource, sourceBuffer, test.step_func(function ()
    119            {
    120                mediaElement.load();
    121            }));
    122        });
    123    }, "Media tracks must be removed when HTMLMediaElement.load() is called");
    124 </script>