mirror of
https://github.com/servo/servo
synced 2026-05-15 11:26:50 +02:00
79 lines
2.3 KiB
HTML
79 lines
2.3 KiB
HTML
<!DOCTYPE html>
|
|
<meta charset="utf-8">
|
|
<title>Recursive IFrame Fullscreen API success reporter</title>
|
|
<body>
|
|
<script>
|
|
let child_frame = null;
|
|
let fullscreen_events = [];
|
|
document.onfullscreenchange = () => { fullscreen_events.push(true); };
|
|
document.onfullscreenerror = () => { fullscreen_events.push(false); };
|
|
|
|
function send_report() {
|
|
window.top.postMessage({"action": "report", "report": {
|
|
"api": "fullscreen",
|
|
"events": fullscreen_events,
|
|
"frame": window.name,
|
|
"fullscreenElementIsNull": document.fullscreenElement === null
|
|
}}, "*");
|
|
};
|
|
|
|
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%";
|
|
child_frame.src = src;
|
|
document.body.appendChild(child_frame);
|
|
}
|
|
|
|
function trusted_click(callback, container)
|
|
{
|
|
let document = container.ownerDocument;
|
|
let button = document.createElement("button");
|
|
button.textContent = "click to continue test";
|
|
button.style.display = "block";
|
|
button.style.fontSize = "20px";
|
|
button.style.padding = "10px";
|
|
button.onclick = function() {
|
|
callback();
|
|
container.removeChild(button);
|
|
};
|
|
container.insertBefore(button, container.firstChild);
|
|
}
|
|
|
|
function go_fullscreen() {
|
|
trusted_click(() => {
|
|
document.body.requestFullscreen().then(() => {
|
|
window.top.postMessage({"action": "ready"}, "*");
|
|
});
|
|
}, document.body);
|
|
}
|
|
|
|
window.addEventListener('message', e => {
|
|
switch (e.data.action) {
|
|
case "requestReport":
|
|
send_report();
|
|
// If we have children tell them to report as well.
|
|
if (child_frame) { child_frame.contentWindow.postMessage(e.data, "*"); }
|
|
break;
|
|
case "requestFullscreen":
|
|
if (e.data.fullscreen.name == window.name) {
|
|
go_fullscreen(e.data);
|
|
} else if (child_frame) { child_frame.contentWindow.postMessage(e.data, "*"); }
|
|
break;
|
|
case "addIframe":
|
|
if (child_frame) {
|
|
child_frame.contentWindow.postMessage(e.data, "*");
|
|
} else {
|
|
create_child_frame(e.data.iframe);
|
|
}
|
|
break;
|
|
}
|
|
});
|
|
|
|
window.onload = function () {
|
|
window.top.postMessage({"action": "ready"}, "*")
|
|
}
|
|
</script>
|