test_input_untrusted_key_events.html (2448B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>Test for untrusted DOM KeyboardEvent on input element</title> 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <script src="/tests/SimpleTest/EventUtils.js"></script> 7 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 8 </head> 9 <body> 10 <p id="display"></p> 11 <div id="content"> 12 <input id="input"> 13 </div> 14 <pre id="test"> 15 <script type="application/javascript"> 16 17 SimpleTest.waitForExplicitFinish(); 18 SimpleTest.waitForFocus(runNextTest, window); 19 20 const kTests = [ 21 { type: "text", value: "foo", key: "b", expectedNewValue: "foo" }, 22 { type: "number", value: "123", key: "4", expectedNewValue: "123" }, 23 { type: "number", value: "123", key: KeyEvent.DOM_VK_UP, expectedNewValue: "123" }, 24 { type: "number", value: "123", key: KeyEvent.DOM_VK_DOWN, expectedNewValue: "123" }, 25 ]; 26 27 function sendUntrustedKeyEvent(eventType, keyCode, target) { 28 var evt = new KeyboardEvent(eventType, { 29 bubbles: true, 30 cancelable: true, 31 view: document.defaultView, 32 keyCode, 33 charCode: 0, 34 }); 35 target.dispatchEvent(evt); 36 } 37 38 var input = document.getElementById("input"); 39 40 var gotEvents = {}; 41 42 function handleEvent(event) { 43 gotEvents[event.type] = true; 44 } 45 46 input.addEventListener("keydown", handleEvent); 47 input.addEventListener("keyup", handleEvent); 48 input.addEventListener("keypress", handleEvent); 49 50 var previousTest = null; 51 52 function runNextTest() { 53 if (previousTest) { 54 var msg = "For <input " + "type=" + previousTest.type + ">, "; 55 is(gotEvents.keydown, true, msg + "checking got keydown"); 56 is(gotEvents.keyup, true, msg + "checking got keyup"); 57 is(gotEvents.keypress, true, msg + "checking got keypress"); 58 is(input.value, previousTest.expectedNewValue, msg + "checking element " + 59 " after being sent '" + previousTest.key + "' key events"); 60 } 61 62 // reset flags 63 gotEvents.keydown = false; 64 gotEvents.keyup = false; 65 gotEvents.keypress = false; 66 67 68 var test = kTests.shift(); 69 if (!test) { 70 SimpleTest.finish(); 71 return; // We're all done 72 } 73 74 input.type = test.type; 75 input.focus(); // make sure we still have focus after type change 76 input.value = test.value; 77 78 sendUntrustedKeyEvent("keydown", test.key, input); 79 sendUntrustedKeyEvent("keyup", test.key, input); 80 sendUntrustedKeyEvent("keypress", test.key, input); 81 82 previousTest = test; 83 84 SimpleTest.executeSoon(runNextTest); 85 }; 86 87 </script> 88 </pre> 89 </body> 90 </html>