<head>
    <script>
        var failed = false;

        if (window.testRunner) {
            testRunner.dumpAsText();
            testRunner.waitUntilDone();
        }

        function iframeNotLoaded()
        {
            if (failed)
                return;

            if (window.testRunner) {
                document.getElementById("result").innerText = "Binary data not loaded as text. Maybe PASS.";
                testRunner.notifyDone();
            } else
                document.getElementById("result").innerText = "If Safari downloaded binaryData.sitx, then it passed the test.";
        }

        function bodyLoaded()
        {
            if (!failed)
                timeout = setTimeout(iframeNotLoaded, 500);
        }

        function iframeLoaded()
        {
            document.getElementById("result").innerText = "FAIL";
            failed = true;
            if (window.testRunner)
                testRunner.notifyDone();
        }
    </script>
</head>
<body onload="bodyLoaded()">
    <p>
        Test for <i><a href="https://bugs.webkit.org/show_bug.cgi?id=17360">https://bugs.webkit.org/show_bug.cgi?id=17360</a>
        REGRESSION: mp4 file downloaded from server is downloaded as html</i>.
    </p>
    <p id="result">
        Test running...
    </p>
    <iframe id="iframe" name="iframe" src="resources/binaryData.sitx" onload="iframeLoaded()"></iframe>
</body>
