Bug 1351638 - Fix intermittents caused by menus_commands test
MozReview-Commit-ID: FsU2MHL0c9o
--- a/browser/components/extensions/test/browser/browser-common.ini
+++ b/browser/components/extensions/test/browser/browser-common.ini
@@ -50,17 +50,16 @@ skip-if = (os == 'win' && !debug) # bug
[browser_ext_commands_execute_sidebar_action.js]
[browser_ext_commands_getAll.js]
[browser_ext_commands_onCommand.js]
[browser_ext_contentscript_connect.js]
[browser_ext_contextMenus.js]
[browser_ext_contextMenus_checkboxes.js]
[browser_ext_contextMenus_commands.js]
[browser_ext_contextMenus_icons.js]
-skip-if = os == 'win' && !debug # Bug 1351638
[browser_ext_contextMenus_onclick.js]
[browser_ext_contextMenus_radioGroups.js]
[browser_ext_contextMenus_uninstall.js]
[browser_ext_contextMenus_urlPatterns.js]
[browser_ext_currentWindow.js]
[browser_ext_devtools_inspectedWindow.js]
[browser_ext_devtools_inspectedWindow_eval_bindings.js]
[browser_ext_devtools_inspectedWindow_reload.js]
--- a/browser/components/extensions/test/browser/browser_ext_contextMenus_commands.js
+++ b/browser/components/extensions/test/browser/browser_ext_contextMenus_commands.js
@@ -28,16 +28,17 @@ add_task(async function() {
function testScript() {
window.onload = () => {
browser.test.sendMessage("test-opened", true);
};
}
let extension = ExtensionTestUtils.loadExtension({
manifest: {
+ "name": "contextMenus commands",
"permissions": ["contextMenus", "activeTab", "tabs"],
"browser_action": {
"default_title": "Test BrowserAction",
"default_popup": "test.html",
"browser_style": true,
},
"page_action": {
"default_title": "Test PageAction",
@@ -54,16 +55,17 @@ add_task(async function() {
"test.html": `<!DOCTYPE html><meta charset="utf-8"><script src="test.js"></script>`,
"test.js": testScript,
},
});
async function testContext(id) {
const menu = await openExtensionContextMenu();
const items = menu.getElementsByAttribute("label", id);
+ is(items.length, 1, `exactly one menu item found`);
await closeExtensionContextMenu(items[0]);
return extension.awaitMessage("test-opened");
}
await extension.startup();
await extension.awaitMessage("ready");
// open a page so page action works
--- a/browser/components/extensions/test/browser/browser_ext_contextMenus_icons.js
+++ b/browser/components/extensions/test/browser/browser_ext_contextMenus_icons.js
@@ -6,16 +6,17 @@ add_task(async function() {
let tab1 = await BrowserTestUtils.openNewForegroundTab(gBrowser,
"http://mochi.test:8888/browser/browser/components/extensions/test/browser/context.html?test=icons");
let encodedImageData = "iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAC4klEQVRYhdWXLWzbQBSADQtDAwsHC1tUhUxqfL67lk2tdn+OJg0ODU0rLByqgqINBY6tmlbn7LMTJ5FaFVVBk1G0oUGjG2jT2Y7jxmmcbU/6iJ+f36fz+e5sGP9riCGm9hB37RG+scd4Yo/wsDXCZyIE2xuXsce4bY+wXkAsQtzYmExrfFgvkJkRbkzo1ehoxx5iXcgI/9iYUGt8WH9MqDXEcmNChmEYrRCf2SHWeYgQx3x0tLNRIeKQLTtEFyJEep4NTuhk8BC+yMrwEE3+iozo42d8gK7FAOkMsRiiN8QhW2ttSK5QTfRRV4QoymVeJMvPvDp7gCZigD613MN6yRFA3SWarow9QB9LCfG+NeF9qCtjAKOSQjCqVKhfVsiHEQ+grgx/lRGqUihAc1uL8EFD+KCRO+GrF4J61phcoRoPoEzkYhZYpykh5sMb7kOdIeY+jHKur4QI4Feh4AFX1nVeLxrAvQchGsBz5ls6wa2QdwcvIcE2863bTH79KOvsz/uUYJsp+J0pSzNlDckVqqVGUAF+n6uS7txcOl6wot4JVy70ufDLy4pWLUQVPE81pRI0mGe9oxLMHSeohHvMs/STUNaUK6vDPCvOyxMFDx4achehRDJmHnydnkPww5OFfLxrGIZBFDyYl4LpMzlTQFIP6AQx86w2UeYBccFpJrcKv5L9eGDtUAU6RIELqsB74uynjy/UBRF1gS5BTFxwQT1wTiXoUg9MH7m/3NZRRoi5IJytUbMgzv4Wc832+oQkiKgEehmyMkkpKsFkQV11QsRJL5rJYBLItQgRaUZEmnoZXsomz3vGiWw+I9KMF9SVFOqZEemZekli1jN3U/UOqhHHvC6oWWGElhfSpGdOk6+O9prdwvtLj5BjRsQxdRnot+Zeifpy/2/0stktKTRNLmbk0mwXyl8253fyojj+8rxOHNAhjjm5n0/5OOCGOKBzkrMO0Z75lvSAzKlrF32Z/3z8BqLAn+yMV7VhAAAAAElFTkSuQmCC";
const IMAGE_ARRAYBUFFER = imageBufferFromDataURI(encodedImageData);
let extension = ExtensionTestUtils.loadExtension({
manifest: {
+ "name": "contextMenus icons",
"permissions": ["contextMenus"],
"icons": {
"18": "extension.png",
},
},
files: {
"extension.png": IMAGE_ARRAYBUFFER,
@@ -33,38 +34,40 @@ add_task(async function() {
browser.contextMenus.create({
title: "child",
});
browser.test.notifyPass("contextmenus-icons");
},
});
- let confirmContextMenuIcon = (rootElement) => {
+ let confirmContextMenuIcon = (rootElements) => {
let expectedURL = new RegExp(String.raw`^moz-extension://[^/]+/extension\.png$`);
- let imageUrl = rootElement.getAttribute("image");
+ is(rootElements.length, 1, "Found exactly one menu item");
+ let imageUrl = rootElements[0].getAttribute("image");
ok(expectedURL.test(imageUrl), "The context menu should display the extension icon next to the root element");
};
await extension.startup();
await extension.awaitFinish("contextmenus-icons");
let extensionMenu = await openExtensionContextMenu();
let contextMenu = document.getElementById("contentAreaContextMenu");
- let topLevelMenuItem = contextMenu.getElementsByAttribute("ext-type", "top-level-menu")[0];
+ let topLevelMenuItem = contextMenu.getElementsByAttribute("ext-type", "top-level-menu");
confirmContextMenuIcon(topLevelMenuItem);
- let childToDelete = extensionMenu.getElementsByAttribute("label", "child-to-delete")[0];
- await closeExtensionContextMenu(childToDelete);
+ let childToDelete = extensionMenu.getElementsByAttribute("label", "child-to-delete");
+ is(childToDelete.length, 1, "Found exactly one child to delete");
+ await closeExtensionContextMenu(childToDelete[0]);
await extension.awaitMessage("child-deleted");
await openExtensionContextMenu();
contextMenu = document.getElementById("contentAreaContextMenu");
- topLevelMenuItem = contextMenu.getElementsByAttribute("label", "child")[0];
+ topLevelMenuItem = contextMenu.getElementsByAttribute("label", "child");
confirmContextMenuIcon(topLevelMenuItem);
await closeContextMenu();
await extension.unload();
await BrowserTestUtils.removeTab(tab1);
});
--- a/browser/components/extensions/test/browser/browser_ext_contextMenus_onclick.js
+++ b/browser/components/extensions/test/browser/browser_ext_contextMenus_onclick.js
@@ -213,16 +213,17 @@ add_task(async function test_onclick_mod
const tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, PAGE);
await extension.startup();
await extension.awaitMessage("ready");
async function click(modifiers = {}) {
const menu = await openContextMenu();
const items = menu.getElementsByAttribute("label", "modify");
+ is(items.length, 1, "Got exactly one context menu item");
await closeExtensionContextMenu(items[0], modifiers);
return extension.awaitMessage("click");
}
const plain = await click();
is(plain.modifiers.length, 0, "modifiers array empty with a plain click");
const shift = await click({shiftKey: true});
--- a/browser/components/extensions/test/browser/head.js
+++ b/browser/components/extensions/test/browser/head.js
@@ -315,28 +315,31 @@ async function openExtensionContextMenu(
let contextMenu = await openContextMenu(selector);
let topLevelMenu = contextMenu.getElementsByAttribute("ext-type", "top-level-menu");
// Return null if the extension only has one item and therefore no extension menu.
if (topLevelMenu.length == 0) {
return null;
}
- let extensionMenu = topLevelMenu[0].childNodes[0];
+ let extensionMenu = topLevelMenu[0];
let popupShownPromise = BrowserTestUtils.waitForEvent(contextMenu, "popupshown");
EventUtils.synthesizeMouseAtCenter(extensionMenu, {});
await popupShownPromise;
return extensionMenu;
}
async function closeExtensionContextMenu(itemToSelect, modifiers = {}) {
let contentAreaContextMenu = document.getElementById("contentAreaContextMenu");
let popupHiddenPromise = BrowserTestUtils.waitForEvent(contentAreaContextMenu, "popuphidden");
EventUtils.synthesizeMouseAtCenter(itemToSelect, modifiers);
- return popupHiddenPromise;
+ await popupHiddenPromise;
+
+ // Bug 1351638: parent menu fails to close intermittently, make sure it does.
+ contentAreaContextMenu.hidePopup();
}
async function openChromeContextMenu(menuId, target, win = window) {
const node = win.document.querySelector(target);
const menu = win.document.getElementById(menuId);
const shown = BrowserTestUtils.waitForEvent(menu, "popupshown");
EventUtils.synthesizeMouseAtCenter(node, {type: "contextmenu"}, win);
await shown;