mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
264 lines
10 KiB
XML
264 lines
10 KiB
XML
<?xml version="1.0"?>
|
|
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
|
<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
|
|
<!--
|
|
Test that "MozShowFullScreenWarning" is dispatched to chrome on restricted keypress.
|
|
-->
|
|
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" onload="start();">
|
|
|
|
<script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js"></script>
|
|
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
|
|
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
<script type="application/javascript"><![CDATA[
|
|
|
|
// List of key codes, and whether they should cause a warning in full-screen mode.
|
|
var keyList = [
|
|
// Allowed: DOM_VK_CANCEL to DOM_VK_CAPS_LOCK, inclusive
|
|
{ code: "VK_CANCEL", warn: true},
|
|
{ code: "VK_HELP", warn: true},
|
|
{ code: "VK_BACK_SPACE", warn: true},
|
|
{ code: "VK_TAB", warn: false},
|
|
{ code: "VK_CLEAR", warn: true},
|
|
{ code: "VK_RETURN", warn: true},
|
|
{ code: "VK_ENTER", warn: true},
|
|
{ code: "VK_SHIFT", warn: false},
|
|
{ code: "VK_CONTROL", warn: false},
|
|
{ code: "VK_ALT", warn: false},
|
|
{ code: "VK_PAUSE", warn: true},
|
|
{ code: "VK_CAPS_LOCK", warn: true},
|
|
{ code: "VK_KANA", warn: true},
|
|
{ code: "VK_HANGUL", warn: true},
|
|
{ code: "VK_JUNJA", warn: true},
|
|
{ code: "VK_FINAL", warn: true},
|
|
{ code: "VK_HANJA", warn: true},
|
|
{ code: "VK_KANJI", warn: true},
|
|
{ code: "VK_ESCAPE", warn: false, exit: true},
|
|
{ code: "VK_CONVERT", warn: true},
|
|
{ code: "VK_NONCONVERT", warn: true},
|
|
{ code: "VK_ACCEPT", warn: true},
|
|
{ code: "VK_MODECHANGE", warn: true},
|
|
{ code: "VK_SPACE", warn: false},
|
|
{ code: "VK_PAGE_UP", warn: false},
|
|
{ code: "VK_PAGE_DOWN", warn: false},
|
|
{ code: "VK_END", warn: false},
|
|
{ code: "VK_HOME", warn: false},
|
|
{ code: "VK_LEFT", warn: false},
|
|
{ code: "VK_UP", warn: false},
|
|
{ code: "VK_RIGHT", warn: false},
|
|
{ code: "VK_DOWN", warn: false},
|
|
{ code: "VK_SELECT", warn: true},
|
|
{ code: "VK_PRINT", warn: true},
|
|
{ code: "VK_EXECUTE", warn: true},
|
|
{ code: "VK_PRINTSCREEN", warn: true},
|
|
{ code: "VK_INSERT", warn: true},
|
|
{ code: "VK_DELETE", warn: true},
|
|
{ code: "VK_0", warn: true},
|
|
{ code: "VK_1", warn: true},
|
|
{ code: "VK_2", warn: true},
|
|
{ code: "VK_3", warn: true},
|
|
{ code: "VK_4", warn: true},
|
|
{ code: "VK_5", warn: true},
|
|
{ code: "VK_6", warn: true},
|
|
{ code: "VK_7", warn: true},
|
|
{ code: "VK_8", warn: true},
|
|
{ code: "VK_9", warn: true},
|
|
{ code: "VK_SEMICOLON", warn: true},
|
|
{ code: "VK_EQUALS", warn: true},
|
|
{ code: "VK_A", warn: true},
|
|
{ code: "VK_B", warn: true},
|
|
{ code: "VK_C", warn: true},
|
|
{ code: "VK_D", warn: true},
|
|
{ code: "VK_E", warn: true},
|
|
{ code: "VK_F", warn: true},
|
|
{ code: "VK_G", warn: true},
|
|
{ code: "VK_H", warn: true},
|
|
{ code: "VK_I", warn: true},
|
|
{ code: "VK_J", warn: true},
|
|
{ code: "VK_K", warn: true},
|
|
{ code: "VK_L", warn: true},
|
|
{ code: "VK_M", warn: true},
|
|
{ code: "VK_N", warn: true},
|
|
{ code: "VK_O", warn: true},
|
|
{ code: "VK_P", warn: true},
|
|
{ code: "VK_Q", warn: true},
|
|
{ code: "VK_R", warn: true},
|
|
{ code: "VK_S", warn: true},
|
|
{ code: "VK_T", warn: true},
|
|
{ code: "VK_U", warn: true},
|
|
{ code: "VK_V", warn: true},
|
|
{ code: "VK_W", warn: true},
|
|
{ code: "VK_X", warn: true},
|
|
{ code: "VK_Y", warn: true},
|
|
{ code: "VK_Z", warn: true},
|
|
{ code: "VK_CONTEXT_MENU", warn: true},
|
|
{ code: "VK_SLEEP", warn: true},
|
|
{ code: "VK_NUMPAD0", warn: true},
|
|
{ code: "VK_NUMPAD1", warn: true},
|
|
{ code: "VK_NUMPAD2", warn: true},
|
|
{ code: "VK_NUMPAD3", warn: true},
|
|
{ code: "VK_NUMPAD4", warn: true},
|
|
{ code: "VK_NUMPAD5", warn: true},
|
|
{ code: "VK_NUMPAD6", warn: true},
|
|
{ code: "VK_NUMPAD7", warn: true},
|
|
{ code: "VK_NUMPAD8", warn: true},
|
|
{ code: "VK_NUMPAD9", warn: true},
|
|
{ code: "VK_MULTIPLY", warn: true},
|
|
{ code: "VK_ADD", warn: true},
|
|
{ code: "VK_SEPARATOR", warn: true},
|
|
{ code: "VK_SUBTRACT", warn: true},
|
|
{ code: "VK_DECIMAL", warn: true},
|
|
{ code: "VK_DIVIDE", warn: true},
|
|
{ code: "VK_F1", warn: true},
|
|
{ code: "VK_F2", warn: true},
|
|
{ code: "VK_F3", warn: true},
|
|
{ code: "VK_F4", warn: true},
|
|
{ code: "VK_F5", warn: true},
|
|
{ code: "VK_F6", warn: true},
|
|
{ code: "VK_F7", warn: true},
|
|
{ code: "VK_F8", warn: true},
|
|
{ code: "VK_F9", warn: true},
|
|
{ code: "VK_F10", warn: true},
|
|
{ code: "VK_F11", warn: true}, // F11 exit full-screen handler is in browser.js, so won't cause exit here.
|
|
{ code: "VK_F12", warn: true},
|
|
{ code: "VK_F13", warn: true},
|
|
{ code: "VK_F14", warn: true},
|
|
{ code: "VK_F15", warn: true},
|
|
{ code: "VK_F16", warn: true},
|
|
{ code: "VK_F17", warn: true},
|
|
{ code: "VK_F18", warn: true},
|
|
{ code: "VK_F19", warn: true},
|
|
{ code: "VK_F20", warn: true},
|
|
{ code: "VK_F21", warn: true},
|
|
{ code: "VK_F22", warn: true},
|
|
{ code: "VK_F23", warn: true},
|
|
{ code: "VK_F24", warn: true},
|
|
{ code: "VK_NUM_LOCK", warn: true},
|
|
{ code: "VK_SCROLL_LOCK", warn: true},
|
|
{ code: "VK_COMMA", warn: true},
|
|
{ code: "VK_PERIOD", warn: true},
|
|
{ code: "VK_SLASH", warn: true},
|
|
{ code: "VK_BACK_QUOTE", warn: true},
|
|
{ code: "VK_OPEN_BRACKET", warn: true},
|
|
{ code: "VK_BACK_SLASH", warn: true},
|
|
{ code: "VK_CLOSE_BRACKET", warn: true},
|
|
{ code: "VK_QUOTE", warn: true},
|
|
{ code: "VK_META", warn: false},
|
|
];
|
|
|
|
function ok(condition, msg) {
|
|
window.opener.wrappedJSObject.ok(condition, msg);
|
|
}
|
|
|
|
function is(a, b, msg) {
|
|
window.opener.wrappedJSObject.is(a, b, msg);
|
|
}
|
|
|
|
var gKeyTestIndex = 0;
|
|
var gKeyName;
|
|
var gKeyCode;
|
|
var gWarningEventReceived = false;
|
|
var gExpectWarning;
|
|
var gExpectExit;
|
|
var gBrowser;
|
|
|
|
function checkKeyEffect() {
|
|
is(gBrowser.contentDocument.mozFullScreen, !gExpectExit,
|
|
(gExpectExit ? ("Should exit full-screen for " + gKeyName + " press ")
|
|
: ("Should remain in full-screen for " + gKeyName + " press")));
|
|
is(gWarningEventReceived, gExpectWarning, "Should " + (gExpectWarning ? "" : "not ") +
|
|
"receive MozShowFullScreenWarning for " + gKeyName + " press");
|
|
if (gKeyTestIndex < keyList.length) {
|
|
setTimeout(startNextTest, 0);
|
|
} else {
|
|
gBrowser.contentDocument.mozCancelFullScreen();
|
|
window.opener.wrappedJSObject.done();
|
|
}
|
|
}
|
|
|
|
function testTrustedKeyEvents() {
|
|
gBrowser.contentWindow.focus();
|
|
gWarningEventReceived = false;
|
|
synthesizeKey(gKeyName, {});
|
|
setTimeout(checkKeyEffect, 0);
|
|
}
|
|
|
|
function testScriptInitiatedKeyEvents() {
|
|
// Script initiated untrusted key events should not cause the warning to show.
|
|
gBrowser.contentWindow.focus();
|
|
gWarningEventReceived = false;
|
|
var evt = gBrowser.contentDocument.createEvent("KeyEvents");
|
|
evt.initKeyEvent("keydown", true, true, window,
|
|
false, false, false, false,
|
|
gKeyCode, 0);
|
|
gBrowser.contentDocument.body.dispatchEvent(evt);
|
|
|
|
evt = gBrowser.contentDocument.createEvent("KeyEvents");
|
|
evt.initKeyEvent("keypress", true, true, window,
|
|
false, false, false, false,
|
|
gKeyCode, 0);
|
|
gBrowser.contentDocument.body.dispatchEvent(evt);
|
|
|
|
evt = gBrowser.contentDocument.createEvent("KeyEvents");
|
|
evt.initKeyEvent("keyup", true, true, window,
|
|
false, false, false, false,
|
|
gKeyCode, 0);
|
|
gBrowser.contentDocument.body.dispatchEvent(evt);
|
|
|
|
setTimeout(checkScriptInitiatedEvents, 0);
|
|
}
|
|
|
|
function checkScriptInitiatedEvents() {
|
|
is(gWarningEventReceived, false, "Should not receive MozShowFullScreenWarning on synthesized key events.");
|
|
ok(gBrowser.contentDocument.mozFullScreen,
|
|
"Should remain in full-screen mode for script initiated key events for " + gKeyName);
|
|
testTrustedKeyEvents();
|
|
}
|
|
|
|
function testNextKey() {
|
|
ok(gBrowser.contentDocument.mozFullScreen, "Must be in full-screen mode");
|
|
|
|
gKeyName = keyList[gKeyTestIndex].code;
|
|
gKeyCode = KeyEvent["DOM_" + gKeyName];
|
|
gExpectWarning = keyList[gKeyTestIndex].warn;
|
|
gExpectExit = (keyList[gKeyTestIndex].exit != undefined) ?
|
|
keyList[gKeyTestIndex].exit : false;
|
|
gKeyTestIndex++;
|
|
|
|
testScriptInitiatedKeyEvents();
|
|
}
|
|
|
|
function startNextTest() {
|
|
if (!gBrowser.contentDocument.mozFullScreen) {
|
|
gBrowser.contentDocument.body.mozRequestFullScreen();
|
|
}
|
|
// mozRequestFullScreen is async...
|
|
setTimeout(testNextKey, 0);
|
|
}
|
|
|
|
function keyHandler(event) {
|
|
event.preventDefault();
|
|
}
|
|
|
|
window.addEventListener("MozShowFullScreenWarning", function(){ gWarningEventReceived = true; }, true);
|
|
|
|
window.addEventListener("keydown", keyHandler, true);
|
|
window.addEventListener("keyup", keyHandler, true);
|
|
window.addEventListener("keypress", keyHandler, true);
|
|
|
|
function start() {
|
|
SimpleTest.waitForFocus(
|
|
function() {
|
|
gBrowser = document.getElementById("browser");
|
|
gBrowser.contentWindow.focus();
|
|
gBrowser.contentDocument.body.mozRequestFullScreen();
|
|
setTimeout(startNextTest, 0);
|
|
});
|
|
}
|
|
|
|
]]>
|
|
</script>
|
|
|
|
<browser type="content" id="browser" width="400" height="400"/>
|
|
|
|
</window>
|