diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /dom/base/test/browser_event_source_reconnect_after_disconnect.js | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/base/test/browser_event_source_reconnect_after_disconnect.js')
-rw-r--r-- | dom/base/test/browser_event_source_reconnect_after_disconnect.js | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/dom/base/test/browser_event_source_reconnect_after_disconnect.js b/dom/base/test/browser_event_source_reconnect_after_disconnect.js new file mode 100644 index 0000000000..e92f5920a2 --- /dev/null +++ b/dom/base/test/browser_event_source_reconnect_after_disconnect.js @@ -0,0 +1,108 @@ +var { HttpServer } = ChromeUtils.importESModule( + "resource://testing-common/httpd.sys.mjs" +); + +function eventSourcePageHandler(metadata, response) { + response.setStatusLine(metadata.httpVersion, 200, "OK"); + response.setHeader("Content-Type", "text/html", false); + + // An HTML page that sets up the EventSource + let pageContent = ` + <html> + <body> + <script> + let es = new EventSource("/eventstream"); + es.onopen = function() { + console.log("send es_open"); + window.dispatchEvent(new CustomEvent('es-open')); + }; + es.onmessage = function(err) { + console.log("send es_message"); + window.dispatchEvent(new CustomEvent('es-message')); + }; + es.onerror = function(err) { + console.log("send es_error"); + window.dispatchEvent(new CustomEvent('es-error')); + + }; + </script> + </body> + </html>`; + + response.write(pageContent); +} + +const server = new HttpServer(); +server.start(-1); +const SERVER_PORT = server.identity.primaryPort; + +registerCleanupFunction(async () => { + await server.stop(); +}); + +function eventStreamHandler(metadata, response) { + response.setStatusLine(metadata.httpVersion, 200, "OK"); + response.setHeader("Content-Type", "text/event-stream", false); + response.write("retry: 500\n"); +} + +server.registerPathHandler("/page", eventSourcePageHandler); +server.registerPathHandler("/eventstream", eventStreamHandler); + +add_task(async function testReconnectAfterDisconnect() { + info("Connect to the server to retrieve the EventSource doc"); + + let tab = await BrowserTestUtils.openNewForegroundTab( + gBrowser, + `http://localhost:${server.identity.primaryPort}/page` + ); + + let browser = tab.linkedBrowser; + + // Define a function to handle events in the content process + async function contentEventHandler() { + return new Promise(resolve => { + content.addEventListener( + "es-open", + function () { + resolve("es-open"); + }, + { once: true } + ); + + content.addEventListener( + "es-error", + function () { + resolve("es-error"); + }, + { once: true } + ); + }); + } + + // Execute the event handler in the content process + let eventType = await SpecialPowers.spawn(browser, [], contentEventHandler); + Assert.equal(eventType, "es-open", "EventSource opened successfully"); + + // Stop the server; we expect an error + await server.stop(); + + eventType = await SpecialPowers.spawn(browser, [], contentEventHandler); + Assert.equal( + eventType, + "es-error", + "EventSource encountered an error after server close" + ); + + // Restart the server; the eventSource should automatically reconnect + server.start(SERVER_PORT); + + eventType = await SpecialPowers.spawn(browser, [], contentEventHandler); + Assert.equal( + eventType, + "es-open", + "EventSource opened successfully after server restart" + ); + + BrowserTestUtils.removeTab(tab); +}); |