mirror of
https://github.com/servo/servo.git
synced 2025-06-25 17:44:33 +01:00
86 lines
2.4 KiB
HTML
86 lines
2.4 KiB
HTML
<!DOCTYPE html>
|
|
<meta charset="utf-8" />
|
|
<title>Recursive IFrame Fullscreen API success reporter</title>
|
|
<body>
|
|
<script src="/resources/testdriver.js"></script>
|
|
<script src="/resources/testdriver-vendor.js"></script>
|
|
<script src="../../trusted-click.js"></script>
|
|
<script>
|
|
let child_frame = null;
|
|
const events = [];
|
|
|
|
document.onfullscreenchange = () => {
|
|
events.push("fullscreenchange");
|
|
};
|
|
|
|
document.onfullscreenerror = () => {
|
|
events.push("fullscreenerror");
|
|
};
|
|
|
|
function send_report() {
|
|
window.top.postMessage(
|
|
{
|
|
name: window.name,
|
|
action: "report",
|
|
report: {
|
|
api: "fullscreen",
|
|
frame: window.name,
|
|
fullscreenElementIsNull: document.fullscreenElement === null,
|
|
events,
|
|
},
|
|
},
|
|
"*"
|
|
);
|
|
}
|
|
|
|
async function create_child_frame({ src, name, allow_fullscreen }) {
|
|
child_frame = document.createElement("iframe");
|
|
child_frame.allow = allow_fullscreen ? "fullscreen" : "";
|
|
child_frame.name = name;
|
|
child_frame.style.width = "100%";
|
|
child_frame.style.height = "100%";
|
|
document.body.appendChild(child_frame);
|
|
await new Promise((resolve) => {
|
|
child_frame.addEventListener("load", resolve, { once: true });
|
|
child_frame.src = src;
|
|
});
|
|
window.top.postMessage({ action: "load", name }, "*");
|
|
}
|
|
|
|
async function go_fullscreen() {
|
|
await trusted_click(document.body);
|
|
let error;
|
|
try {
|
|
await document.body.requestFullscreen();
|
|
} catch (err) {
|
|
error = err.name;
|
|
} finally {
|
|
window.top.postMessage(
|
|
{ action: "requestFullscreen", name: window.name, error },
|
|
"*"
|
|
);
|
|
}
|
|
}
|
|
|
|
window.addEventListener("message", async (e) => {
|
|
// Massage is not for us, try to pass it on...
|
|
if (e.data.name !== window.name) {
|
|
child_frame?.contentWindow.postMessage(e.data, "*");
|
|
return;
|
|
}
|
|
switch (e.data.action) {
|
|
case "requestReport":
|
|
send_report();
|
|
break;
|
|
case "requestFullscreen":
|
|
await go_fullscreen();
|
|
break;
|
|
case "addIframe":
|
|
await create_child_frame(e.data.iframe);
|
|
break;
|
|
default:
|
|
window.top.postMessage(e.data, "*");
|
|
}
|
|
});
|
|
</script>
|
|
</body>
|