94 lines
2.9 KiB
JavaScript
94 lines
2.9 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"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,
|
|
url: useRemote ? "https://example.com" : "about:about",
|
|
},
|
|
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);
|
|
});
|