57 lines
1.9 KiB
HTML
57 lines
1.9 KiB
HTML
<!doctype html>
|
|
|
|
<title>iframe added post activation: initiator and prerendered page</title>
|
|
<script src="/common/get-host-info.sub.js"></script>
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script src="utils.js"></script>
|
|
<body>
|
|
<script>
|
|
|
|
// When loaded without the "?prerendering" param, this document is called the
|
|
// "intiator page". It starts a prerender to the same URL, but with the
|
|
// "?prerendering" param.
|
|
//
|
|
// When loaded with the "?prerendering" param, this document is the "prerendered
|
|
// page". It tells the initiator page when it is ready to activate, and messages
|
|
// the main test page when it is finished.
|
|
|
|
// main() runs the logic of the prerendered page.
|
|
//
|
|
// On activation, adds an iframe and tests its document.prerendering state.
|
|
async function main() {
|
|
const activated = new Promise((resolve, reject) => {
|
|
document.addEventListener('prerenderingchange', (e) => {
|
|
const iframe = document.createElement('iframe');
|
|
document.body.appendChild(iframe);
|
|
resolve(iframe.contentDocument.prerendering)
|
|
});
|
|
});
|
|
|
|
// Ask to activate.
|
|
const prerenderChannel = new PrerenderChannel('prerender-channel');
|
|
prerenderChannel.postMessage('readyToActivate');
|
|
|
|
// Check that document.prerendering is false in the iframe.
|
|
const iframePrerendering = await activated;
|
|
assert_true(iframePrerendering === false,
|
|
'document.prerendering in iframe should be false');
|
|
}
|
|
|
|
// See comment at the top of this file.
|
|
const params = new URLSearchParams(location.search);
|
|
const isPrerendering = params.has('prerendering');
|
|
if (!isPrerendering) {
|
|
loadInitiatorPage();
|
|
} else {
|
|
// For the prerendering page, run main() then message the test page with the
|
|
// result.
|
|
const testChannel = new PrerenderChannel('test-channel');
|
|
main().then(() => {
|
|
testChannel.postMessage('PASS');
|
|
}).catch((e) => {
|
|
testChannel.postMessage('FAIL: ' + e);
|
|
});
|
|
}
|
|
</script>
|
|
</body>
|