1
0
Fork 0
firefox/layout/base/tests/browser_test_oopif_reconstruct.js
Daniel Baumann 5e9a113729
Adding upstream version 140.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-25 09:37:52 +02:00

93 lines
2.5 KiB
JavaScript

/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set sts=2 sw=2 et tw=80: */
/* This test is based on
https://searchfox.org/mozilla-central/rev/25d26b0a62cc5bb4aa3bb90a11f3b0b7c52859c4/gfx/layers/apz/test/mochitest/browser_test_position_sticky.js
*/
"use strict";
requestLongerTimeout(2);
Services.scriptloader.loadSubScript(
"chrome://mochitests/content/browser/gfx/layers/apz/test/mochitest/apz_test_utils.js",
this
);
Services.scriptloader.loadSubScript(
"chrome://mochitests/content/browser/gfx/layers/apz/test/mochitest/apz_test_native_event_utils.js",
this
);
async function runOneTest(filename) {
function httpURL(sfilename) {
let chromeURL = getRootDirectory(gTestPath) + sfilename;
return chromeURL.replace(
"chrome://mochitests/content/",
"http://mochi.test:8888/"
);
}
const url = httpURL(filename);
const tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url);
const { rect } = await SpecialPowers.spawn(
tab.linkedBrowser,
[],
async () => {
const container = content.document.getElementById("container");
// Get the area in the screen coords where the position:sticky element is.
let containerRect = container.getBoundingClientRect();
containerRect.x += content.window.mozInnerScreenX;
containerRect.y += content.window.mozInnerScreenY;
await content.wrappedJSObject.promiseApzFlushedRepaints();
await content.wrappedJSObject.waitUntilApzStable();
let w = {},
h = {};
SpecialPowers.DOMWindowUtils.getScrollbarSizes(
content.document.documentElement,
w,
h
);
// Reduce the scrollbar width from the sticky area.
containerRect.width -= w.value;
return {
rect: containerRect,
};
}
);
const reference = await getSnapshot({
x: rect.x,
y: rect.y,
width: rect.width,
height: rect.height,
});
await SpecialPowers.spawn(tab.linkedBrowser, [], async () => {
// start the toggling the position on a setInterval which triggers the bug
content.wrappedJSObject.doTest();
});
// have to try many times to capture the bug
for (let i = 0; i < 100; i++) {
let snapshot = await getSnapshot({
x: rect.x,
y: rect.y,
width: rect.width,
height: rect.height,
});
is(snapshot, reference, "should be same " + filename);
}
BrowserTestUtils.removeTab(tab);
}
add_task(async () => {
await runOneTest("helper_oopif_reconstruct.html");
await runOneTest("helper_oopif_reconstruct_nested.html");
});