| <!DOCTYPE html> |
| <!-- |
| The html/js to help testing keyboard events. It |
| - receives keybord events and preventDefault(), |
| - writes the key codes to /html/body/div[@id='container'], |
| - sends the key codes to window.domAutomationController once KeyX is received. |
| --> |
| <html> |
| <head> |
| <title>Fullscreen Keyboard Lock Test</title> |
| <script> |
| let x_pressed = false; |
| let report_called = false; |
| |
| function processResult() { |
| if (x_pressed && report_called) { |
| window.domAutomationController.send(container().innerHTML); |
| } |
| } |
| |
| function getKeyEventReport() { |
| report_called = true; |
| processResult(); |
| } |
| |
| function isMacOSFullscreenShortcut(e) { |
| return e.metaKey && |
| e.ctrlKey && |
| !e.altKey && |
| !e.shiftKey && |
| e.code == "KeyF"; |
| } |
| |
| function isF11FullscreenShortcut(e) { |
| return !e.metaKey && |
| !e.ctrlKey && |
| !e.altKey && |
| !e.shiftKey && |
| e.code == "F11"; |
| } |
| |
| function isBrowserFullscreenShortcut(e) { |
| return isMacOSFullscreenShortcut(e) || |
| isF11FullscreenShortcut(e); |
| } |
| |
| function container() { |
| return document.getElementById('container'); |
| } |
| |
| function consumeEvent(type, e) { |
| if (type == 'keydown' && |
| !e.code.startsWith("Control") && |
| !e.code.startsWith("Shift") && |
| !e.code.startsWith("Alt") && |
| !e.code.startsWith("Meta")) { |
| container().innerHTML += |
| e.code + |
| ' ctrl:' + e.getModifierState('Control') + |
| ' shift:' + e.getModifierState('Shift') + |
| ' alt:' + e.getModifierState('Alt') + |
| ' meta:' + e.getModifierState('Meta') + '\n'; |
| } |
| e.preventDefault(); |
| } |
| |
| function init() { |
| document.addEventListener('keydown', (e) => { |
| // The web content triggers fullscreen on the "S" key down event. |
| if (e.code == 'KeyS') { |
| container().webkitRequestFullscreen(); |
| } else if (isBrowserFullscreenShortcut(e)) { |
| // Web page can consume fullscreen shortcut when the page is in |
| // window mode, but it's not expected in test cases. |
| return; |
| } |
| consumeEvent('keydown', e); |
| }); |
| |
| document.addEventListener('keyup', (e) => { |
| if (isBrowserFullscreenShortcut(e)) { |
| return; |
| } |
| consumeEvent('keyup', e); |
| |
| if (e.code == 'KeyX') { |
| x_pressed = true; |
| processResult(); |
| } |
| }); |
| |
| document.addEventListener('keypress', (e) => { |
| consumeEvent('keypress', e); |
| }); |
| } |
| </script> |
| </head> |
| <body onload='init()'> |
| <div id='container'> |
| </div> |
| </body> |
| </html> |