<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.py?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.py?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.py?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>
