93 lines
2.5 KiB
JavaScript
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");
|
|
});
|