| <!DOCTYPE html> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="utils.js"></script> |
| <script> |
| |
| // This file is loaded twice. First this is loaded as a page to trigger |
| // prerendering and then loaded as a prerendering page. The trigger page |
| // activates the prerendering page. |
| |
| // Runs as the trigger page. This page starts prerendering and waits for signal |
| // from the prerendering page. After the signal, this page starts activation. |
| function runAsTriggerPage() { |
| assert_false(document.prerendering); |
| |
| // Start prerendering. |
| const prerendering_url = location.href + '&prerendering=true'; |
| startPrerendering(prerendering_url); |
| |
| // Activate the prerendering page once it gets ready. |
| const bc = new PrerenderChannel('activation-ready'); |
| bc.onmessage = () => { window.location = prerendering_url }; |
| } |
| |
| // Runs as prerendeirng page. First this page waits for the load event and |
| // signals to the trigger page for starting activation. Then, this page fires |
| // the prerenderingchange event and tests window.open() in the event. |
| function runAsPrerenderingPage() { |
| assert_true(document.prerendering); |
| |
| window.onload = () => { |
| assert_true(document.prerendering); |
| |
| // Notify the trigger page of activation ready. |
| const bc = new PrerenderChannel('activation-ready'); |
| bc.postMessage('ready for activation'); |
| } |
| |
| new PrerenderChannel('close').addEventListener('message', () => { |
| window.close(); |
| }); |
| document.onprerenderingchange = () => { |
| assert_false(document.prerendering); |
| |
| // Attempt to open a window in the prerenderingchange event. |
| const win = window.open('empty.html', '_blank'); |
| |
| // Send the result to the test runner page. |
| const bc = new PrerenderChannel('result'); |
| if (win) { |
| bc.postMessage('opened'); |
| win.close(); |
| } else { |
| bc.postMessage('failed to open'); |
| } |
| }; |
| } |
| |
| if (new URLSearchParams(location.search).has('prerendering')) { |
| runAsPrerenderingPage(); |
| } else { |
| runAsTriggerPage(); |
| } |
| |
| </script> |