Revision de277f72555a8613d1d38a9a6df270d16621ac89 authored by Chris Nardi on 29 March 2018, 23:23:28 UTC, committed by Chris Nardi on 29 March 2018, 23:23:28 UTC
Many spec links were in shortlink form (e.g. https://drafts.csswg.org/cssom/ instead of https://drafts.csswg.org/cssom-1/). However, build.py did not pick up these spec links, as it assumed that the only spec links could be in longhand form with the spec version. Update build.py to consider shortlinks when building.
1 parent 7991f4b
Raw File
mediasource-config-changes.js
// Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang).

// Extract & return the resolution string from a filename, if any.
function resolutionFromFilename(filename)
{
    resolution = filename.replace(/^.*[^0-9]([0-9]+x[0-9]+)[^0-9].*$/, "$1");
    if (resolution != filename) {
        return resolution;
    }
    return "";
}

function appendBuffer(test, sourceBuffer, data)
{
    test.expectEvent(sourceBuffer, "update");
    test.expectEvent(sourceBuffer, "updateend");
    sourceBuffer.appendBuffer(data);
}

function mediaSourceConfigChangeTest(directory, idA, idB, description)
{
    var manifestFilenameA = directory + "/test-" + idA + "-manifest.json";
    var manifestFilenameB = directory + "/test-" + idB + "-manifest.json";
    mediasource_test(function(test, mediaElement, mediaSource)
    {
        mediaElement.pause();
        mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));
        var expectResizeEvents = resolutionFromFilename(manifestFilenameA) != resolutionFromFilename(manifestFilenameB);
        var expectedResizeEventCount = 0;

        MediaSourceUtil.fetchManifestAndData(test, manifestFilenameA, function(typeA, dataA)
        {
            MediaSourceUtil.fetchManifestAndData(test, manifestFilenameB, function(typeB, dataB)
            {
                assert_equals(typeA, typeB, "Media format types match");

                var sourceBuffer = mediaSource.addSourceBuffer(typeA);

                appendBuffer(test, sourceBuffer, dataA);
                ++expectedResizeEventCount;

                test.waitForExpectedEvents(function()
                {
                    // Add the second buffer starting at 0.5 second.
                    sourceBuffer.timestampOffset = 0.5;
                    appendBuffer(test, sourceBuffer, dataB);
                    ++expectedResizeEventCount;
                });

                test.waitForExpectedEvents(function()
                {
                    // Add the first buffer starting at 1 second.
                    sourceBuffer.timestampOffset = 1;
                    appendBuffer(test, sourceBuffer, dataA);
                    ++expectedResizeEventCount;
                });

                test.waitForExpectedEvents(function()
                {
                    // Add the second buffer starting at 1.5 second.
                    sourceBuffer.timestampOffset = 1.5;
                    appendBuffer(test, sourceBuffer, dataB);
                    ++expectedResizeEventCount;
                });

                test.waitForExpectedEvents(function()
                {
                    assert_false(sourceBuffer.updating, "updating");

                    // Truncate the presentation to a duration of 2 seconds.
                    // First, explicitly remove the media beyond 2 seconds.
                    sourceBuffer.remove(2, Infinity);

                    assert_true(sourceBuffer.updating, "sourceBuffer.updating during range removal");
                    test.expectEvent(sourceBuffer, 'updatestart', 'sourceBuffer');
                    test.expectEvent(sourceBuffer, 'update', 'sourceBuffer');
                    test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
                });

                test.waitForExpectedEvents(function()
                {
                    assert_false(sourceBuffer.updating, "sourceBuffer.updating prior to duration reduction");
                    assert_greater_than(mediaSource.duration, 2, "duration");

                    // Complete the truncation of presentation to 2 second
                    // duration.
                    mediaSource.duration = 2;
                    assert_false(sourceBuffer.updating, "sourceBuffer.updating synchronously after duration reduction");

                    test.expectEvent(mediaElement, "durationchange");
                });

                test.waitForExpectedEvents(function()
                {
                    assert_false(sourceBuffer.updating, "updating");

                    mediaSource.endOfStream();

                    assert_false(sourceBuffer.updating, "updating");

                    if (expectResizeEvents) {
                        for (var i = 0; i < expectedResizeEventCount; ++i) {
                            test.expectEvent(mediaElement, "resize");
                        }
                    }
                    test.expectEvent(mediaElement, "ended");
                    mediaElement.play();
                });

                test.waitForExpectedEvents(function() {
                    test.done();
                });
            });
        });
    }, description);
};
back to top