blob: a4d91ae9513ccdef6fa45d9b39f4c9841b5c002a [file] [log] [blame]
if (self.importScripts)
importScripts('/js-test-resources/js-test.js');
description('Test EventSource reconnect after end of event stream.');
self.jsTestIsAsync = true;
var retryTimeout;
function checkReadyState(es, desiredState) {
shouldBe('es.readyState', 'es.' + desiredState);
}
var errorCount = 0;
var es = new EventSource('/eventsource/resources/redirect.php');
checkReadyState(es, 'CONNECTING');
es.onopen = () => checkReadyState(es, 'OPEN');
// We expect two messages are received.
// first: "url=.../echo-url.php?id=, id = " because we don't set
// Last-Event-ID.
// second: "url=.../echo-url-php?id=, id = 77" because we set Last-Event-ID
// to 77, but we don't go through redirect.php this time.
// If we wrongly used the original URL for reconnect, the url would include 77
// in the second message.
es.onmessage = (e) => debug(`got a message: ${e.data}`);
function timeout() {
es.close();
testFailed('reconnect timed out');
finishJSTest();
}
es.onerror = () => {
errorCount++;
if (errorCount < 2) {
checkReadyState(es, 'CONNECTING');
retryTimeout = setTimeout(timeout, 1000);
return;
}
clearTimeout(retryTimeout);
es.close();
checkReadyState(es, 'CLOSED');
shouldBeEqualToString('es.url', 'http://127.0.0.1:8000/eventsource/resources/redirect.php');
finishJSTest();
};