Source code
Revision control
Copy as Markdown
Other Tools
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Ensure the event region override flags work properly</title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<script src="/tests/SimpleTest/paint_listener.js"></script>
<script src="helper_fission_utils.js"></script>
<script src="apz_test_utils.js"></script>
<script src="apz_test_native_event_utils.js"></script>
<script>
function getEventPromise(eventName) {
let eventPromise = new Promise(resolve => {
const listener = event => {
if (event.data === eventName) {
dump(`Event Promise, received event: ${event.data}\n`);
window.removeEventListener("message", listener);
resolve();
}
}
window.addEventListener("message", listener);
});
return eventPromise;
}
async function setupIframeListeners(iframe) {
let listenersReady = getEventPromise("listenersReady");
SpecialPowers.spawn(iframe, [], () => {
const { promise, resolve } = Promise.withResolvers();
content.window.addEventListener("wheel", () => {
Assert.ok(false, "Iframe: We should not receive a wheel event");
resolve();
}, { once: true });
content.window.addEventListener("scroll", () => {
Assert.ok(false, "Iframe: We should not receive a scoll event");
resolve();
}, { once: true });
content.window.parent.postMessage("listenersReady", "*");
return promise;
});
await listenersReady;
}
async function test() {
let iframe = document.getElementById("testframe");
await setupCrossOriginIFrame(iframe, "helper_fission_plain.html");
await setupIframeListeners(iframe);
await synthesizeNativeWheel(iframe, 10, 10, 0, -50);
// Advance a bunch of frames. The only goal here is to ensure enough time
// passes so that if the OOPIF does scroll, we find out about it via the
// OOPIF:Scrolled messaging.
// If we don't wait long enough we might end up finishing the test before
// that scroll message gets received here, and so we might wrongly pass the
// test.
await SpecialPowers.promiseTimeout(0);
var utils = SpecialPowers.getDOMWindowUtils(window);
for (var i = 0; i < 5; i++) {
utils.advanceTimeAndRefresh(16);
}
utils.restoreNormalRefresh();
await promiseOnlyApzControllerFlushed();
}
window.onload = async () => {
await SpecialPowers.spawnChrome([], async () => {
this.browsingContext.topChromeWindow.addEventListener(
"wheel",
e => e.preventDefault(),
{ once: true, passive: false }
);
return new Promise(resolve => resolve());
});
await SpecialPowers.executeAfterFlushingMessageQueue();
waitUntilApzStable()
.then(test)
.then(subtestDone, subtestFailed);
};
</script>
</head>
<body>
<iframe id="testframe"></iframe>
</body>
</html>