forked from mirrors/gecko-dev
We need it to live in BrowsingContext instead of WindowContext, because we need to preserve the zoom level across same-origin navigation. It'd be nice if it only lived in the top BC, but that's not possible at the moment because a lot of tests rely on zooming only iframes. Some of them can be adjusted for scaling the top instead, but not sure it's worth it's worth fixing them and moving the zoom to be top-only, as it'd be a bunch of effort, and the complexity and overhead of propagating the zoom is not so big. The print-preview-specific code in nsContentViewer is from before we did the document cloning setup, and it seems useless. I've tested print preview scaling before and after my patch and both behave the same. The rest is just various test changes to use the SpecialPowers APIs or BrowsingContext as needed instead of directly poking at the content viewer. I named the pres context hook RecomputeBrowsingContextDependentData, as more stuff should move there like overrideDPPX and other media emulation shenanigans. I also have some ideas to simplify or even remove ZoomChild and such, but that's followup work. Differential Revision: https://phabricator.services.mozilla.com/D71969
89 lines
2.4 KiB
JavaScript
89 lines
2.4 KiB
JavaScript
"use strict";
|
|
|
|
const ZOOM_CHANGE_TOPIC = "browser-fullZoom:location-change";
|
|
|
|
/**
|
|
* Helper to check the zoom level of the preloaded browser
|
|
*/
|
|
async function checkPreloadedZoom(level, message) {
|
|
// Clear up any previous preloaded to test a fresh version
|
|
NewTabPagePreloading.removePreloadedBrowser(window);
|
|
NewTabPagePreloading.maybeCreatePreloadedBrowser(window);
|
|
|
|
// Wait for zoom handling of preloaded
|
|
const browser = gBrowser.preloadedBrowser;
|
|
await new Promise(resolve =>
|
|
Services.obs.addObserver(function obs(subject) {
|
|
if (subject === browser) {
|
|
Services.obs.removeObserver(obs, ZOOM_CHANGE_TOPIC);
|
|
resolve();
|
|
}
|
|
}, ZOOM_CHANGE_TOPIC)
|
|
);
|
|
|
|
is(browser.fullZoom.toFixed(2), level, message);
|
|
|
|
// Clean up for other tests
|
|
NewTabPagePreloading.removePreloadedBrowser(window);
|
|
}
|
|
|
|
add_task(async function test_default_zoom() {
|
|
await checkPreloadedZoom(1, "default preloaded zoom is 1");
|
|
});
|
|
|
|
/**
|
|
* Helper to open about:newtab and zoom then check matching preloaded zoom
|
|
*/
|
|
async function zoomNewTab(changeZoom, message) {
|
|
const tab = await BrowserTestUtils.openNewForegroundTab(
|
|
gBrowser,
|
|
"about:newtab"
|
|
);
|
|
changeZoom();
|
|
const level = tab.linkedBrowser.fullZoom.toFixed(2);
|
|
BrowserTestUtils.removeTab(tab);
|
|
|
|
// Wait for the the update of the full-zoom content pref value, that happens
|
|
// asynchronously after changing the zoom level.
|
|
let cps2 = Cc["@mozilla.org/content-pref/service;1"].getService(
|
|
Ci.nsIContentPrefService2
|
|
);
|
|
|
|
await BrowserTestUtils.waitForCondition(() => {
|
|
return new Promise(resolve => {
|
|
cps2.getByDomainAndName(
|
|
"about:newtab",
|
|
"browser.content.full-zoom",
|
|
null,
|
|
{
|
|
handleResult(pref) {
|
|
resolve(level == pref.value);
|
|
},
|
|
handleCompletion() {
|
|
console.log("handleCompletion");
|
|
},
|
|
}
|
|
);
|
|
});
|
|
});
|
|
|
|
await checkPreloadedZoom(level, `${message}: ${level}`);
|
|
}
|
|
|
|
add_task(async function test_preloaded_zoom_out() {
|
|
await zoomNewTab(() => FullZoom.reduce(), "zoomed out applied to preloaded");
|
|
});
|
|
|
|
add_task(async function test_preloaded_zoom_in() {
|
|
await zoomNewTab(() => {
|
|
FullZoom.enlarge();
|
|
FullZoom.enlarge();
|
|
}, "zoomed in applied to preloaded");
|
|
});
|
|
|
|
add_task(async function test_preloaded_zoom_default() {
|
|
await zoomNewTab(
|
|
() => FullZoom.reduce(),
|
|
"zoomed back to default applied to preloaded"
|
|
);
|
|
});
|