bug 1320439 - Fix submenus in page_action, browser_action contextMenus, r?kmag
MozReview-Commit-ID: AGhu1tbofrB
--- a/browser/components/extensions/ext-browserAction.js
+++ b/browser/components/extensions/ext-browserAction.js
@@ -229,18 +229,19 @@ BrowserAction.prototype = {
}
}
break;
case "popupshowing":
const menu = event.target;
const trigger = menu.triggerNode;
const node = window.document.getElementById(this.id);
+ const contexts = ["toolbar-context-menu", "customizationPanelItemContextMenu"];
- if (menu.localName === "menupopup" && node && isAncestorOrSelf(node, trigger)) {
+ if (contexts.includes(menu.id) && node && isAncestorOrSelf(node, trigger)) {
global.actionContextMenu({
extension: this.extension,
onBrowserAction: true,
menu: menu,
});
}
break;
}
--- a/browser/components/extensions/ext-pageAction.js
+++ b/browser/components/extensions/ext-pageAction.js
@@ -162,17 +162,17 @@ PageAction.prototype = {
this.handleClick(window);
}
break;
case "popupshowing":
const menu = event.target;
const trigger = menu.triggerNode;
- if (menu.localName === "menupopup" && trigger && trigger.id === this.id) {
+ if (menu.id === "toolbar-context-menu" && trigger && trigger.id === this.id) {
global.actionContextMenu({
extension: this.extension,
onPageAction: true,
menu: menu,
});
}
break;
}
--- a/browser/components/extensions/test/browser/browser_ext_contextMenus_actionMenus.js
+++ b/browser/components/extensions/test/browser/browser_ext_contextMenus_actionMenus.js
@@ -37,25 +37,28 @@ add_task(function* () {
const tabId = yield extension.awaitMessage("ready");
for (const kind of ["page", "browser"]) {
const menu = yield openActionContextMenu(extension, kind);
const [submenu, second, , , , last, separator] = menu.children;
is(submenu.tagName, "menu", "Correct submenu type");
is(submenu.label, "parent", "Correct submenu title");
- is(submenu.firstChild.children.length, 2, "Correct number of submenu items");
+
+ const popup = yield openActionSubmenu(submenu);
+ is(popup, submenu.firstChild, "Correct submenu opened");
+ is(popup.children.length, 2, "Correct number of submenu items");
is(second.tagName, "menuitem", "Second menu item type is correct");
is(second.label, "click 1", "Second menu item title is correct");
is(last.label, "click 5", "Last menu item title is correct");
is(separator.tagName, "menuseparator", "Separator after last menu item");
- yield closeActionContextMenu(last);
+ yield closeActionContextMenu(popup.firstChild);
const {info, tab} = yield extension.awaitMessage("click");
is(info.pageUrl, "http://example.com/", "Click info pageUrl is correct");
is(tab.id, tabId, "Click event tab ID is correct");
}
yield BrowserTestUtils.removeTab(tab);
yield extension.unload();
});
--- a/browser/components/extensions/test/browser/head.js
+++ b/browser/components/extensions/test/browser/head.js
@@ -5,17 +5,17 @@
/* exported CustomizableUI makeWidgetId focusWindow forceGC
* getBrowserActionWidget
* clickBrowserAction clickPageAction
* getBrowserActionPopup getPageActionPopup
* closeBrowserAction closePageAction
* promisePopupShown promisePopupHidden
* openContextMenu closeContextMenu
* openExtensionContextMenu closeExtensionContextMenu
- * openActionContextMenu closeActionContextMenu
+ * openActionContextMenu openActionSubmenu closeActionContextMenu
* imageBuffer getListStyleImage getPanelForNode
* awaitExtensionPanel awaitPopupResize
* promiseContentDimensions alterContent
*/
const {AppConstants} = Cu.import("resource://gre/modules/AppConstants.jsm");
const {CustomizableUI} = Cu.import("resource:///modules/CustomizableUI.jsm");
@@ -249,16 +249,24 @@ function* openActionContextMenu(extensio
const shown = BrowserTestUtils.waitForEvent(menu, "popupshown");
EventUtils.synthesizeMouseAtCenter(button, {type: "contextmenu"}, win);
yield shown;
return menu;
}
+function* openActionSubmenu(submenuItem, win = window) {
+ const submenu = submenuItem.firstChild;
+ const shown = BrowserTestUtils.waitForEvent(submenu, "popupshown");
+ EventUtils.synthesizeMouseAtCenter(submenuItem, {}, win);
+ yield shown;
+ return submenu;
+}
+
function closeActionContextMenu(itemToSelect, win = window) {
const menu = win.document.getElementById("toolbar-context-menu");
const hidden = BrowserTestUtils.waitForEvent(menu, "popuphidden");
if (itemToSelect) {
EventUtils.synthesizeMouseAtCenter(itemToSelect, {}, win);
} else {
menu.hidePopup();
}