| <html><head> |
| <meta http-equiv="content-type" content="text/html; charset=utf-8"> |
| <script type="text/javascript"> |
| var defaultActions = { |
| 'keydown': true, |
| 'keypress': true, |
| 'keyup': true, |
| 'textInput': true, |
| }; |
| var keyEventResult = []; |
| var focusedElement = ""; |
| var lastFocusedElement = ""; |
| var testStarted = false; |
| var expectedEventCount = 0; |
| var eventCount = 0; |
| var keyDownCount = 0; |
| var keyUpCount = 0; |
| |
| function init() { |
| document.addEventListener("keydown", handleEvent, false); |
| document.addEventListener("keypress", handleEvent, false); |
| document.addEventListener("keyup", handleEvent, false); |
| document.addEventListener("textInput", handleEvent, false); |
| window.addEventListener("blur", handleWindowBlur, false); |
| } |
| |
| function log(text) { |
| document.getElementById('log').innerHTML += text + '<br/>'; |
| } |
| |
| function setDefaultAction(type, value) { |
| defaultActions[type] = value; |
| document.getElementById(type).checked = !value; |
| return defaultActions[type]; |
| } |
| |
| function startTest(count) { |
| if (!testStarted) { |
| clearResult(); |
| testStarted = true; |
| expectedEventCount = count; |
| log("Start test."); |
| return true; |
| } |
| return false; |
| } |
| |
| function finishTest() { |
| testStarted = false; |
| window.domAutomationController.send("FINISHED"); |
| log("Finish test."); |
| } |
| |
| function handleEvent(e) { |
| var prefixes = { |
| 'keydown': 'D', |
| 'keypress': 'P', |
| 'keyup': 'U', |
| 'textInput': 'T', |
| }; |
| |
| var evt = e || window.event; |
| var result = prefixes[evt.type] + ' '; |
| if (evt.type == 'textInput') { |
| result += evt.data; |
| } else { |
| // On Linux, the keydown event of a modifier key doesn't have the |
| // corresponding modifier attribute set, while the keyup event does have, |
| // eg. pressing and releasing ctrl may generate a keydown event with |
| // ctrlKey=false and a keyup event with ctrlKey=true. |
| // But Windows and Mac have opposite behavior than Linux. |
| // To make the C++ testing code simpler, if it's a modifier key event, |
| // then ignores the corresponding modifier attribute by setting it to true. |
| var keyId = evt.key; |
| result += (evt.keyCode + ' ' + evt.charCode + ' ' + |
| (keyId == 'Control' ? true : evt.ctrlKey) + ' ' + |
| (keyId == 'Shift' ? true : evt.shiftKey) + ' ' + |
| (keyId == 'Alt' ? true : evt.altKey) + ' ' + |
| (keyId == 'Meta' ? true : evt.metaKey)); |
| } |
| keyEventResult.push(result); |
| log(result); |
| |
| if (testStarted) { |
| ++eventCount; |
| if (evt.type == "keydown") { |
| ++keyDownCount; |
| } else if (evt.type == "keyup") { |
| ++keyUpCount; |
| if (keyDownCount == keyUpCount || (eventCount >= expectedEventCount)) |
| finishTest(); |
| } |
| } |
| |
| if (!defaultActions[evt.type]) { |
| if (evt.preventDefault) evt.preventDefault(); |
| if (evt.stopPropagation) evt.stopPropagation(); |
| } |
| return defaultActions[evt.type]; |
| } |
| |
| function handleWindowBlur() { |
| if (testStarted) |
| finishTest(); |
| } |
| |
| function clearResult() { |
| keyEventResult = []; |
| testStarted = false; |
| expectedEventCount = 0; |
| eventCount = 0; |
| keyDownCount = 0; |
| keyUpCount = 0; |
| document.getElementById('log').innerHTML = ""; |
| return true; |
| } |
| |
| function setFocusedElement(id) { |
| if (id == "" && focusedElement != "") { |
| var elem = document.getElementById(focusedElement); |
| if (elem) { |
| elem.blur(); |
| return true; |
| } |
| } else { |
| var elem = document.getElementById(id); |
| if (elem) { |
| elem.focus(); |
| return true; |
| } |
| } |
| return false; |
| } |
| |
| function onFocus(element) { |
| focusedElement = element.id; |
| log("Focus: " + focusedElement); |
| } |
| |
| function onBlur(element) { |
| focusedElement = ""; |
| lastFocusedElement = element.id; |
| log("Blur: " + element.id); |
| } |
| |
| function onClick(element) { |
| if (defaultActions[element.id] != undefined) |
| defaultActions[element.id] = !element.checked; |
| } |
| </script> |
| </head> |
| <body onload="init()"> |
| <input type="checkbox" id="keydown" onclick="onClick(this)">keydown</input> |
| <input type="checkbox" id="keypress" onclick="onClick(this)">keypress</input> |
| <input type="checkbox" id="keyup" onclick="onClick(this)">keyup</input> |
| <input type="checkbox" id="textInput" onclick="onClick(this)">textInput</input> |
| <br/> |
| <input type="checkbox" id="1" accesskey='1' |
| onfocus="onFocus(this)" onblur="onBlur(this)"/> |
| <input type="checkbox" id="2" accesskey='2' |
| onfocus="onFocus(this)" onblur="onBlur(this)"/> |
| <input type="checkbox" id="3" accesskey='3' |
| onfocus="onFocus(this)" onblur="onBlur(this)"/> |
| <input type="checkbox" id="D" accesskey='D' |
| onfocus="onFocus(this)" onblur="onBlur(this)"/> |
| <input type="text" id="A" accesskey="A" |
| onfocus="onFocus(this)" onblur="onBlur(this)"/> |
| <input type="password" id="B" accesskey="B" |
| onfocus="onFocus(this)" onblur="onBlur(this)"/> |
| <button id="clear" accesskey='C' onclick="clearResult()">Clear</button> |
| <p id="log"></p> |
| </body> |
| </html> |