forked from mirrors/gecko-dev
87 lines
3.8 KiB
JavaScript
87 lines
3.8 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
const gBaseURL = "https://example.com/browser/browser/base/content/test/general/";
|
|
|
|
add_task(function *() {
|
|
let tab = gBrowser.addTab();
|
|
let browser = gBrowser.getBrowserForTab(tab);
|
|
|
|
gBrowser.selectedTab = tab;
|
|
yield promiseTabLoadEvent(tab, gBaseURL + "subtst_contextmenu.html");
|
|
|
|
let popupShownPromise = promiseWaitForEvent(window, "popupshown", true);
|
|
|
|
// Get the point of the element with the page menu (test-pagemenu) and
|
|
// synthesize a right mouse click there.
|
|
let eventDetails = { type : "contextmenu", button : 2 };
|
|
let rect = browser.contentWindow.document.getElementById("test-pagemenu").getBoundingClientRect();
|
|
EventUtils.synthesizeMouse(browser, rect.x + rect.width / 2, rect.y + rect.height / 2, eventDetails, window);
|
|
|
|
let event = yield popupShownPromise;
|
|
|
|
let contextMenu = document.getElementById("contentAreaContextMenu");
|
|
checkMenu(contextMenu);
|
|
contextMenu.hidePopup();
|
|
gBrowser.removeCurrentTab();
|
|
});
|
|
|
|
function checkItems(menuitem, arr)
|
|
{
|
|
for (let i = 0; i < arr.length; i += 2) {
|
|
let str = arr[i];
|
|
let details = arr[i + 1];
|
|
if (str == "---") {
|
|
is(menuitem.localName, "menuseparator", "menuseparator");
|
|
}
|
|
else if ("children" in details) {
|
|
is(menuitem.localName, "menu", "submenu");
|
|
is(menuitem.getAttribute("label"), str, str + " label");
|
|
checkItems(menuitem.firstChild.firstChild, details.children);
|
|
}
|
|
else {
|
|
is(menuitem.localName, "menuitem", str + " menuitem");
|
|
|
|
is(menuitem.getAttribute("label"), str, str + " label");
|
|
is(menuitem.getAttribute("type"), details.type, str + " type");
|
|
is(menuitem.getAttribute("image"), details.icon ? gBaseURL + details.icon : "", str + " icon");
|
|
|
|
if (details.checked)
|
|
is(menuitem.getAttribute("checked"), "true", str + " checked");
|
|
else
|
|
ok(!menuitem.hasAttribute("checked"), str + " checked");
|
|
|
|
if (details.disabled)
|
|
is(menuitem.getAttribute("disabled"), "true", str + " disabled");
|
|
else
|
|
ok(!menuitem.hasAttribute("disabled"), str + " disabled");
|
|
}
|
|
|
|
menuitem = menuitem.nextSibling;
|
|
}
|
|
}
|
|
|
|
function checkMenu(contextMenu)
|
|
{
|
|
let items = [ "Plain item", {type: "", icon: "", checked: false, disabled: false},
|
|
"Disabled item", {type: "", icon: "", checked: false, disabled: true},
|
|
"Item w/ textContent", {type: "", icon: "", checked: false, disabled: false},
|
|
"---", null,
|
|
"Checkbox", {type: "checkbox", icon: "", checked: true, disabled: false},
|
|
"---", null,
|
|
"Radio1", {type: "checkbox", icon: "", checked: true, disabled: false},
|
|
"Radio2", {type: "checkbox", icon: "", checked: false, disabled: false},
|
|
"Radio3", {type: "checkbox", icon: "", checked: false, disabled: false},
|
|
"---", null,
|
|
"Item w/ icon", {type: "", icon: "favicon.ico", checked: false, disabled: false},
|
|
"Item w/ bad icon", {type: "", icon: "", checked: false, disabled: false},
|
|
"---", null,
|
|
"Submenu", { children:
|
|
["Radio1", {type: "checkbox", icon: "", checked: false, disabled: false},
|
|
"Radio2", {type: "checkbox", icon: "", checked: true, disabled: false},
|
|
"Radio3", {type: "checkbox", icon: "", checked: false, disabled: false},
|
|
"---", null,
|
|
"Checkbox", {type: "checkbox", icon: "", checked: false, disabled: false}] }
|
|
];
|
|
checkItems(contextMenu.childNodes[2], items);
|
|
}
|