Source code

Revision control

Copy as Markdown

Other Tools

<!DOCTYPE html>
<meta charset="utf8">
<script src="shared_test_funcs.js"></script>
<script type="text/javascript">
var popup;
async function runTheTest(iframe_domain, cross_origin_domain) {
let s = `<!DOCTYPE html><html><script>
function give_result() {
const canvas = document.createElement("canvas");
canvas.width = 100;
canvas.height = 100;
const context = canvas.getContext("2d");
context.fillStyle = "#EE2222";
context.fillRect(0, 0, 100, 100);
context.fillStyle = "#2222EE";
context.fillRect(20, 20, 100, 100);
// Add the canvas element to the document
document.body.appendChild(canvas);
const imageData = context.getImageData(0, 0, 100, 100);
return imageData.data;
}
window.addEventListener('load', async function listener(event) {
window.opener.postMessage(["popup_ready"], "*");
});
window.addEventListener('message', async function listener(event) {
if (event.data[0] == 'popup_request') {
window.opener.postMessage(['popup_response', give_result()], '*');
window.close();
}
});`;
// eslint-disable-next-line
s += `</` + `script></html>`;
let params = new URLSearchParams(document.location.search);
let options = "";
if (params.get("submode") == "noopener") {
options = "noopener";
}
let url = "data:text/html;base64," + btoa(s);
popup = window.open(url, "", options);
if (params.get("submode") == "noopener") {
return {};
}
await waitForMessage("popup_ready", `*`);
function give_result() {
const canvas = document.createElement("canvas");
canvas.width = 100;
canvas.height = 100;
const context = canvas.getContext("2d");
context.fillStyle = "#EE2222";
context.fillRect(0, 0, 100, 100);
context.fillStyle = "#2222EE";
context.fillRect(20, 20, 100, 100);
// Add the canvas element to the document
document.body.appendChild(canvas);
const imageData = context.getImageData(0, 0, 100, 100);
return imageData.data;
}
let myResult = give_result();
const promiseForRFPTest = new Promise(resolve => {
window.addEventListener("message", event => {
resolve({mine: myResult, theirs: event.data[1]});
}, { once: true });
});
popup.postMessage(["popup_request", cross_origin_domain], "*");
var result = await promiseForRFPTest;
popup.close();
return result;
}
</script>
<body>
<output id="result"></output>
</body>