<!DOCTYPE html>
<title>Test Context Menu Key, Shift+F10 behavior when preventing default</title>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<a href="#" id="anchor">Anchor</a>
<script>
test(function() {
assert_not_equals(window.eventSender, undefined, 'This test requires eventSender.');
var contextMenuFired = false;
var preventKeydown = false;
var preventKeyup = false;
var anchor = document.getElementById('anchor');
anchor.addEventListener('contextmenu', () => contextMenuFired = true);
anchor.addEventListener('keydown', event => preventKeydown ? event.preventDefault() : true);
anchor.addEventListener('keyup', event => preventKeyup ? event.preventDefault() : true);
function testContextMenuEvent(key, modifiers, shouldFire, shouldPreventKeydown, shouldPreventKeyup) {
contextMenuFired = false;
preventKeydown = shouldPreventKeydown;
preventKeyup = shouldPreventKeyup;
anchor.focus();
eventSender.keyDown(key, modifiers);
// Esc key to hide context menu
eventSender.keyDown("Escape");
assert_equals(contextMenuFired, shouldFire, `${key}+${modifiers} opens Context Menu:${shouldFire} PreventKeydown:${shouldPreventKeydown} PreventKeyup:${shouldPreventKeyup}.`);
}
// Shift+F10 should always bind to keydown.
testContextMenuEvent('F10', ['shiftKey'], true, false, false);
testContextMenuEvent('F10', ['shiftKey'], false, true, false);
testContextMenuEvent('F10', ['shiftKey'], true, false, true);
// ContextMenu key should bind to keyup on Windows and keydown on other platforms.
testContextMenuEvent('ContextMenu', [], true, false, false);
const isWin = navigator.platform.indexOf('Win') == 0;
if (isWin) {
testContextMenuEvent('ContextMenu', [], true, true, false);
testContextMenuEvent('ContextMenu', [], false, false, true);
} else {
testContextMenuEvent('ContextMenu', [], false, true, false);
testContextMenuEvent('ContextMenu', [], true, false, true);
}
}, 'Shift+F10 should bind to keydown, ContextMenu key should bind to keyup only on Windows.');
</script>