зеркало из https://github.com/mozilla/gecko-dev.git
89 строки
2.6 KiB
JavaScript
89 строки
2.6 KiB
JavaScript
/* globals chromeWindow */
|
|
// The main test function.
|
|
var test = function(isContent) {
|
|
SimpleTest.waitForExplicitFinish();
|
|
|
|
SpecialPowers.pushPrefEnv({
|
|
set: [["security.allow_eval_with_system_principal", true]],
|
|
});
|
|
|
|
if (!isContent) {
|
|
let { ww } = SpecialPowers.Services;
|
|
window.chromeWindow = ww.activeWindow;
|
|
}
|
|
|
|
// The pairs of values expected to be the same when
|
|
// fingerprinting resistance is enabled.
|
|
let pairs = [
|
|
["screenX", 0],
|
|
["screenY", 0],
|
|
["mozInnerScreenX", 0],
|
|
["mozInnerScreenY", 0],
|
|
["screen.pixelDepth", 24],
|
|
["screen.colorDepth", 24],
|
|
["screen.availWidth", "innerWidth"],
|
|
["screen.availHeight", "innerHeight"],
|
|
["screen.left", 0],
|
|
["screen.top", 0],
|
|
["screen.availLeft", 0],
|
|
["screen.availTop", 0],
|
|
["screen.width", "innerWidth"],
|
|
["screen.height", "innerHeight"],
|
|
["screen.orientation.type", "'landscape-primary'"],
|
|
["screen.orientation.angle", 0],
|
|
["screen.mozOrientation", "'landscape-primary'"],
|
|
["devicePixelRatio", 1],
|
|
];
|
|
|
|
// checkPair: tests if members of pair [a, b] are equal when evaluated.
|
|
let checkPair = function(a, b) {
|
|
// eslint-disable-next-line no-eval
|
|
is(eval(a), eval(b), a + " should be equal to " + b);
|
|
};
|
|
|
|
// Returns generator object that iterates through pref values.
|
|
let prefVals = (function*() {
|
|
yield false;
|
|
yield true;
|
|
})();
|
|
|
|
// The main test function, runs until all pref values are exhausted.
|
|
let nextTest = function() {
|
|
let { value: prefValue, done } = prefVals.next();
|
|
if (done) {
|
|
SimpleTest.finish();
|
|
return;
|
|
}
|
|
SpecialPowers.pushPrefEnv(
|
|
{ set: [["privacy.resistFingerprinting", prefValue]] },
|
|
function() {
|
|
// We will be resisting fingerprinting if the pref is enabled,
|
|
// and we are in a content script (not chrome).
|
|
let resisting = prefValue && isContent;
|
|
// Check each of the pairs.
|
|
pairs.map(function([item, onVal]) {
|
|
if (resisting) {
|
|
checkPair("window." + item, onVal);
|
|
} else if (!isContent && !item.startsWith("moz")) {
|
|
checkPair("window." + item, "chromeWindow." + item);
|
|
}
|
|
});
|
|
if (!isContent && !resisting) {
|
|
// Hard to predict these values, but we can enforce constraints:
|
|
ok(
|
|
window.mozInnerScreenX >= chromeWindow.mozInnerScreenX,
|
|
"mozInnerScreenX"
|
|
);
|
|
ok(
|
|
window.mozInnerScreenY >= chromeWindow.mozInnerScreenY,
|
|
"mozInnerScreenY"
|
|
);
|
|
}
|
|
nextTest();
|
|
}
|
|
);
|
|
};
|
|
|
|
nextTest();
|
|
};
|