<html>
<body>
<p>Test that EventSource cross-origin requests with credentials fail until the correct CORS headers are sent. Should print a series of PASS messages followed by DONE.</p>
<div id="result"></div>
<script>
function log(msg) {
    document.getElementById("result").innerHTML += msg + "<br>";
}

if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}

function end() {
    if (window.testRunner)
        testRunner.notifyDone();
}

var count = 1;
var base_url = location.href.substr(0, location.href.lastIndexOf('/')).replace("127.0.0.1", "localhost");

function create_es() {
    try {
        var es = new EventSource(base_url + "/resources/es-cors-credentials.py?count=" + count, {"withCredentials": true});
    }
    catch (ex) {
        log("FAIL: EventSource constructor threw exception: " + ex);
        end();
        return;
    }

    if (!es.withCredentials) {
        log("FAIL: withCredentials is false");
        es.close();
        end();
    }

    es.onerror = function () {
        if (es.readyState == es.CLOSED) {
            if (count != 4 && count != 5) {
                log("PASS: got error event and readyState is CLOSED");
                count++;
                setTimeout(create_es);
            }
            else {
                log("FAIL: got unexpected error event");
                end();
            }
        }
        else if (count != 5)  {
            log("FAIL: got error event but readyState is not CLOSED");
            es.close();
            end();
        }
    };

    es.onmessage = function (evt) {
        if (evt.origin != location.origin && !evt.origin.indexOf("http://localhost")) {
            if (count == 4 && evt.data == "DATA1" && evt.lastEventId == "77") {
                log("PASS: got cross-origin message event with data \"DATA1\" and lastEventId \"77\"");
                count++;
                return;
            }
            if (count == 5 && evt.data == "DATA2") {
                log("PASS: got cross-origin message event with data \"DATA2\"");
                log("DONE");
            }
            else
                log("FAIL: got unexpected cross-origin message event");
        }
        else
            log("FAIL: got message event from same or unexpected origin");

        es.close();
        end();
    };
}
create_es();
</script>
</body>
</html>
