Bug 1445537: Follow-up: Add test. r?aswan
MozReview-Commit-ID: 8rDoqbPfnrS
--- 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();
+});