<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>SourceBuffer handling of invalid codecs in the initialization segment</title>
    <link rel="author" title="Alicia Boya García" href="mailto:aboya@igalia.com">
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <script src="mediasource-util.js"></script>
</head>
<body>
<div id="log"></div>
<script>
    function testInvalidCodec(test, mediaElement, mediaSource, mediaType, url) {
        assert_true(MediaSource.isTypeSupported(mediaType), `Media type not supported in this browser: isTypeSupported('${mediaType}')`);

        MediaSourceUtil.loadBinaryData(test, url, (mediaData) => {
            _testInvalidCodecWithData(test, mediaElement, mediaSource, mediaType, mediaData);
        });
    }

    function _testInvalidCodecWithData(test, mediaElement, mediaSource, mediaType, mediaData) {
        const sourceBuffer = mediaSource.addSourceBuffer(mediaType);
        sourceBuffer.appendBuffer(mediaData);
        test.expectEvent(sourceBuffer, 'error', 'Append ended with error');
        test.waitForExpectedEvents(() => {
            test.done();
        })
    }

    // These test cases provide a typical media MIME type, but the actual files have been mangled to declare a different,
    // unsupported, fictitious codec (MP4 fourcc: 'zzzz', WebM codec id 'V_ZZZ'). The browser should report a parsing
    // error.

    mediasource_test((test, mediaElement, mediaSource) => {
        testInvalidCodec(test, mediaElement, mediaSource, 'video/mp4;codecs="avc1.4D4001"', 'mp4/invalid-codec.mp4');
    }, 'Test an MP4 with an invalid codec results in an error.');

    mediasource_test((test, mediaElement, mediaSource) => {
        testInvalidCodec(test, mediaElement, mediaSource, 'video/webm; codecs="vp8"', 'webm/invalid-codec.webm');
    }, 'Test a WebM with an invalid codec results in an error.');

</script>
</body>
</html>
