<body>
<p><a href="rdar://problem/6447115">rdar://problem/6447115</a> Test that a method for logging out of a site that is used by SAP works.</p>
<p>If an authentication dialog appears, please cancel it.</p>
<span>Login: </span><span id="login">FAIL - Test not run</span><br>
<span>Async request sent before logout: </span><span id="async">FAIL - Test not run</span><br>
<span>Logout: </span><span id="logout">FAIL - Test not run</span>
<script>
if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}

function login()
{
    var xhr = new XMLHttpRequest;
    // "?login" is only here for ease of debugging; it doesn't affect behavior.
    xhr.open("GET", "resources/logout/resource.php?login", false, "user", "pass");
    xhr.send("");
}

function logout()
{
    var xhr = new XMLHttpRequest;
    // logout.html doesn't even exist - we don't need to send this request to server.
    xhr.open("GET", "resources/logout/subdirectory/logout.html", true, "logout", "logout");
    xhr.send("");
    xhr.abort();
}

function isAuthenticated()
{
    var xhr = new XMLHttpRequest;
    // "?isAuthenticated" is only here for ease of debugging; it doesn't affect behavior.
    xhr.open("GET", "resources/logout/resource.php?isAuthenticated", false);
    xhr.send("");
    return xhr.status == 200;
}

login();
document.getElementById("login").innerHTML = isAuthenticated() ? "PASS" : "FAIL";

// Test that a request sent before logout actually has credentials.
var r = new XMLHttpRequest;
r.open("GET", "resources/logout/resource.php?isAuthenticated", true);
r.onload = function() {
    document.getElementById("async").innerHTML = r.status == 200 ? "PASS" : "FAIL";

    if (window.testRunner)
        testRunner.notifyDone();
}
r.send("");

logout();
document.getElementById("logout").innerHTML = isAuthenticated() ? "FAIL" : "PASS";
</script>
</body>
