<html>
<head>
    <script>
        var secretness = 0;

        function test() {
            if (window.testRunner)
                testRunner.dumpAsText();

            var localScriptLocation = "file:///tmp/LayoutTests/http/tests/security/resources/localScript.js";
            if (window.testRunner)
                localScriptLocation = testRunner.pathToLocalResource(localScriptLocation);

            var localScriptElement = document.createElement("script");
            localScriptElement.setAttribute("src", localScriptLocation);
            localScriptElement.addEventListener("load", function() {
                var tag = document.getElementById("result");
                if (secretness == 13)
                    tag.innerHTML = "Test Failed. Local script loaded and run.";
                else
                    tag.innerHTML = "Test Failed. Local script loaded, but not successfully run.";
            });

            localScriptElement.addEventListener("error", function() {
                var tag = document.getElementById("result");
                tag.innerHTML = "Test Passed: Local script not loaded.";
            });

            document.body.appendChild(localScriptElement)
        }
    </script>
</head>
<body onload="test()">
    <div id="div0">
        This test is to see if a remote file can run a local script.
        <br/>
        Currently this test cannot be run manually on Windows because we do not have
        a function like pathToLocalResource() outside of DRT.
        <br/>
    </div>
    <br>
    <div id="result">
        Test not run correctly.
    </div>
</body>
</html>
