prerender-while-prerender.https.html (1763B)
1 <!DOCTYPE html> 2 <meta name="timeout" content="long"> 3 <script src="/resources/testharness.js"></script> 4 <script src="/resources/testharnessreport.js"></script> 5 <script src="/common/utils.js"></script> 6 <script src="/common/dispatcher/dispatcher.js"></script> 7 <script src="/html/browsers/browsing-the-web/remote-context-helper/resources/remote-context-helper.js"></script> 8 <script src="../resources/utils.js"></script> 9 <script src="resources/utils.js"></script> 10 11 <body> 12 <script> 13 setup(() => assertSpeculationRulesIsSupported()); 14 15 // We attempted to write this test using `RemoteContextHelper`. See 16 // https://github.com/web-platform-tests/wpt/blob/23ed0c7015082f21dd29dd09a545e2979dc3e08c/speculation-rules/prerender/prerender-while-prerender.html. 17 // 18 // However, that ended up being flaky in Chromium. See 19 // https://bugs.chromium.org/p/chromium/issues/detail?id=1517319. 20 // 21 // We're unsure yet if that flakiness was due to a test bug or an implementation 22 // bug. In case it is due to a test bug, we are currently trying the following 23 // uglier `PrerenderChannel` version. If it is still flaky, then probably it is 24 // an implementation bug, and we can revert to the prettier 25 // `RemoteContextHelper` version. 26 27 promise_test(async t => { 28 const uid = token(); 29 const channel = new PrerenderChannel("result", uid); 30 const result = new Promise(r => channel.addEventListener("message", e => r(e.data))); 31 32 window.open( 33 `resources/prerender-while-prerender-initiator.html?uid=${uid}`, 34 "_blank", 35 "noopener" 36 ); 37 38 assert_equals( 39 await result, 40 false, 41 "document.prerendering in the inner page must be false" 42 ); 43 44 channel.close(); 45 }, "Prerendering inside a prerender doesn't work, and navigating inside prerenderingchange is fine"); 46 </script>