Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
/* Any copyright is dedicated to the Public Domain.
"use strict";
const { PageThumbUtils } = ChromeUtils.importESModule(
"resource://gre/modules/PageThumbUtils.sys.mjs"
);
/**
* Returns the width & height of the content area for a given browser
*
* @param browser the browser to get dimensions for
*/
async function getContentDimensions(browser) {
let thumbnailsActor =
browser.browsingContext.currentWindowGlobal.getActor("Thumbnails");
let contentInfo = await thumbnailsActor.sendQuery(
"Browser:Thumbnail:ContentInfo"
);
return [contentInfo.width, contentInfo.height];
}
/**
* Verify that preserveAspectRatio generates a sized canvas
* that matches the window's aspect ratio
*
* @param windowWidth width of the browser window
* @param windowHeight height of the browser window
* @param useRemote Whether to use a remote or local browser (these use different PageThumbs APIs)
* @param win the window to test
*/
async function testPreserveAspectRatio(
windowWidth,
windowHeight,
useRemote,
win
) {
let resizeComplete = BrowserTestUtils.waitForEvent(win, "resize");
win.resizeTo(windowWidth, windowHeight);
await resizeComplete;
await BrowserTestUtils.withNewTab(
{
gBrowser: win.gBrowser,
},
async browser => {
let canvas = PageThumbUtils.createCanvas(win);
let [, defaultThumbnailHeight] = PageThumbUtils.getThumbnailSize(win);
await PageThumbs.captureToCanvas(browser, canvas, {
targetWidth: 300,
preserveAspectRatio: false,
});
Assert.equal(
canvas.height,
defaultThumbnailHeight,
"canvas uses default thumbnail height"
);
await PageThumbs.captureToCanvas(browser, canvas, {
targetWidth: 300,
preserveAspectRatio: true,
});
let [contentWidth, contentHeight] = await getContentDimensions(browser);
let aspectRatio = contentWidth / contentHeight;
let expectedHeight = canvas.width / aspectRatio;
// Calculation may be off by a pixel here and there due to floating point math;
// assume it's correct if error is within 1%
let deviation = Math.abs(expectedHeight - canvas.height) / expectedHeight;
Assert.ok(deviation < 0.01, "canvas height within 1% of expected height");
}
);
}
/**
* Tests PageThumbs' preserveAspectRatio option for a variety
* of window aspect ratios.
*/
add_task(async function thumbnails_preserveAspectRatio() {
let win = await BrowserTestUtils.openNewBrowserWindow();
await testPreserveAspectRatio(600, 900, true, win);
await testPreserveAspectRatio(900, 600, true, win);
await testPreserveAspectRatio(450, 1000, true, win);
await testPreserveAspectRatio(600, 900, false, win);
await testPreserveAspectRatio(900, 600, false, win);
await testPreserveAspectRatio(450, 1000, false, win);
await BrowserTestUtils.closeWindow(win);
});