blob: 68c429ed43f6438bca2d9a8fe60624d781b803e8 [file] [log] [blame]
<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.php?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>