[tor-commits] [tor-browser/tor-browser-45.1.0esr-6.0-1] Regression tests for Bug 15646: Prevent keyboard layout fingerprinting in KeyboardEvent

gk at torproject.org gk at torproject.org
Tue May 17 14:42:54 UTC 2016


commit de5346adae7452c79820958873cf6eca473f537f
Author: Arthur Edelstein <arthuredelstein at gmail.com>
Date:   Tue Dec 22 12:35:17 2015 -0800

    Regression tests for Bug 15646: Prevent keyboard layout fingerprinting in KeyboardEvent
---
 dom/events/test/mochitest.ini          |   1 +
 dom/events/test/test_tor_bug15646.html | 159 +++++++++++++++++++++++++++++++++
 2 files changed, 160 insertions(+)

diff --git a/dom/events/test/mochitest.ini b/dom/events/test/mochitest.ini
index e23b950..e7fb89c 100644
--- a/dom/events/test/mochitest.ini
+++ b/dom/events/test/mochitest.ini
@@ -192,3 +192,4 @@ support-files =
 [test_bug1013412.html]
 skip-if = buildapp == 'b2g' # no wheel events on b2g
 [test_dom_activate_event.html]
+[test_tor_bug15646.html]
diff --git a/dom/events/test/test_tor_bug15646.html b/dom/events/test/test_tor_bug15646.html
new file mode 100644
index 0000000..463781f
--- /dev/null
+++ b/dom/events/test/test_tor_bug15646.html
@@ -0,0 +1,159 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+https://trac.torproject.org/15646
+-->
+<head>
+  <title>Test for Bug 15646</title>
+  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+  <script type="application/javascript" src="/tests/SimpleTest/SpawnTask.js"></script>
+  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+</head>
+<body>
+<a target="_blank" href="https://trac.torproject.org/15466">Tor Bug 15646</a>
+<p id="display"></p>
+<div id="content" style="display: none">
+
+</div>
+<pre id="test">
+</pre>
+<span id="testTarget" style="border: 1px solid black;">testTarget</span>
+<script type="application/javascript;version=1.7">
+  SimpleTest.waitForExplicitFinish();
+  let miscKeyData = [
+    ["Alt", "AltLeft", 18],
+    ["ArrowDown", "ArrowDown", 40],
+    ["ArrowLeft", "ArrowLeft", 37],
+    ["ArrowRight", "ArrowRight", 39],
+    ["ArrowUp", "ArrowUp", 38],
+    ["Backspace", "Backspace", 8],
+    ["CapsLock", "CapsLock", 20],
+    ["ContextMenu", "ContextMenu", 93],
+    ["Control", "ControlLeft", 17],
+    ["Delete", "Delete", 46],
+    ["End", "End", 35],
+    ["Enter", "Enter", 13],
+    ["Escape", "Escape", 27],
+    ["Help", "Help", 6],
+    ["Home", "Home", 36],
+    ["Insert", "Insert", 45],
+    ["Meta", "OSLeft", 91],
+    ["PageDown", "PageDown", 34],
+    ["PageUp", "PageUp", 33],
+    ["Pause", "Pause", 19],
+    ["PrintScreen", "PrintScreen", 44],
+    ["ScrollLock", "ScrollLock", 145],
+    ["Shift", "ShiftLeft", 16],
+    ["Tab", "Tab", 9],
+    [" ", "Space", 32],
+    [",", "Comma", 188],
+    [".", "Period", 190],
+    ["/", "Slash", 191],
+    [";", "Semicolon", 59],
+    ["'", "Quote", 222],
+    ["[", "BracketLeft", 219],
+    ["]", "BracketRight", 221],
+    ["`", "Backquote", 192],
+    ["\\", "Backslash", 220],
+    ["-", "Minus", 173],
+    ["=", "Equal", 61],
+  ];
+  let uppers = [], lowers = [];
+  for (let i = 65; i < 91; ++i) {
+    let upperChar = String.fromCharCode(i);
+    lowers.push([upperChar.toLowerCase(), "Key" + upperChar, i]);
+    uppers.push([upperChar, "Key" + upperChar, i]);
+  }
+  let fnKeys = [];
+  for (let i = 1; i < 25; ++i) {
+    let keyName = "F" + i,
+        keyCode = i + 111;
+    fnKeys.push([keyName, keyName, keyCode]);
+  }
+  let digits = [];
+  for (let i = 0; i < 10; ++i) {
+    let keyName = "" + i,
+        keyCode = 48 + i;
+    digits.push([keyName, "Digit" + keyName, keyCode]);
+  }
+  let allKeyData = miscKeyData.concat(lowers).concat(fnKeys).concat(digits);
+  let pushPref = function (key, value) {
+    return new Promise(resolve => {
+      SpecialPowers.pushPrefEnv({"set": [[key, value]]}, resolve);
+    });
+  };
+  let miscShiftKeyData = [
+    ["!", "Digit1", 49],
+    ["@", "Digit2", 50],
+    ["#", "Digit3", 51],
+    ["$", "Digit4", 52],
+    ["%", "Digit5", 53],
+    ["^", "Digit6", 54],
+    ["&", "Digit7", 55],
+    ["*", "Digit8", 56],
+    ["(", "Digit9", 57],
+    [")", "Digit0", 48],
+    ["<", "Comma", 188],
+    [">", "Period", 190],
+    ["?", "Slash", 191],
+    [":", "Semicolon", 59],
+    ["\"", "Quote", 222],
+    ["{", "BracketLeft", 219],
+    ["}", "BracketRight", 221],
+    ["~", "Backquote", 192],
+    ["|", "Backslash", 220],
+    ["_", "Minus", 173],
+    ["+", "Equal", 61],
+  ];
+  let allShiftKeyData = miscShiftKeyData.concat(uppers);
+
+  // __dispatchAndListen(target, eventObject)__.
+  // Dispatch the given event to the target object.
+  // Return a promise that resolves to the event when
+  // that event is received by an event listener.
+  let dispatchAndListen = function (target, eventObject) {
+    let eventType = eventObject.type;
+    return new Promise(function (resolve, reject) {
+      let listenFunction = function (event) {
+        target.removeEventListener(eventType, listenFunction);
+        resolve(event);
+      };
+      target.addEventListener(eventType, listenFunction);
+      target.dispatchEvent(eventObject);
+    });
+  };
+
+  // Run tests asynchronously.
+  spawnTask(function* () {
+    for (let keyData of [allKeyData, allShiftKeyData]) {
+      for (let resistFingerprinting of [false, true]) {
+        let expectedShiftKey = keyData === allShiftKeyData && resistFingerprinting;
+        yield pushPref("privacy.resistFingerprinting", resistFingerprinting);
+        for (let [keyName, code, keyCode] of keyData) {
+          let keyboardEvent = new KeyboardEvent("keydown", { key : keyName, altKey : true, location : 2 });
+          let receivedEvent = yield dispatchAndListen(document.body, keyboardEvent);
+          let expectedKeyCode = resistFingerprinting ? keyCode : 0;
+          is(receivedEvent.keyCode, expectedKeyCode,
+             "Event.keyCode should be " + expectedKeyCode);
+          is(receivedEvent.shiftKey, expectedShiftKey,
+             "Event.shiftKey should be " + expectedShiftKey);
+          if (expectedShiftKey) {
+            ok(!receivedEvent.altKey,
+               "Alt should be suppressed for fake shift keys.");
+          }
+          if (resistFingerprinting) {
+            let expectedCode = code;
+            is(receivedEvent.code, expectedCode,
+               "Event.code should be " + expectedCode);
+            ok(receivedEvent.location === 0 || receivedEvent.location === 1,
+               "Event.location should be 0 or 1.");
+          }
+        }
+      }
+    }
+    SimpleTest.finish();
+  });
+
+</script>
+</body>
+</html>



More information about the tor-commits mailing list