commit 00d2bfb5067659c352690c06cb85a8b76bc7addb Author: Arthur Edelstein arthuredelstein@gmail.com Date: Wed Apr 26 08:57:21 2017 -0700
Bug 10286: Regression tests for Touch API fingerprinting resistance
Also, fix typo in EventUtils.js --- dom/events/test/mochitest.ini | 1 + .../test_touchevent_resist_fingerprinting.html | 68 ++++++++++++++++++++++ testing/mochitest/tests/SimpleTest/EventUtils.js | 2 +- 3 files changed, 70 insertions(+), 1 deletion(-)
diff --git a/dom/events/test/mochitest.ini b/dom/events/test/mochitest.ini index 4322a7b..92e68f3 100644 --- a/dom/events/test/mochitest.ini +++ b/dom/events/test/mochitest.ini @@ -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] diff --git a/dom/events/test/test_touchevent_resist_fingerprinting.html b/dom/events/test/test_touchevent_resist_fingerprinting.html new file mode 100644 index 0000000..8ba7925 --- /dev/null +++ b/dom/events/test/test_touchevent_resist_fingerprinting.html @@ -0,0 +1,68 @@ +<!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> diff --git a/testing/mochitest/tests/SimpleTest/EventUtils.js b/testing/mochitest/tests/SimpleTest/EventUtils.js index a0df2d5..c36a480 100644 --- a/testing/mochitest/tests/SimpleTest/EventUtils.js +++ b/testing/mochitest/tests/SimpleTest/EventUtils.js @@ -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);