<!DOCTYPE html>
<html>
<head>
    <title>mp4-partial-load</title>
    <script src="../../resources/js-test-pre.js"></script>
    <script>
    jsTestIsAsync = true;
    if (window.internals && window.testRunner) {
        testRunner.waitUntilDone();
        testRunner.dumpAsText();
        internals.clearMemoryCache();
    }

    function loadAndStall()
    {
        return "http://127.0.0.1:8000/resources/load-and-stall.py";
    }

    function mp4Image()
    {
        return "?name=../../../media/content/test.mp4&mimeType=video%2Fmp4";
    }

    function endTest()
    {
        if (window.timeoutID)
            clearTimeout(timeoutID);
        finishJSTest();
    }

    function errorReceived()
    {
        testFailed('Received an erorr loading image');
        endTest();
    }

    function timedOut()
    {
        testFailed('Took too long');
        endTest();
    }

    function runTest()
    {
        description('This tests that an mp4 loaded in a video tag does not cause a hang when the load stalls.')

        setTimeout(() => {
            img = document.querySelector('img');
            img.addEventListener("error", errorReceived);
            img.src = loadAndStall() + mp4Image() + "&stallAt=15799&stallFor=60";
            window.timeoutID = setTimeout(timedOut, 5000);
            shouldBecomeEqual('img.naturalWidth', '320', endTest);
        });
    }

    window.addEventListener('load', runTest, {once: true});
    </script>
    <script src="../../resources/js-test-post.js"></script>
</head>
<body>
    <img>
</body>
</html>
