Commit 60d1a7bf authored by Arthur Edelstein's avatar Arthur Edelstein Committed by Georg Koppen
Browse files

Bug 10286: Regression tests for Touch API fingerprinting resistance

Also, fix typo in EventUtils.js
parent 7046dcee
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -185,3 +185,4 @@ skip-if = toolkit == 'android' #CRASH_DUMP, RANDOM
[test_wheel_default_action.html]
[test_bug687787.html]
[test_bug1298970.html]
[test_touchevent_resist_fingerprinting.html]
+68 −0
Original line number Diff line number Diff line
<!DOCTYPE HTML>
<html>
<!--
https://trac.torproject.org/10286
-->
  <head>
    <meta charset="utf-8">
    <title>Test for Tor Bug 10286</title>
    <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
    <script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
    <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
  </head>
  <body>
    <div id="target0">target0</div>
    <script type="application/javascript">
     SimpleTest.waitForExplicitFinish();

     let promiseEvent = (target, eventName) => {
       return new Promise(resolve => {
         target.addEventListener(eventName, function eventOccurred(event) {
           target.removeEventListener(eventName, eventOccurred, false);
           resolve(event);
         }, false);
       });
     }

     let promiseTouchEvent = (target, type, offsetX, offsetY, params) => {
       let touchEventPromise = promiseEvent(target, type);
       params.type = type;
       synthesizeTouch(target, offsetX, offsetY, params);
       return touchEventPromise;
     };

     let target0 = document.getElementById("target0");
     let touchParams = { force: 1.0, angle: 1.0, rx: 2, ry: 3 };

     let runTest = async () => {
       await SpecialPowers.pushPrefEnv(
         { set: [["dom.w3c_touch_events.enabled", 1]] });
       for (let resist of [false, true]) {
         await SpecialPowers.pushPrefEnv(
           { set: [["privacy.resistFingerprinting", resist]] });
         info("starting test with fingerprinting resistance " +
              (resist ? "on" : "off"));
         let touchEvent = await promiseTouchEvent(target0, "touchstart",
                                                  5, 5, touchParams);
         info("touch event received");
         let touch = touchEvent.touches[0];
         if (resist) {
           is(touch.screenX, touch.clientX,
              "touch.screenX should be the same as touch.clientX");
           is(touch.screenY, touch.clientY,
              "touch.screenY should be the same as touch.clientY");
         }
         is(touch.force, resist ? 0.0 : touchParams.force, "touch.force");
         is(touch.radiusX, resist ? 1 : touchParams.rx, "touch.radiusX");
         is(touch.radiusY, resist ? 1 : touchParams.ry, "touch.radiusY");
         is(touch.rotationAngle, resist ? 0 : touchParams.angle,
            "touch.rotationAngle");
       }
     }

     window.onload = () => {
       runTest().then(() => SimpleTest.finish());
     };
    </script>
  </body>
</html>
+1 −1
Original line number Diff line number Diff line
@@ -395,7 +395,7 @@ function synthesizeTouchAtPoint(left, top, aEvent, aWindow = window)
  if (utils) {
    var id = aEvent.id || 0;
    var rx = aEvent.rx || 1;
    var ry = aEvent.rx || 1;
    var ry = aEvent.ry || 1;
    var angle = aEvent.angle || 0;
    var force = aEvent.force || 1;
    var modifiers = _parseModifiers(aEvent, aWindow);