forked from mirrors/gecko-dev
Backed out changeset 4842c9240ccf (bug 1498410) Backed out changeset 9ba024979004 (bug 1498410) Backed out changeset db5f7c857952 (bug 1498410) Backed out changeset 40f06570e491 (bug 1498410) Backed out changeset 0a7fd350ec1d (bug 1498410) --HG-- rename : browser/extensions/screenshots/_locales/ach/messages.json => browser/extensions/screenshots/webextension/_locales/ach/messages.json rename : browser/extensions/screenshots/_locales/ar/messages.json => browser/extensions/screenshots/webextension/_locales/ar/messages.json rename : browser/extensions/screenshots/_locales/az/messages.json => browser/extensions/screenshots/webextension/_locales/az/messages.json rename : browser/extensions/screenshots/_locales/be/messages.json => browser/extensions/screenshots/webextension/_locales/be/messages.json rename : browser/extensions/screenshots/_locales/bg/messages.json => browser/extensions/screenshots/webextension/_locales/bg/messages.json rename : browser/extensions/screenshots/_locales/bn_BD/messages.json => browser/extensions/screenshots/webextension/_locales/bn_BD/messages.json rename : browser/extensions/screenshots/_locales/br/messages.json => browser/extensions/screenshots/webextension/_locales/br/messages.json rename : browser/extensions/screenshots/_locales/bs/messages.json => browser/extensions/screenshots/webextension/_locales/bs/messages.json rename : browser/extensions/screenshots/_locales/ca/messages.json => browser/extensions/screenshots/webextension/_locales/ca/messages.json rename : browser/extensions/screenshots/_locales/cak/messages.json => browser/extensions/screenshots/webextension/_locales/cak/messages.json rename : browser/extensions/screenshots/_locales/crh/messages.json => browser/extensions/screenshots/webextension/_locales/crh/messages.json rename : browser/extensions/screenshots/_locales/cs/messages.json => browser/extensions/screenshots/webextension/_locales/cs/messages.json rename : browser/extensions/screenshots/_locales/cy/messages.json => browser/extensions/screenshots/webextension/_locales/cy/messages.json rename : browser/extensions/screenshots/_locales/da/messages.json => browser/extensions/screenshots/webextension/_locales/da/messages.json rename : browser/extensions/screenshots/_locales/de/messages.json => browser/extensions/screenshots/webextension/_locales/de/messages.json rename : browser/extensions/screenshots/_locales/dsb/messages.json => browser/extensions/screenshots/webextension/_locales/dsb/messages.json rename : browser/extensions/screenshots/_locales/el/messages.json => browser/extensions/screenshots/webextension/_locales/el/messages.json rename : browser/extensions/screenshots/_locales/en_GB/messages.json => browser/extensions/screenshots/webextension/_locales/en_GB/messages.json rename : browser/extensions/screenshots/_locales/en_US/messages.json => browser/extensions/screenshots/webextension/_locales/en_US/messages.json rename : browser/extensions/screenshots/_locales/eo/messages.json => browser/extensions/screenshots/webextension/_locales/eo/messages.json rename : browser/extensions/screenshots/_locales/es_AR/messages.json => browser/extensions/screenshots/webextension/_locales/es_AR/messages.json rename : browser/extensions/screenshots/_locales/es_CL/messages.json => browser/extensions/screenshots/webextension/_locales/es_CL/messages.json rename : browser/extensions/screenshots/_locales/es_ES/messages.json => browser/extensions/screenshots/webextension/_locales/es_ES/messages.json rename : browser/extensions/screenshots/_locales/es_MX/messages.json => browser/extensions/screenshots/webextension/_locales/es_MX/messages.json rename : browser/extensions/screenshots/_locales/et/messages.json => browser/extensions/screenshots/webextension/_locales/et/messages.json rename : browser/extensions/screenshots/_locales/eu/messages.json => browser/extensions/screenshots/webextension/_locales/eu/messages.json rename : browser/extensions/screenshots/_locales/fa/messages.json => browser/extensions/screenshots/webextension/_locales/fa/messages.json rename : browser/extensions/screenshots/_locales/ff/messages.json => browser/extensions/screenshots/webextension/_locales/ff/messages.json rename : browser/extensions/screenshots/_locales/fi/messages.json => browser/extensions/screenshots/webextension/_locales/fi/messages.json rename : browser/extensions/screenshots/_locales/fr/messages.json => browser/extensions/screenshots/webextension/_locales/fr/messages.json rename : browser/extensions/screenshots/_locales/fy_NL/messages.json => browser/extensions/screenshots/webextension/_locales/fy_NL/messages.json rename : browser/extensions/screenshots/_locales/ga_IE/messages.json => browser/extensions/screenshots/webextension/_locales/ga_IE/messages.json rename : browser/extensions/screenshots/_locales/gd/messages.json => browser/extensions/screenshots/webextension/_locales/gd/messages.json rename : browser/extensions/screenshots/_locales/gl/messages.json => browser/extensions/screenshots/webextension/_locales/gl/messages.json rename : browser/extensions/screenshots/_locales/gn/messages.json => browser/extensions/screenshots/webextension/_locales/gn/messages.json rename : browser/extensions/screenshots/_locales/gu_IN/messages.json => browser/extensions/screenshots/webextension/_locales/gu_IN/messages.json rename : browser/extensions/screenshots/_locales/he/messages.json => browser/extensions/screenshots/webextension/_locales/he/messages.json rename : browser/extensions/screenshots/_locales/hi_IN/messages.json => browser/extensions/screenshots/webextension/_locales/hi_IN/messages.json rename : browser/extensions/screenshots/_locales/hr/messages.json => browser/extensions/screenshots/webextension/_locales/hr/messages.json rename : browser/extensions/screenshots/_locales/hsb/messages.json => browser/extensions/screenshots/webextension/_locales/hsb/messages.json rename : browser/extensions/screenshots/_locales/hu/messages.json => browser/extensions/screenshots/webextension/_locales/hu/messages.json rename : browser/extensions/screenshots/_locales/hy_AM/messages.json => browser/extensions/screenshots/webextension/_locales/hy_AM/messages.json rename : browser/extensions/screenshots/_locales/ia/messages.json => browser/extensions/screenshots/webextension/_locales/ia/messages.json rename : browser/extensions/screenshots/_locales/id/messages.json => browser/extensions/screenshots/webextension/_locales/id/messages.json rename : browser/extensions/screenshots/_locales/it/messages.json => browser/extensions/screenshots/webextension/_locales/it/messages.json rename : browser/extensions/screenshots/_locales/ja/messages.json => browser/extensions/screenshots/webextension/_locales/ja/messages.json rename : browser/extensions/screenshots/_locales/ka/messages.json => browser/extensions/screenshots/webextension/_locales/ka/messages.json rename : browser/extensions/screenshots/_locales/kab/messages.json => browser/extensions/screenshots/webextension/_locales/kab/messages.json rename : browser/extensions/screenshots/_locales/kk/messages.json => browser/extensions/screenshots/webextension/_locales/kk/messages.json rename : browser/extensions/screenshots/_locales/kn/messages.json => browser/extensions/screenshots/webextension/_locales/kn/messages.json rename : browser/extensions/screenshots/_locales/ko/messages.json => browser/extensions/screenshots/webextension/_locales/ko/messages.json rename : browser/extensions/screenshots/_locales/lij/messages.json => browser/extensions/screenshots/webextension/_locales/lij/messages.json rename : browser/extensions/screenshots/_locales/lo/messages.json => browser/extensions/screenshots/webextension/_locales/lo/messages.json rename : browser/extensions/screenshots/_locales/lt/messages.json => browser/extensions/screenshots/webextension/_locales/lt/messages.json rename : browser/extensions/screenshots/_locales/mai/messages.json => browser/extensions/screenshots/webextension/_locales/mai/messages.json rename : browser/extensions/screenshots/_locales/mk/messages.json => browser/extensions/screenshots/webextension/_locales/mk/messages.json rename : browser/extensions/screenshots/_locales/ml/messages.json => browser/extensions/screenshots/webextension/_locales/ml/messages.json rename : browser/extensions/screenshots/_locales/mr/messages.json => browser/extensions/screenshots/webextension/_locales/mr/messages.json rename : browser/extensions/screenshots/_locales/ms/messages.json => browser/extensions/screenshots/webextension/_locales/ms/messages.json rename : browser/extensions/screenshots/_locales/nb_NO/messages.json => browser/extensions/screenshots/webextension/_locales/nb_NO/messages.json rename : browser/extensions/screenshots/_locales/ne_NP/messages.json => browser/extensions/screenshots/webextension/_locales/ne_NP/messages.json rename : browser/extensions/screenshots/_locales/nl/messages.json => browser/extensions/screenshots/webextension/_locales/nl/messages.json rename : browser/extensions/screenshots/_locales/nn_NO/messages.json => browser/extensions/screenshots/webextension/_locales/nn_NO/messages.json rename : browser/extensions/screenshots/_locales/pa_IN/messages.json => browser/extensions/screenshots/webextension/_locales/pa_IN/messages.json rename : browser/extensions/screenshots/_locales/pl/messages.json => browser/extensions/screenshots/webextension/_locales/pl/messages.json rename : browser/extensions/screenshots/_locales/pt_BR/messages.json => browser/extensions/screenshots/webextension/_locales/pt_BR/messages.json rename : browser/extensions/screenshots/_locales/pt_PT/messages.json => browser/extensions/screenshots/webextension/_locales/pt_PT/messages.json rename : browser/extensions/screenshots/_locales/rm/messages.json => browser/extensions/screenshots/webextension/_locales/rm/messages.json rename : browser/extensions/screenshots/_locales/ro/messages.json => browser/extensions/screenshots/webextension/_locales/ro/messages.json rename : browser/extensions/screenshots/_locales/ru/messages.json => browser/extensions/screenshots/webextension/_locales/ru/messages.json rename : browser/extensions/screenshots/_locales/sk/messages.json => browser/extensions/screenshots/webextension/_locales/sk/messages.json rename : browser/extensions/screenshots/_locales/sl/messages.json => browser/extensions/screenshots/webextension/_locales/sl/messages.json rename : browser/extensions/screenshots/_locales/sq/messages.json => browser/extensions/screenshots/webextension/_locales/sq/messages.json rename : browser/extensions/screenshots/_locales/sr/messages.json => browser/extensions/screenshots/webextension/_locales/sr/messages.json rename : browser/extensions/screenshots/_locales/sv_SE/messages.json => browser/extensions/screenshots/webextension/_locales/sv_SE/messages.json rename : browser/extensions/screenshots/_locales/ta/messages.json => browser/extensions/screenshots/webextension/_locales/ta/messages.json rename : browser/extensions/screenshots/_locales/th/messages.json => browser/extensions/screenshots/webextension/_locales/th/messages.json rename : browser/extensions/screenshots/_locales/tl/messages.json => browser/extensions/screenshots/webextension/_locales/tl/messages.json rename : browser/extensions/screenshots/_locales/tr/messages.json => browser/extensions/screenshots/webextension/_locales/tr/messages.json rename : browser/extensions/screenshots/_locales/uk/messages.json => browser/extensions/screenshots/webextension/_locales/uk/messages.json rename : browser/extensions/screenshots/_locales/ur/messages.json => browser/extensions/screenshots/webextension/_locales/ur/messages.json rename : browser/extensions/screenshots/_locales/vi/messages.json => browser/extensions/screenshots/webextension/_locales/vi/messages.json rename : browser/extensions/screenshots/_locales/zh_CN/messages.json => browser/extensions/screenshots/webextension/_locales/zh_CN/messages.json rename : browser/extensions/screenshots/_locales/zh_TW/messages.json => browser/extensions/screenshots/webextension/_locales/zh_TW/messages.json rename : browser/extensions/screenshots/assertIsBlankDocument.js => browser/extensions/screenshots/webextension/assertIsBlankDocument.js rename : browser/extensions/screenshots/assertIsTrusted.js => browser/extensions/screenshots/webextension/assertIsTrusted.js rename : browser/extensions/screenshots/background/analytics.js => browser/extensions/screenshots/webextension/background/analytics.js rename : browser/extensions/screenshots/background/auth.js => browser/extensions/screenshots/webextension/background/auth.js rename : browser/extensions/screenshots/background/communication.js => browser/extensions/screenshots/webextension/background/communication.js rename : browser/extensions/screenshots/background/deviceInfo.js => browser/extensions/screenshots/webextension/background/deviceInfo.js rename : browser/extensions/screenshots/background/main.js => browser/extensions/screenshots/webextension/background/main.js rename : browser/extensions/screenshots/background/selectorLoader.js => browser/extensions/screenshots/webextension/background/selectorLoader.js rename : browser/extensions/screenshots/background/senderror.js => browser/extensions/screenshots/webextension/background/senderror.js rename : browser/extensions/screenshots/background/startBackground.js => browser/extensions/screenshots/webextension/background/startBackground.js rename : browser/extensions/screenshots/background/takeshot.js => browser/extensions/screenshots/webextension/background/takeshot.js rename : browser/extensions/screenshots/blank.html => browser/extensions/screenshots/webextension/blank.html rename : browser/extensions/screenshots/blobConverters.js => browser/extensions/screenshots/webextension/blobConverters.js rename : browser/extensions/screenshots/build/buildSettings.js => browser/extensions/screenshots/webextension/build/buildSettings.js rename : browser/extensions/screenshots/build/inlineSelectionCss.js => browser/extensions/screenshots/webextension/build/inlineSelectionCss.js rename : browser/extensions/screenshots/build/onboardingCss.js => browser/extensions/screenshots/webextension/build/onboardingCss.js rename : browser/extensions/screenshots/build/onboardingHtml.js => browser/extensions/screenshots/webextension/build/onboardingHtml.js rename : browser/extensions/screenshots/build/raven.js => browser/extensions/screenshots/webextension/build/raven.js rename : browser/extensions/screenshots/build/selection.js => browser/extensions/screenshots/webextension/build/selection.js rename : browser/extensions/screenshots/build/shot.js => browser/extensions/screenshots/webextension/build/shot.js rename : browser/extensions/screenshots/build/thumbnailGenerator.js => browser/extensions/screenshots/webextension/build/thumbnailGenerator.js rename : browser/extensions/screenshots/catcher.js => browser/extensions/screenshots/webextension/catcher.js rename : browser/extensions/screenshots/clipboard.js => browser/extensions/screenshots/webextension/clipboard.js rename : browser/extensions/screenshots/domainFromUrl.js => browser/extensions/screenshots/webextension/domainFromUrl.js rename : browser/extensions/screenshots/icons/back-highlight.svg => browser/extensions/screenshots/webextension/icons/back-highlight.svg rename : browser/extensions/screenshots/icons/back.svg => browser/extensions/screenshots/webextension/icons/back.svg rename : browser/extensions/screenshots/icons/cancel.svg => browser/extensions/screenshots/webextension/icons/cancel.svg rename : browser/extensions/screenshots/icons/cloud.svg => browser/extensions/screenshots/webextension/icons/cloud.svg rename : browser/extensions/screenshots/icons/copied-notification.svg => browser/extensions/screenshots/webextension/icons/copied-notification.svg rename : browser/extensions/screenshots/icons/copy.svg => browser/extensions/screenshots/webextension/icons/copy.svg rename : browser/extensions/screenshots/icons/done.svg => browser/extensions/screenshots/webextension/icons/done.svg rename : browser/extensions/screenshots/icons/download.svg => browser/extensions/screenshots/webextension/icons/download.svg rename : browser/extensions/screenshots/icons/help-16.svg => browser/extensions/screenshots/webextension/icons/help-16.svg rename : browser/extensions/screenshots/icons/icon-highlight-32-v2.svg => browser/extensions/screenshots/webextension/icons/icon-highlight-32-v2.svg rename : browser/extensions/screenshots/icons/icon-v2.svg => browser/extensions/screenshots/webextension/icons/icon-v2.svg rename : browser/extensions/screenshots/icons/icon-welcome-face-without-eyes.svg => browser/extensions/screenshots/webextension/icons/icon-welcome-face-without-eyes.svg rename : browser/extensions/screenshots/icons/menu-fullpage.svg => browser/extensions/screenshots/webextension/icons/menu-fullpage.svg rename : browser/extensions/screenshots/icons/menu-myshot-white.svg => browser/extensions/screenshots/webextension/icons/menu-myshot-white.svg rename : browser/extensions/screenshots/icons/menu-myshot.svg => browser/extensions/screenshots/webextension/icons/menu-myshot.svg rename : browser/extensions/screenshots/icons/menu-visible.svg => browser/extensions/screenshots/webextension/icons/menu-visible.svg rename : browser/extensions/screenshots/icons/onboarding-1.png => browser/extensions/screenshots/webextension/icons/onboarding-1.png rename : browser/extensions/screenshots/icons/onboarding-2.png => browser/extensions/screenshots/webextension/icons/onboarding-2.png rename : browser/extensions/screenshots/icons/onboarding-4.png => browser/extensions/screenshots/webextension/icons/onboarding-4.png rename : browser/extensions/screenshots/icons/onboarding-5.png => browser/extensions/screenshots/webextension/icons/onboarding-5.png rename : browser/extensions/screenshots/log.js => browser/extensions/screenshots/webextension/log.js rename : browser/extensions/screenshots/makeUuid.js => browser/extensions/screenshots/webextension/makeUuid.js rename : browser/extensions/screenshots/manifest.json => browser/extensions/screenshots/webextension/manifest.json rename : browser/extensions/screenshots/onboarding/slides.html => browser/extensions/screenshots/webextension/onboarding/slides.html rename : browser/extensions/screenshots/onboarding/slides.js => browser/extensions/screenshots/webextension/onboarding/slides.js rename : browser/extensions/screenshots/randomString.js => browser/extensions/screenshots/webextension/randomString.js rename : browser/extensions/screenshots/selector/callBackground.js => browser/extensions/screenshots/webextension/selector/callBackground.js rename : browser/extensions/screenshots/selector/documentMetadata.js => browser/extensions/screenshots/webextension/selector/documentMetadata.js rename : browser/extensions/screenshots/selector/shooter.js => browser/extensions/screenshots/webextension/selector/shooter.js rename : browser/extensions/screenshots/selector/ui.js => browser/extensions/screenshots/webextension/selector/ui.js rename : browser/extensions/screenshots/selector/uicontrol.js => browser/extensions/screenshots/webextension/selector/uicontrol.js rename : browser/extensions/screenshots/selector/util.js => browser/extensions/screenshots/webextension/selector/util.js rename : browser/extensions/screenshots/sitehelper.js => browser/extensions/screenshots/webextension/sitehelper.js
352 lines
14 KiB
JavaScript
352 lines
14 KiB
JavaScript
// This file expects contextMenu to be defined in the scope it is loaded into.
|
|
/* global contextMenu:true */
|
|
|
|
var lastElement;
|
|
|
|
function openContextMenuFor(element, shiftkey, waitForSpellCheck) {
|
|
// Context menu should be closed before we open it again.
|
|
is(SpecialPowers.wrap(contextMenu).state, "closed", "checking if popup is closed");
|
|
|
|
if (lastElement)
|
|
lastElement.blur();
|
|
element.focus();
|
|
|
|
// Some elements need time to focus and spellcheck before any tests are
|
|
// run on them.
|
|
function actuallyOpenContextMenuFor() {
|
|
lastElement = element;
|
|
var eventDetails = { type: "contextmenu", button: 2, shiftKey: shiftkey };
|
|
synthesizeMouse(element, 2, 2, eventDetails, element.ownerGlobal);
|
|
}
|
|
|
|
if (waitForSpellCheck) {
|
|
var { onSpellCheck } =
|
|
SpecialPowers.Cu.import(
|
|
"resource://testing-common/AsyncSpellCheckTestHelper.jsm", {});
|
|
onSpellCheck(element, actuallyOpenContextMenuFor);
|
|
} else {
|
|
actuallyOpenContextMenuFor();
|
|
}
|
|
}
|
|
|
|
function closeContextMenu() {
|
|
contextMenu.hidePopup();
|
|
}
|
|
|
|
function getVisibleMenuItems(aMenu, aData) {
|
|
var items = [];
|
|
var accessKeys = {};
|
|
for (var i = 0; i < aMenu.children.length; i++) {
|
|
var item = aMenu.children[i];
|
|
if (item.hidden)
|
|
continue;
|
|
|
|
var key = item.accessKey;
|
|
if (key)
|
|
key = key.toLowerCase();
|
|
|
|
var isPageMenuItem = item.hasAttribute("generateditemid");
|
|
|
|
if (item.nodeName == "menuitem") {
|
|
var isGenerated = item.classList.contains("spell-suggestion")
|
|
|| item.classList.contains("sendtab-target");
|
|
if (isGenerated) {
|
|
is(item.id, "", "child menuitem #" + i + " is generated");
|
|
} else if (isPageMenuItem) {
|
|
is(item.id, "", "child menuitem #" + i + " is a generated page menu item");
|
|
} else {
|
|
ok(item.id, "child menuitem #" + i + " has an ID");
|
|
}
|
|
var label = item.getAttribute("label");
|
|
ok(label.length, "menuitem " + item.id + " has a label");
|
|
if (isGenerated) {
|
|
is(key, "", "Generated items shouldn't have an access key");
|
|
items.push("*" + label);
|
|
} else if (isPageMenuItem) {
|
|
items.push("+" + label);
|
|
} else if (item.id.indexOf("spell-check-dictionary-") != 0 &&
|
|
item.id != "spell-no-suggestions" &&
|
|
item.id != "spell-add-dictionaries-main" &&
|
|
item.id != "context-savelinktopocket" &&
|
|
item.id != "fill-login-saved-passwords" &&
|
|
item.id != "fill-login-no-logins" &&
|
|
// XXX Screenshots doesn't have an access key. This needs
|
|
// at least bug 1320462 fixing first.
|
|
item.id != "screenshots_mozilla_org_create-screenshot") {
|
|
ok(key, "menuitem " + item.id + " has an access key");
|
|
if (accessKeys[key])
|
|
ok(false, "menuitem " + item.id + " has same accesskey as " + accessKeys[key]);
|
|
else
|
|
accessKeys[key] = item.id;
|
|
}
|
|
if (!isGenerated && !isPageMenuItem) {
|
|
items.push(item.id);
|
|
}
|
|
if (isPageMenuItem) {
|
|
var p = {};
|
|
p.type = item.getAttribute("type");
|
|
p.icon = item.getAttribute("image");
|
|
p.checked = item.hasAttribute("checked");
|
|
p.disabled = item.hasAttribute("disabled");
|
|
items.push(p);
|
|
} else {
|
|
items.push(!item.disabled);
|
|
}
|
|
} else if (item.nodeName == "menuseparator") {
|
|
ok(true, "--- seperator id is " + item.id);
|
|
items.push("---");
|
|
items.push(null);
|
|
} else if (item.nodeName == "menu") {
|
|
if (isPageMenuItem) {
|
|
item.id = "generated-submenu-" + aData.generatedSubmenuId++;
|
|
}
|
|
ok(item.id, "child menu #" + i + " has an ID");
|
|
if (!isPageMenuItem) {
|
|
ok(key, "menu has an access key");
|
|
if (accessKeys[key])
|
|
ok(false, "menu " + item.id + " has same accesskey as " + accessKeys[key]);
|
|
else
|
|
accessKeys[key] = item.id;
|
|
}
|
|
items.push(item.id);
|
|
items.push(!item.disabled);
|
|
// Add a dummy item so that the indexes in checkMenu are the same
|
|
// for expectedItems and actualItems.
|
|
items.push([]);
|
|
items.push(null);
|
|
} else if (item.nodeName == "menugroup") {
|
|
ok(item.id, "child menugroup #" + i + " has an ID");
|
|
items.push(item.id);
|
|
items.push(!item.disabled);
|
|
var menugroupChildren = [];
|
|
for (var child of item.children) {
|
|
if (child.hidden)
|
|
continue;
|
|
|
|
menugroupChildren.push([child.id, !child.disabled]);
|
|
}
|
|
items.push(menugroupChildren);
|
|
items.push(null);
|
|
} else {
|
|
ok(false, "child #" + i + " of menu ID " + aMenu.id +
|
|
" has an unknown type (" + item.nodeName + ")");
|
|
}
|
|
}
|
|
return items;
|
|
}
|
|
|
|
function checkContextMenu(expectedItems) {
|
|
is(contextMenu.state, "open", "checking if popup is open");
|
|
var data = { generatedSubmenuId: 1 };
|
|
checkMenu(contextMenu, expectedItems, data);
|
|
}
|
|
|
|
function checkMenuItem(actualItem, actualEnabled, expectedItem, expectedEnabled, index) {
|
|
is(actualItem, expectedItem,
|
|
"checking item #" + index / 2 + " (" + expectedItem + ") name");
|
|
|
|
if (typeof expectedEnabled == "object" && expectedEnabled != null ||
|
|
typeof actualEnabled == "object" && actualEnabled != null) {
|
|
|
|
ok(!(actualEnabled == null), "actualEnabled is not null");
|
|
ok(!(expectedEnabled == null), "expectedEnabled is not null");
|
|
is(typeof actualEnabled, typeof expectedEnabled, "checking types");
|
|
|
|
if (typeof actualEnabled != typeof expectedEnabled ||
|
|
actualEnabled == null || expectedEnabled == null)
|
|
return;
|
|
|
|
is(actualEnabled.type, expectedEnabled.type,
|
|
"checking item #" + index / 2 + " (" + expectedItem + ") type attr value");
|
|
var icon = actualEnabled.icon;
|
|
if (icon) {
|
|
var tmp = "";
|
|
var j = icon.length - 1;
|
|
while (j && icon[j] != "/") {
|
|
tmp = icon[j--] + tmp;
|
|
}
|
|
icon = tmp;
|
|
}
|
|
is(icon, expectedEnabled.icon,
|
|
"checking item #" + index / 2 + " (" + expectedItem + ") icon attr value");
|
|
is(actualEnabled.checked, expectedEnabled.checked,
|
|
"checking item #" + index / 2 + " (" + expectedItem + ") has checked attr");
|
|
is(actualEnabled.disabled, expectedEnabled.disabled,
|
|
"checking item #" + index / 2 + " (" + expectedItem + ") has disabled attr");
|
|
} else if (expectedEnabled != null)
|
|
is(actualEnabled, expectedEnabled,
|
|
"checking item #" + index / 2 + " (" + expectedItem + ") enabled state");
|
|
}
|
|
|
|
/*
|
|
* checkMenu - checks to see if the specified <menupopup> contains the
|
|
* expected items and state.
|
|
* expectedItems is a array of (1) item IDs and (2) a boolean specifying if
|
|
* the item is enabled or not (or null to ignore it). Submenus can be checked
|
|
* by providing a nested array entry after the expected <menu> ID.
|
|
* For example: ["blah", true, // item enabled
|
|
* "submenu", null, // submenu
|
|
* ["sub1", true, // submenu contents
|
|
* "sub2", false], null, // submenu contents
|
|
* "lol", false] // item disabled
|
|
*
|
|
*/
|
|
function checkMenu(menu, expectedItems, data) {
|
|
var actualItems = getVisibleMenuItems(menu, data);
|
|
// ok(false, "Items are: " + actualItems);
|
|
for (var i = 0; i < expectedItems.length; i += 2) {
|
|
var actualItem = actualItems[i];
|
|
var actualEnabled = actualItems[i + 1];
|
|
var expectedItem = expectedItems[i];
|
|
var expectedEnabled = expectedItems[i + 1];
|
|
if (expectedItem instanceof Array) {
|
|
ok(true, "Checking submenu/menugroup...");
|
|
var previousId = expectedItems[i - 2]; // The last item was the menu ID.
|
|
var previousItem = menu.getElementsByAttribute("id", previousId)[0];
|
|
ok(previousItem, (previousItem ? previousItem.nodeName : "item") + " with previous id (" + previousId + ") found");
|
|
if (previousItem && previousItem.nodeName == "menu") {
|
|
ok(previousItem, "got a submenu element of id='" + previousId + "'");
|
|
is(previousItem.nodeName, "menu", "submenu element of id='" + previousId +
|
|
"' has expected nodeName");
|
|
checkMenu(previousItem.menupopup, expectedItem, data, i);
|
|
} else if (previousItem && previousItem.nodeName == "menugroup") {
|
|
ok(expectedItem.length, "menugroup must not be empty");
|
|
for (var j = 0; j < expectedItem.length / 2; j++) {
|
|
checkMenuItem(actualItems[i][j][0], actualItems[i][j][1], expectedItem[j * 2], expectedItem[j * 2 + 1], i + j * 2);
|
|
}
|
|
i += j;
|
|
} else {
|
|
ok(false, "previous item is not a menu or menugroup");
|
|
}
|
|
} else {
|
|
checkMenuItem(actualItem, actualEnabled, expectedItem, expectedEnabled, i);
|
|
}
|
|
}
|
|
// Could find unexpected extra items at the end...
|
|
is(actualItems.length, expectedItems.length, "checking expected number of menu entries");
|
|
}
|
|
|
|
let lastElementSelector = null;
|
|
/**
|
|
* Right-clicks on the element that matches `selector` and checks the
|
|
* context menu that appears against the `menuItems` array.
|
|
*
|
|
* @param {String} selector
|
|
* A selector passed to querySelector to find
|
|
* the element that will be referenced.
|
|
* @param {Array} menuItems
|
|
* An array of menuitem ids and their associated enabled state. A state
|
|
* of null means that it will be ignored. Ids of '---' are used for
|
|
* menuseparators.
|
|
* @param {Object} options, optional
|
|
* skipFocusChange: don't move focus to the element before test, useful
|
|
* if you want to delay spell-check initialization
|
|
* offsetX: horizontal mouse offset from the top-left corner of
|
|
* the element, optional
|
|
* offsetY: vertical mouse offset from the top-left corner of the
|
|
* element, optional
|
|
* centered: if true, mouse position is centered in element, defaults
|
|
* to true if offsetX and offsetY are not provided
|
|
* waitForSpellCheck: wait until spellcheck is initialized before
|
|
* starting test
|
|
* maybeScreenshotsPresent: if true, the screenshots menu entry is
|
|
* expected to be present in the menu if
|
|
* screenshots is enabled, optional
|
|
* preCheckContextMenuFn: callback to run before opening menu
|
|
* onContextMenuShown: callback to run when the context menu is shown
|
|
* postCheckContextMenuFn: callback to run after opening menu
|
|
* @return {Promise} resolved after the test finishes
|
|
*/
|
|
async function test_contextmenu(selector, menuItems, options = {}) {
|
|
contextMenu = document.getElementById("contentAreaContextMenu");
|
|
is(contextMenu.state, "closed", "checking if popup is closed");
|
|
|
|
// Default to centered if no positioning is defined.
|
|
if (!options.offsetX && !options.offsetY) {
|
|
options.centered = true;
|
|
}
|
|
|
|
if (!options.skipFocusChange) {
|
|
await ContentTask.spawn(gBrowser.selectedBrowser,
|
|
[lastElementSelector, selector],
|
|
async function([contentLastElementSelector, contentSelector]) {
|
|
if (contentLastElementSelector) {
|
|
let contentLastElement = content.document.querySelector(contentLastElementSelector);
|
|
contentLastElement.blur();
|
|
}
|
|
let element = content.document.querySelector(contentSelector);
|
|
element.focus();
|
|
});
|
|
lastElementSelector = selector;
|
|
info(`Moved focus to ${selector}`);
|
|
}
|
|
|
|
if (options.preCheckContextMenuFn) {
|
|
await options.preCheckContextMenuFn();
|
|
info("Completed preCheckContextMenuFn");
|
|
}
|
|
|
|
if (options.waitForSpellCheck) {
|
|
info("Waiting for spell check");
|
|
await ContentTask.spawn(gBrowser.selectedBrowser, selector, async function(contentSelector) {
|
|
let {onSpellCheck} =
|
|
ChromeUtils.import("resource://testing-common/AsyncSpellCheckTestHelper.jsm",
|
|
{});
|
|
let element = content.document.querySelector(contentSelector);
|
|
await new Promise(resolve => onSpellCheck(element, resolve));
|
|
info("Spell check running");
|
|
});
|
|
}
|
|
|
|
let awaitPopupShown = BrowserTestUtils.waitForEvent(contextMenu, "popupshown");
|
|
await BrowserTestUtils.synthesizeMouse(selector, options.offsetX || 0, options.offsetY || 0, {
|
|
type: "contextmenu",
|
|
button: 2,
|
|
shiftkey: options.shiftkey,
|
|
centered: options.centered,
|
|
},
|
|
gBrowser.selectedBrowser);
|
|
await awaitPopupShown;
|
|
info("Popup Shown");
|
|
|
|
if (options.onContextMenuShown) {
|
|
await options.onContextMenuShown();
|
|
info("Completed onContextMenuShown");
|
|
}
|
|
|
|
if (menuItems) {
|
|
if (Services.prefs.getBoolPref("devtools.inspector.enabled", true)) {
|
|
let inspectItems = ["---", null,
|
|
"context-inspect", true];
|
|
menuItems = menuItems.concat(inspectItems);
|
|
}
|
|
|
|
if (Services.prefs.getBoolPref("devtools.accessibility.enabled", true) &&
|
|
Services.appinfo.accessibilityEnabled) {
|
|
let inspectA11YItems = ["context-inspect-a11y", true];
|
|
menuItems = menuItems.concat(inspectA11YItems);
|
|
}
|
|
|
|
if (options.maybeScreenshotsPresent &&
|
|
!Services.prefs.getBoolPref("extensions.screenshots.disabled", false)) {
|
|
let screenshotItems = [
|
|
"---", null,
|
|
"screenshots_mozilla_org_create-screenshot", true,
|
|
];
|
|
|
|
menuItems = menuItems.concat(screenshotItems);
|
|
}
|
|
|
|
checkContextMenu(menuItems);
|
|
}
|
|
|
|
let awaitPopupHidden = BrowserTestUtils.waitForEvent(contextMenu, "popuphidden");
|
|
|
|
if (options.postCheckContextMenuFn) {
|
|
await options.postCheckContextMenuFn();
|
|
info("Completed postCheckContextMenuFn");
|
|
}
|
|
|
|
contextMenu.hidePopup();
|
|
await awaitPopupHidden;
|
|
}
|