43 lines
1.4 KiB
HTML
43 lines
1.4 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Security-Policy" content="img-src https://*;">
|
|
<script>
|
|
async function timeout (cmd) {
|
|
const timer = new Promise((resolve, reject) => {
|
|
const id = setTimeout(() => {
|
|
clearTimeout(id)
|
|
reject(new Error('Promise timed out!'))
|
|
}, 750)
|
|
})
|
|
return Promise.race([cmd, timer])
|
|
}
|
|
|
|
let ourOpener = window.opener;
|
|
|
|
if (location.search.includes("close")) {
|
|
window.close();
|
|
}
|
|
|
|
document.addEventListener('DOMContentLoaded', async () => {
|
|
const frame = document.createElementNS('http://www.w3.org/1999/xhtml', 'frame');
|
|
const image = document.createElementNS('http://www.w3.org/2000/svg', 'image');
|
|
document.documentElement.appendChild(frame)
|
|
image.setAttribute('href', 'a.png')
|
|
for (let i = 0; i < 5; ++i) {
|
|
try { await timeout(image.decode()) } catch (e) {}
|
|
}
|
|
let w = window.open();
|
|
// Need to run SpecialPowers in the newly opened window to avoid
|
|
// .wrap throwing because of dead objects.
|
|
let csp = w.eval("SpecialPowers.wrap(document).cspJSON;");
|
|
ourOpener.postMessage(csp, "*");
|
|
w.close();
|
|
|
|
if (!location.search.includes("close")) {
|
|
window.close();
|
|
}
|
|
})
|
|
</script>
|
|
</head>
|
|
</html>
|