summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/xpcshell/test_ext_runtime_sendMessage_multiple.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /toolkit/components/extensions/test/xpcshell/test_ext_runtime_sendMessage_multiple.js
parentInitial commit. (diff)
downloadfirefox-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 'toolkit/components/extensions/test/xpcshell/test_ext_runtime_sendMessage_multiple.js')
-rw-r--r--toolkit/components/extensions/test/xpcshell/test_ext_runtime_sendMessage_multiple.js67
1 files changed, 67 insertions, 0 deletions
diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_runtime_sendMessage_multiple.js b/toolkit/components/extensions/test/xpcshell/test_ext_runtime_sendMessage_multiple.js
new file mode 100644
index 0000000000..9827a329e3
--- /dev/null
+++ b/toolkit/components/extensions/test/xpcshell/test_ext_runtime_sendMessage_multiple.js
@@ -0,0 +1,67 @@
+/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set sts=2 sw=2 et tw=80: */
+"use strict";
+
+// Regression test for bug 1655624: When there are multiple onMessage receivers
+// that both handle the response asynchronously, destroying the context of one
+// recipient should not prevent the other recipient from sending a reply.
+add_task(async function onMessage_ignores_destroyed_contexts() {
+ let extension = ExtensionTestUtils.loadExtension({
+ background() {
+ browser.test.onMessage.addListener(async msg => {
+ if (msg !== "startTest") {
+ return;
+ }
+ try {
+ let res = await browser.runtime.sendMessage("msg_from_bg");
+ browser.test.assertEq(0, res, "Result from onMessage");
+ browser.test.notifyPass("handled_onMessage");
+ } catch (e) {
+ browser.test.fail(`Unexpected error: ${e.message} :: ${e.stack}`);
+ browser.test.notifyFail("handled_onMessage");
+ }
+ });
+ },
+ files: {
+ "tab.html": `
+ <!DOCTYPE html><meta charset="utf-8">
+ <script src="tab.js"></script>
+ `,
+ "tab.js": () => {
+ let where = location.search.slice(1);
+ let resolveOnMessage;
+ browser.runtime.onMessage.addListener(async msg => {
+ browser.test.assertEq("msg_from_bg", msg, `onMessage at ${where}`);
+ browser.test.sendMessage(`received:${where}`);
+ return new Promise(resolve => {
+ resolveOnMessage = resolve;
+ });
+ });
+ browser.test.onMessage.addListener(msg => {
+ if (msg === `resolveOnMessage:${where}`) {
+ resolveOnMessage(0);
+ }
+ });
+ },
+ },
+ });
+ await extension.startup();
+ let tabToCloseEarly = await ExtensionTestUtils.loadContentPage(
+ `moz-extension://${extension.uuid}/tab.html?tabToCloseEarly`,
+ { extension }
+ );
+ let tabToRespond = await ExtensionTestUtils.loadContentPage(
+ `moz-extension://${extension.uuid}/tab.html?tabToRespond`,
+ { extension }
+ );
+ extension.sendMessage("startTest");
+ await Promise.all([
+ extension.awaitMessage("received:tabToCloseEarly"),
+ extension.awaitMessage("received:tabToRespond"),
+ ]);
+ await tabToCloseEarly.close();
+ extension.sendMessage("resolveOnMessage:tabToRespond");
+ await extension.awaitFinish("handled_onMessage");
+ await tabToRespond.close();
+ await extension.unload();
+});