Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
/* Any copyright is dedicated to the Public Domain.
"use strict";
const lazy = {};
ChromeUtils.defineESModuleGetters(lazy, {
AddonManager: "resource://gre/modules/AddonManager.sys.mjs",
});
function get_content_area_corner_radius() {
let style = getComputedStyle(gBrowser.getBrowserContainer());
return Math.max(
...[
style.borderTopLeftRadius,
style.borderTopRightRadius,
style.borderBottomLeftRadius,
style.borderBottomRightRadius,
].map(radius => parseFloat(radius) || 0)
);
}
async function assert_opaque_region() {
// Ensure we've painted.
await new Promise(r => requestAnimationFrame(() => requestAnimationFrame(r)));
let contentRect = document
.getElementById("tabbrowser-tabbox")
.getBoundingClientRect();
// Add 1 to the corner radius to account for device-pixel snapping.
let inset = get_content_area_corner_radius() + 1;
let expectedRect = {
left: contentRect.left + inset,
top: contentRect.top + inset,
right: contentRect.right - inset,
bottom: contentRect.bottom - inset,
};
let opaqueRegion = window.windowUtils.getWidgetOpaqueRegion();
info(`Got opaque region: ${JSON.stringify(opaqueRegion)}`);
info(`Expected to contain: ${JSON.stringify(expectedRect)}`);
isnot(opaqueRegion.length, 0, "Should have some part of the window opaque");
let containsExpectedRect = opaqueRect => {
return (
opaqueRect.left <= expectedRect.left &&
opaqueRect.top <= expectedRect.top &&
opaqueRect.right >= expectedRect.right &&
opaqueRect.bottom >= expectedRect.bottom
);
};
ok(
opaqueRegion.some(containsExpectedRect),
"The browser area should be considered opaque by widget"
);
}
registerCleanupFunction(async function () {
let defaultTheme = await lazy.AddonManager.getAddonByID(
"default-theme@mozilla.org"
);
await defaultTheme.enable();
});
add_task(async function assert_opaque_region_system_theme() {
return assert_opaque_region();
});
add_task(async function assert_opaque_region_mica() {
await SpecialPowers.pushPrefEnv({ set: [["widget.windows.mica", true]] });
return assert_opaque_region();
});
add_task(async function assert_opaque_region_light_theme() {
let lightTheme = await lazy.AddonManager.getAddonByID(
"firefox-compact-light@mozilla.org"
);
await lightTheme.enable();
return assert_opaque_region();
});
add_task(async function assert_opaque_region_dark_theme() {
let lightTheme = await lazy.AddonManager.getAddonByID(
"firefox-compact-dark@mozilla.org"
);
await lightTheme.enable();
return assert_opaque_region();
});