tenfourfox/dom/html/test/file_fullscreen-api-keys.html
Cameron Kaiser c9b2922b70 hello FPR
2017-04-19 00:56:45 -07:00

130 lines
3.3 KiB
HTML

<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=545812
Test that restricted key pressed drop documents out of DOM full-screen mode.
-->
<head>
<title>Test for Bug 545812</title>
<script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
<script type="application/javascript" src="file_fullscreen-utils.js"></script>
<style>
body {
background-color: black;
}
</style>
</head>
<body>
<script type="application/javascript">
/** Test for Bug 545812 **/
// List of key codes which should exit full-screen mode.
var keyList = [
{ code: "VK_ESCAPE", suppressed: true},
{ code: "VK_F11", suppressed: false},
];
function ok(condition, msg) {
opener.ok(condition, "[keys] " + msg);
}
function is(a, b, msg) {
opener.is(a, b, "[keys] " + msg);
}
var gKeyTestIndex = 0;
var gKeyName;
var gKeyCode;
var gKeySuppressed;
var gKeyReceived = false;
function keyHandler(event) {
gKeyReceived = true;
}
function checkKeyEffect() {
is(gKeySuppressed, !gKeyReceived, "Should not receive key events for " + gKeyName);
is(document.mozFullScreen, false, "Should exit full-screen mode for " + gKeyName + " press");
if (gKeyTestIndex < keyList.length) {
setTimeout(testNextKey, 0);
} else {
opener.nextTest();
}
}
function testTrustedKeyEvents() {
document.body.focus();
gKeyReceived = false;
addFullscreenChangeContinuation("exit", checkKeyEffect);
synthesizeKey(gKeyName, {});
}
function testScriptInitiatedKeyEvents() {
// Script initiated untrusted key events should not cause full-screen exit.
document.body.focus();
gKeyReceived = false;
var evt = document.createEvent("KeyEvents");
evt.initKeyEvent("keydown", true, true, window,
false, false, false, false,
gKeyCode, 0);
document.body.dispatchEvent(evt);
evt = document.createEvent("KeyEvents");
evt.initKeyEvent("keypress", true, true, window,
false, false, false, false,
gKeyCode, 0);
document.body.dispatchEvent(evt);
evt = document.createEvent("KeyEvents");
evt.initKeyEvent("keyup", true, true, window,
false, false, false, false,
gKeyCode, 0);
document.body.dispatchEvent(evt);
ok(gKeyReceived, "dispatchEvent should dispatch events synchronously");
ok(document.mozFullScreen,
"Should remain in full-screen mode for script initiated key events for " + gKeyName);
}
function testNextKey() {
if (!document.mozFullScreen) {
// Async request fullscreen to avoid the request be accidentally
// cancelled due to unfinished clean-up of exiting fullscreen.
setTimeout(() => {
addFullscreenChangeContinuation("enter", reallyTestNextKey);
document.body.mozRequestFullScreen();
}, 0);
}
else {
reallyTestNextKey();
}
}
function reallyTestNextKey() {
ok(document.mozFullScreen, "Must be in full-screen mode");
gKeyName = keyList[gKeyTestIndex].code;
gKeyCode = KeyEvent["DOM_" + gKeyName];
gKeySuppressed = keyList[gKeyTestIndex].suppressed;
gKeyTestIndex++;
testScriptInitiatedKeyEvents();
testTrustedKeyEvents();
}
window.addEventListener("keydown", keyHandler, true);
window.addEventListener("keyup", keyHandler, true);
window.addEventListener("keypress", keyHandler, true);
function begin() {
testNextKey();
}
</script>
</pre>
</body>
</html>