<html>
<head>
<script>
    function test() {
        if (window.layoutTestController) {
            layoutTestController.dumpAsText();
            layoutTestController.waitUntilDone();
        }

        var localStyleSheetLocation = "file:///tmp/LayoutTests/http/tests/security/resources/cssStyle.css";
        if (window.layoutTestController)
            localStyleSheetLocation = layoutTestController.pathToLocalResource(localStyleSheetLocation);

        var localLinkElement = document.createElement("link");
        localLinkElement.setAttribute("type", "text/css");
        localLinkElement.setAttribute("rel", "stylesheet");
        localLinkElement.setAttribute("href", localStyleSheetLocation);

        document.documentElement.firstChild.appendChild(localLinkElement);

        // Unfortunately link tags do not have load events, so we cannot simply make a load handler.
        window.setTimeout(backgroundCheck, 1);
        window.setTimeout(function() {
            if (window.layoutTestController)
                layoutTestController.notifyDone();
        }, 5000);
    }

    function backgroundCheck() {
        var result = document.getElementById("result");
        var myBody = document.getElementById("myBody");
        var style = document.defaultView.getComputedStyle(myBody, null);
        var bgColor = style.getPropertyValue("background-color");
        if (bgColor[4] == 2) {
            result.innerHTML = "Test Failed: Local CSS remotely loaded.";
            window.setTimeout(backgroundCheck, 1);
        } else {
            result.innerHTML = "Test Passed: Local CSS not remotely loaded.";
            if (window.layoutTestController)
                layoutTestController.notifyDone();
        }
    }
</script>
</head>
<body id="myBody" onload="test()">
    <div id="other">
        This test is to see if a remote file can include a local CSS style.
        <br/>
        Currently this test cannot be run manually on Windows because we do not have
        a function like pathToLocalResource() outside of DRT.
        <br/>
        <br/>
        If the background is yellow then the CSS was loaded.
    </div>
    </br>
    <div id="result">
        Test not run correctly.
    </div>
</body>
</html>
