<!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);
        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);
        run('sourceBuffer.appendBuffer(loader.initSegment())');
    }

    function sourceInitialized() {
        consoleWrite('Append a media segment.')
        waitForEventOn(sourceBuffer, 'update', mediaSegmentAppended, false, true);
        run('sourceBuffer.appendBuffer(loader.mediaSegment(0))');
    }

    function mediaSegmentAppended() {
        waitForEvent('seeking');
        waitForEventAndEnd('seeked');
        video.currentTime = video.currentTime;
        failTestIn(1000);
    }
    </script>
</head>
<body onload="runTest()">
    <video controls></video>
</body>
</html>