From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../browser_ext_port_disconnect_on_crash.js | 113 +++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 browser/components/extensions/test/browser/browser_ext_port_disconnect_on_crash.js (limited to 'browser/components/extensions/test/browser/browser_ext_port_disconnect_on_crash.js') diff --git a/browser/components/extensions/test/browser/browser_ext_port_disconnect_on_crash.js b/browser/components/extensions/test/browser/browser_ext_port_disconnect_on_crash.js new file mode 100644 index 0000000000..82ece1da3f --- /dev/null +++ b/browser/components/extensions/test/browser/browser_ext_port_disconnect_on_crash.js @@ -0,0 +1,113 @@ +/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set sts=2 sw=2 et tw=80: */ +"use strict"; + +add_task(async function connect_from_tab_to_bg_and_crash_tab() { + let extension = ExtensionTestUtils.loadExtension({ + manifest: { + content_scripts: [ + { + js: ["contentscript.js"], + matches: ["http://example.com/?crashme"], + }, + ], + }, + + background() { + browser.runtime.onConnect.addListener(port => { + browser.test.assertEq("tab_to_bg", port.name, "expected port"); + browser.test.assertEq(port.sender.frameId, 0, "correct frameId"); + + port.onDisconnect.addListener(() => { + browser.test.assertEq( + null, + port.error, + "port should be disconnected without errors" + ); + browser.test.sendMessage("port_disconnected"); + }); + browser.test.sendMessage("bg_runtime_onConnect"); + }); + }, + + files: { + "contentscript.js": function () { + let port = browser.runtime.connect({ name: "tab_to_bg" }); + port.onDisconnect.addListener(() => { + browser.test.fail("Unexpected onDisconnect event in content script"); + }); + }, + }, + }); + + await extension.startup(); + + let tab = await BrowserTestUtils.openNewForegroundTab( + gBrowser, + "http://example.com/?crashme" + ); + await extension.awaitMessage("bg_runtime_onConnect"); + // Force the message manager to disconnect without giving the content a + // chance to send an "Extension:Port:Disconnect" message. + await BrowserTestUtils.crashFrame(tab.linkedBrowser); + await extension.awaitMessage("port_disconnected"); + BrowserTestUtils.removeTab(tab); + await extension.unload(); +}); + +add_task(async function connect_from_bg_to_tab_and_crash_tab() { + let extension = ExtensionTestUtils.loadExtension({ + manifest: { + content_scripts: [ + { + js: ["contentscript.js"], + matches: ["http://example.com/?crashme"], + }, + ], + }, + + background() { + browser.runtime.onMessage.addListener((msg, sender) => { + browser.test.assertEq("contentscript_ready", msg, "expected message"); + let port = browser.tabs.connect(sender.tab.id, { name: "bg_to_tab" }); + port.onDisconnect.addListener(() => { + browser.test.assertEq( + null, + port.error, + "port should be disconnected without errors" + ); + browser.test.sendMessage("port_disconnected"); + }); + }); + }, + + files: { + "contentscript.js": function () { + browser.runtime.onConnect.addListener(port => { + browser.test.assertEq("bg_to_tab", port.name, "expected port"); + port.onDisconnect.addListener(() => { + browser.test.fail( + "Unexpected onDisconnect event in content script" + ); + }); + browser.test.sendMessage("tab_runtime_onConnect"); + }); + browser.runtime.sendMessage("contentscript_ready"); + }, + }, + }); + + await extension.startup(); + + let tab = await BrowserTestUtils.openNewForegroundTab( + gBrowser, + "http://example.com/?crashme" + ); + await extension.awaitMessage("tab_runtime_onConnect"); + // Force the message manager to disconnect without giving the content a + // chance to send an "Extension:Port:Disconnect" message. + await BrowserTestUtils.crashFrame(tab.linkedBrowser); + await extension.awaitMessage("port_disconnected"); + BrowserTestUtils.removeTab(tab); + await extension.unload(); +}); -- cgit v1.2.3