Bug 1445537: Follow-up: Add test. r?aswan draft
authorKris Maglione <maglione.k@gmail.com>
Wed, 14 Mar 2018 21:43:11 -0700
changeset 767844 1d81b2c9737923f6a464c7150c8d1a382891fd1f
parent 767843 6ed4300a066b74d9f7dc2a8c24062f6691c11edb
push id102709
push usermaglione.k@gmail.com
push dateThu, 15 Mar 2018 04:43:54 +0000
reviewersaswan
bugs1445537
milestone61.0a1
Bug 1445537: Follow-up: Add test. r?aswan MozReview-Commit-ID: 8rDoqbPfnrS
browser/components/extensions/test/browser/browser-common.ini
browser/components/extensions/test/browser/browser_ext_browserAction_popup_port.js
--- a/browser/components/extensions/test/browser/browser-common.ini
+++ b/browser/components/extensions/test/browser/browser-common.ini
@@ -46,16 +46,17 @@ skip-if = os == 'win' || os == 'mac' # B
 [browser_ext_browserAction_contextMenu.js]
 # bug 1369197
 skip-if = os == 'linux'
 [browser_ext_browserAction_disabled.js]
 [browser_ext_browserAction_pageAction_icon.js]
 [browser_ext_browserAction_pageAction_icon_permissions.js]
 [browser_ext_browserAction_popup.js]
 skip-if = (debug && os == 'linux' && bits == 32) || (os == 'win' && !debug) # Bug 1313372, win: Bug 1285500
+[browser_ext_browserAction_popup_port.js]
 [browser_ext_browserAction_popup_preload.js]
 skip-if = (os == 'win' && !debug) # bug 1352668
 [browser_ext_browserAction_popup_resize.js]
 [browser_ext_browserAction_simple.js]
 [browser_ext_browserAction_telemetry.js]
 [browser_ext_browserAction_theme_icons.js]
 [browser_ext_browsingData_formData.js]
 [browser_ext_browsingData_history.js]
new file mode 100644
--- /dev/null
+++ b/browser/components/extensions/test/browser/browser_ext_browserAction_popup_port.js
@@ -0,0 +1,52 @@
+/* -*- 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",
+        "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();
+});