<body>
<p>Test that appcache works with authentication. Should say SUCCESS:</p>
<script>
if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}

// Store authentication credentials.
var req = new XMLHttpRequest;
req.open("GET", "resources/auth/setup.php", false, "login", "pasword");
req.send();

var ifr = document.createElement("iframe");
ifr.setAttribute("src", "resources/auth/iframe.php");
document.body.appendChild(ifr);

function success()
{
    var text = document.createElement("p");
    text.appendChild(document.createTextNode("SUCCESS"));
    document.body.replaceChild(text, document.getElementsByTagName("iframe")[0]);

    if (window.testRunner)
        testRunner.notifyDone();
}
</script>
</body>
