<!DOCTYPE html>
<html>
<head>
    <title>media-source-abort-resets-parser</title>
    <script src="media-source-loader.js"></script>
    <script src="../video-test.js"></script>
    <script>
    var loader;
    var source;
    var sourceBuffer;

    function runTest() {
        findMediaElement();

        loader = new MediaSourceLoader('content/test-fragmented-manifest.json');
        loader.onload = mediaDataLoaded;
        loader.onerror = mediaDataLoadingFailed;
    }

    function mediaDataLoadingFailed() {
        failTest('Media data loading failed');
    }

    function mediaDataLoaded() {
        source = new MediaSource();
        waitForEvent('sourceopen', sourceOpen, false, false, source);
        waitForEventAndFail('error');
        run('video.src = URL.createObjectURL(source)');
    }

    function sourceOpen() {
        run('source.duration = loader.duration()');
        run('sourceBuffer = source.addSourceBuffer(loader.type())');
        waitForEventOn(sourceBuffer, 'update', sourceInitialized, false, true);
        waitForEventOnce('resize', resize);
        run('sourceBuffer.appendBuffer(loader.initSegment())');
    }

    function sourceInitialized() {
        waitForEventOnce('resize', resize);
        consoleWrite('Append a media segment.')
        run('sourceBuffer.appendBuffer(loader.mediaSegment(0))');
    }

    function resize() {
        // First resize can be 0x0 (Mac) or 640x480 (GTK+)
        if (video.videoWidth > 0 && video.videoHeight > 0) {
            testExpected('video.videoWidth', 640);
            testExpected('video.videoHeight', 480);
            endTest();
        }
    }
    </script>
</head>
<body onload="runTest()">
    <div>
        This tests the ability of the SourceBuffer to reset the parser after an abort(). A SourceBuffer in this state should be able to accept
        a new initialization segment or a new media segment.
    </div>
    <video controls></video>
</body>
</html>