| <!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> |