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

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

        var localScriptLocation = "file:///tmp/LayoutTests/http/tests/security/resources/localScript.js";
        if (window.layoutTestController)
            localScriptLocation = layoutTestController.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 Passed. 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 Failed: Local script not loaded.";
        });

        document.body.appendChild(localScriptElement)
    }
</script>
</head>
<body onload="test()">
    <div id="div0">
        This test is to see if a local 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>
