142 lines
4.4 KiB
JavaScript
142 lines
4.4 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
async function openContextMenu(itemElement, win = window) {
|
|
let popupShownPromise = BrowserTestUtils.waitForEvent(
|
|
itemElement.ownerDocument,
|
|
"popupshown"
|
|
);
|
|
EventUtils.synthesizeMouseAtCenter(
|
|
itemElement,
|
|
{
|
|
type: "contextmenu",
|
|
button: 2,
|
|
},
|
|
win
|
|
);
|
|
let { target } = await popupShownPromise;
|
|
return target;
|
|
}
|
|
|
|
async function testContextMenu() {
|
|
await BrowserTestUtils.withNewTab("about:blank", async () => {
|
|
let panelUIMenuButton = document.getElementById("PanelUI-menu-button");
|
|
let contextMenu = await openContextMenu(panelUIMenuButton);
|
|
let array1 = AppConstants.MENUBAR_CAN_AUTOHIDE
|
|
? [
|
|
".customize-context-moveToPanel",
|
|
".customize-context-removeFromToolbar",
|
|
"#toolbarItemsMenuSeparator",
|
|
"#toggle_toolbar-menubar",
|
|
"#toggle_PersonalToolbar",
|
|
"#viewToolbarsMenuSeparator",
|
|
".viewCustomizeToolbar",
|
|
]
|
|
: [
|
|
".customize-context-moveToPanel",
|
|
".customize-context-removeFromToolbar",
|
|
"#toolbarItemsMenuSeparator",
|
|
"#toggle_PersonalToolbar",
|
|
"#viewToolbarsMenuSeparator",
|
|
".viewCustomizeToolbar",
|
|
];
|
|
let result1 = verifyContextMenu(contextMenu, array1);
|
|
ok(!result1, "Expected no errors verifying context menu items");
|
|
contextMenu.hidePopup();
|
|
let onFullscreen = Promise.all([
|
|
BrowserTestUtils.waitForEvent(window, "fullscreen"),
|
|
BrowserTestUtils.waitForEvent(
|
|
window,
|
|
"sizemodechange",
|
|
false,
|
|
e => window.fullScreen
|
|
),
|
|
BrowserTestUtils.waitForPopupEvent(contextMenu, "hidden"),
|
|
]);
|
|
document.getElementById("View:FullScreen").doCommand();
|
|
contextMenu.hidePopup();
|
|
info("waiting for fullscreen");
|
|
await onFullscreen;
|
|
// make sure the toolbox is visible if it's autohidden
|
|
document.getElementById("Browser:OpenLocation").doCommand();
|
|
info("trigger the context menu");
|
|
let contextMenu2 = await openContextMenu(panelUIMenuButton);
|
|
info("context menu should be open, verify its menu items");
|
|
let array2 = AppConstants.MENUBAR_CAN_AUTOHIDE
|
|
? [
|
|
".customize-context-moveToPanel",
|
|
".customize-context-removeFromToolbar",
|
|
"#toolbarItemsMenuSeparator",
|
|
"#toggle_toolbar-menubar",
|
|
"#toggle_PersonalToolbar",
|
|
"#viewToolbarsMenuSeparator",
|
|
".viewCustomizeToolbar",
|
|
`menuseparator[contexttype="fullscreen"]`,
|
|
`.fullscreen-context-autohide`,
|
|
`menuitem[contexttype="fullscreen"]`,
|
|
]
|
|
: [
|
|
".customize-context-moveToPanel",
|
|
".customize-context-removeFromToolbar",
|
|
"#toolbarItemsMenuSeparator",
|
|
"#toggle_PersonalToolbar",
|
|
"#viewToolbarsMenuSeparator",
|
|
".viewCustomizeToolbar",
|
|
`menuseparator[contexttype="fullscreen"]`,
|
|
`.fullscreen-context-autohide`,
|
|
`menuitem[contexttype="fullscreen"]`,
|
|
];
|
|
let result2 = verifyContextMenu(contextMenu2, array2);
|
|
ok(!result2, "Expected no errors verifying context menu items");
|
|
let onExitFullscreen = Promise.all([
|
|
BrowserTestUtils.waitForEvent(window, "fullscreen"),
|
|
BrowserTestUtils.waitForEvent(
|
|
window,
|
|
"sizemodechange",
|
|
false,
|
|
e => !window.fullScreen
|
|
),
|
|
BrowserTestUtils.waitForPopupEvent(contextMenu2, "hidden"),
|
|
]);
|
|
document.getElementById("View:FullScreen").doCommand();
|
|
contextMenu2.hidePopup();
|
|
await onExitFullscreen;
|
|
});
|
|
}
|
|
|
|
function verifyContextMenu(contextMenu, itemSelectors) {
|
|
// Ignore hidden nodes
|
|
let items = Array.from(contextMenu.children).filter(n =>
|
|
BrowserTestUtils.is_visible(n)
|
|
);
|
|
let menuAsText = items
|
|
.map(n => {
|
|
return n.nodeName == "menuseparator"
|
|
? "---"
|
|
: `${n.label} (${n.command})`;
|
|
})
|
|
.join("\n");
|
|
info("Got actual context menu items: \n" + menuAsText);
|
|
|
|
try {
|
|
is(
|
|
items.length,
|
|
itemSelectors.length,
|
|
"Context menu has the expected number of items"
|
|
);
|
|
for (let i = 0; i < items.length; i++) {
|
|
let selector = itemSelectors[i];
|
|
ok(
|
|
items[i].matches(selector),
|
|
`Item at ${i} matches expected selector: ${selector}`
|
|
);
|
|
}
|
|
} catch (ex) {
|
|
return ex;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
add_task(testContextMenu);
|