summaryrefslogtreecommitdiffstats
path: root/browser/components/extensions/test/browser/browser_ext_browserAction_popup_port.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/extensions/test/browser/browser_ext_browserAction_popup_port.js')
-rw-r--r--browser/components/extensions/test/browser/browser_ext_browserAction_popup_port.js56
1 files changed, 56 insertions, 0 deletions
diff --git a/browser/components/extensions/test/browser/browser_ext_browserAction_popup_port.js b/browser/components/extensions/test/browser/browser_ext_browserAction_popup_port.js
new file mode 100644
index 0000000000..415d69738d
--- /dev/null
+++ b/browser/components/extensions/test/browser/browser_ext_browserAction_popup_port.js
@@ -0,0 +1,56 @@
+/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set sts=2 sw=2 et tw=80: */
+"use strict";
+
+let scriptPage = url =>
+ `<html><head><meta charset="utf-8"><script src="${url}"></script></head><body>${url}</body></html>`;
+
+// Tests that message ports still function correctly after a browserAction popup
+// <browser> has been reparented.
+add_task(async function test_browserActionPort() {
+ let extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ browser_action: {
+ default_popup: "popup.html",
+ default_area: "navbar",
+ browser_style: true,
+ },
+ },
+
+ background() {
+ new Promise(resolve => {
+ browser.runtime.onConnect.addListener(port => {
+ resolve(
+ Promise.all([
+ new Promise(r => port.onMessage.addListener(r)),
+ new Promise(r => port.onDisconnect.addListener(r)),
+ ])
+ );
+ });
+ }).then(([msg]) => {
+ browser.test.assertEq("Hallo.", msg, "Got expected message");
+ browser.test.notifyPass("browserAction-popup-port");
+ });
+ },
+
+ files: {
+ "popup.html": scriptPage("popup.js"),
+ "popup.js"() {
+ let port = browser.runtime.connect();
+ window.onload = () => {
+ setTimeout(() => {
+ port.postMessage("Hallo.");
+ window.close();
+ }, 0);
+ };
+ },
+ },
+ });
+
+ await extension.startup();
+
+ await clickBrowserAction(extension);
+
+ await extension.awaitFinish("browserAction-popup-port");
+ await extension.unload();
+});