Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
<html>
<head>
<title>Context menu tests</title>
<link rel="stylesheet" type="text/css"
<script type="application/javascript"
src="../common.js"></script>
<script type="application/javascript"
src="../role.js"></script>
<script type="application/javascript"
src="../states.js"></script>
<script type="application/javascript"
src="../promisified-events.js"></script>
<script type="application/javascript">
function getContextMenuNode() {
return getRootAccessible().DOMDocument.
getElementById("contentAreaContextMenu");
}
function getFocusedMenuItem() {
const menu = getAccessible(getAccessible(getContextMenuNode()));
for (let idx = 0; idx < menu.childCount; idx++) {
const item = menu.getChildAt(idx);
if (hasState(item, STATE_FOCUSED))
return getAccessible(item);
}
return null;
}
// //////////////////////////////////////////////////////////////////////////
// Do tests
// gA11yEventDumpID = "eventdump"; // debug stuff
// gA11yEventDumpToConsole = true;
async function doTests() {
let menuStarted = waitForEvent(
EVENT_MENUPOPUP_START,
getContextMenuNode()
);
synthesizeMouse(getNode("input"), 4, 4, {
type: "contextmenu",
button: 2,
});
await menuStarted;
let focused = waitForEvent(EVENT_FOCUS, e => {
let item = getFocusedMenuItem();
return item && e.accessible == item;
});
synthesizeKey("KEY_ArrowDown");
await focused;
let menuEnded = waitForEvent(
EVENT_MENUPOPUP_END,
getAccessible(getContextMenuNode())
);
synthesizeKey("KEY_Escape");
await menuEnded;
SimpleTest.finish();
}
const {AppConstants} = ChromeUtils.importESModule(
"resource://gre/modules/AppConstants.sys.mjs"
);
if (
AppConstants.platform == "macosx" &&
Services.prefs.getBoolPref("widget.macos.native-context-menus", false)
) {
ok(true, "Native context menus handle accessibility notifications natively and cannot be tested with synthesized key events.");
} else {
SimpleTest.waitForExplicitFinish();
addA11yLoadEvent(doTests);
}
</script>
</head>
<body>
<a target="_blank"
title="Broken accessibility in context menus">
</a><br>
<p id="display"></p>
<div id="content" style="display: none"></div>
<pre id="test">
</pre>
<input id="input">
<div id="eventdump"></div>
</body>
</html>