Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* -*- 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"],
},
],
},
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,
);
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"],
},
],
},
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,
);
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();
});