Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
/**
*
* We make sure that passing devicePixelRatio (as dppx) to min-resolution and
* max-resolution matches.
*
* We also make sure that the devicePixelRatios matches the non-rfp values.
*/
const DPRs = {};
let tab;
add_setup(async () => {
// We spoof the devicePixelRatio to 2 in RFP.
await SpecialPowers.pushPrefEnv({
set: [["layout.css.devPixelsPerPx", 2]],
});
const emptyPage =
getRootDirectory(gTestPath).replace(
) + "empty.html";
tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, emptyPage);
for (let auPerPx = 120; auPerPx > 0; auPerPx--) {
const zoom = 60 / auPerPx;
DPRs[zoom] = await SpecialPowers.spawn(
tab.linkedBrowser,
[zoom],
zoomLevel => {
const { Layout } = ChromeUtils.importESModule(
);
Layout.zoomDocument(content.document, zoomLevel);
// Workaround: content.devicePixelRatio has the unspoofed value.
return content.wrappedJSObject.devicePixelRatio;
}
);
}
await SpecialPowers.popPrefEnv();
});
async function runForZoomLevel(zoom) {
const [dpr, matchMin, matchMax] = await SpecialPowers.spawn(
tab.linkedBrowser,
[zoom],
zoomLevel => {
const { Layout } = ChromeUtils.importESModule(
);
Layout.zoomDocument(content.document, zoomLevel);
// Workaround: content.devicePixelRatio has the unspoofed value.
const dpr = content.wrappedJSObject.devicePixelRatio;
return [
dpr,
content.matchMedia(`(min-resolution: ${dpr}dppx)`).matches,
content.matchMedia(`(max-resolution: ${dpr}dppx)`).matches,
];
}
);
is(DPRs[zoom], dpr, `devicePixelRatio is ${dpr} for zoom ${zoom}`);
is(matchMin, true, `min-resolution matches DPR for zoom ${zoom}`);
is(matchMax, true, `max-resolution matches DPR for zoom ${zoom}`);
}
add_task(async () => {
await SpecialPowers.pushPrefEnv({
set: [["privacy.resistFingerprinting", true]],
});
for (let auPerPx = 120; auPerPx > 0; auPerPx--) {
await runForZoomLevel(60 / auPerPx);
}
// Run the test again with a different textScaleFactor.
// This is to make sure that the devicePixelRatio is not affected by
// the textScaleFactor.
await SpecialPowers.pushPrefEnv({
set: [["ui.textScaleFactor", 200]],
});
for (let auPerPx = 120; auPerPx > 0; auPerPx--) {
await runForZoomLevel(60 / auPerPx);
}
BrowserTestUtils.removeTab(tab);
});