cross-origin-iframe.https.html (2012B)
1 <!DOCTYPE html> 2 <!-- 3 Tests for cross-origin iframes `document.prerendering` state. 4 5 This file cannot be upstreamed to WPT until: 6 * The specification describes the loading of cross-origin iframes. The test 7 expects that they are not loaded during prerendering. 8 --> 9 <title>Load a cross-origin document in a prerendered iframe</title> 10 <meta name="variant" content="?target_hint=_self"> 11 <meta name="variant" content="?target_hint=_blank"> 12 <meta name="timeout" content="long"> 13 <script src="/resources/testharness.js"></script> 14 <script src="/resources/testharnessreport.js"></script> 15 <script src="/common/get-host-info.sub.js"></script> 16 <script src="/common/utils.js"></script> 17 <script src="../resources/utils.js"></script> 18 <script src="resources/utils.js"></script> 19 20 <body> 21 <script> 22 setup(() => assertSpeculationRulesIsSupported()); 23 24 promise_test(async t => { 25 const uid = token(); 26 const bc = new PrerenderChannel('test-channel', uid); 27 28 const gotMessage = new Promise(resolve => { 29 bc.addEventListener('message', e => { 30 resolve(e.data); 31 }, { 32 once: true 33 }); 34 }); 35 const url = `resources/cross-origin-iframe.html?uid=${uid}&target_hint=${getTargetHint()}`; 36 window.open(url, '_blank', 'noopener'); 37 38 const result = await gotMessage; 39 const expected = [ 40 { 41 event: 'started waiting iframe loaded', 42 prerendering: true 43 }, 44 { 45 event: 'prerendering change', 46 prerendering: false 47 }, 48 { 49 event: 'finished waiting iframe loaded', 50 prerendering: false 51 }, 52 ]; 53 assert_equals(result.length, expected.length); 54 for (let i = 0; i < result.length; i++) { 55 assert_equals(result[i].event, expected[i].event, `event[${i}]`); 56 assert_equals(result[i].prerendering, expected[i].prerendering, 57 `prerendering[${i}]`); 58 } 59 bc.close(); 60 61 // Send a close signal to PrerenderEventCollector on the prerendered page. 62 new PrerenderChannel('close', uid).postMessage(''); 63 }, `cross-origin iframes should not load until activation`); 64 </script>