summaryrefslogtreecommitdiffstats
path: root/dom/events/test/bug418986-3.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/events/test/bug418986-3.js')
-rw-r--r--dom/events/test/bug418986-3.js85
1 files changed, 85 insertions, 0 deletions
diff --git a/dom/events/test/bug418986-3.js b/dom/events/test/bug418986-3.js
new file mode 100644
index 0000000000..81d04b9b22
--- /dev/null
+++ b/dom/events/test/bug418986-3.js
@@ -0,0 +1,85 @@
+SimpleTest.waitForExplicitFinish();
+
+// The main testing function.
+var test = async function (isContent) {
+ await SpecialPowers.contentTransformsReceived(window);
+
+ // Each definition is [eventType, prefSetting]
+ // Where we are setting the "privacy.resistFingerprinting" pref.
+ let eventDefs = [
+ ["mousedown", true],
+ ["mouseup", true],
+ ["mousedown", false],
+ ["mouseup", false],
+ ];
+
+ let testCounter = 0;
+
+ // Declare ahead of time.
+ let setup;
+
+ // This function is called when the event handler fires.
+ let handleEvent = function (event, prefVal) {
+ let resisting = prefVal && isContent;
+ if (resisting) {
+ is(
+ event.screenX,
+ event.clientX,
+ "event.screenX and event.clientX should be the same"
+ );
+ is(
+ event.screenY,
+ event.clientY,
+ "event.screenY and event.clientY should be the same"
+ );
+ } else {
+ // We can't be sure about X coordinates not being equal, but we can test Y.
+ isnot(event.screenY, event.clientY, "event.screenY !== event.clientY");
+ }
+ ++testCounter;
+ if (testCounter < eventDefs.length) {
+ nextTest();
+ } else {
+ SimpleTest.finish();
+ }
+ };
+
+ // In this function, we set up the nth div and event handler,
+ // and then synthesize a mouse event in the div, to test
+ // whether the resulting events resist fingerprinting by
+ // suppressing absolute screen coordinates.
+ nextTest = function () {
+ let [eventType, prefVal] = eventDefs[testCounter];
+ SpecialPowers.pushPrefEnv(
+ { set: [["privacy.resistFingerprinting", prefVal]] },
+ function () {
+ // The following code creates a new div for each event in eventDefs,
+ // attaches a listener to listen for the event, and then generates
+ // a fake event at the center of the div.
+ let div = document.createElementNS(
+ "http://www.w3.org/1999/xhtml",
+ "div"
+ );
+ div.style.width = "10px";
+ div.style.height = "10px";
+ div.style.backgroundColor = "red";
+ // Name the div after the event we're listening for.
+ div.id = eventType;
+ document.getElementById("body").appendChild(div);
+ // Seems we can't add an event listener in chrome unless we run
+ // it in a later task.
+ window.setTimeout(function () {
+ div.addEventListener(eventType, event => handleEvent(event, prefVal));
+ // For some reason, the following synthesizeMouseAtCenter call only seems to run if we
+ // wrap it in a window.setTimeout(..., 0).
+ window.setTimeout(function () {
+ synthesizeMouseAtCenter(div, { type: eventType });
+ }, 0);
+ }, 0);
+ }
+ );
+ };
+
+ // Now run by starting with the 0th event.
+ nextTest();
+};