tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>