cancel-prerendering-after-clear-site-data-cache-different-origins.https.html (1813B)
1 <!DOCTYPE html> 2 <title>clear-site-data-cache cancels prerenders</title> 3 <meta name="timeout" content="long"> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <script src="/common/utils.js"></script> 7 <script src="/common/get-host-info.sub.js"></script> 8 <script src="/common/dispatcher/dispatcher.js"></script> 9 <script src="/html/browsers/browsing-the-web/remote-context-helper/resources/remote-context-helper.js"></script> 10 <script src="../resources/utils.js"></script> 11 <script src="resources/utils.js"></script> 12 <script> 13 setup(() => assertSpeculationRulesIsSupported()); 14 15 promise_test(async t => { 16 17 const rcHelper = new PrerenderingRemoteContextHelper(); 18 const referrerRC = await rcHelper.addWindow({ 19 origin: 'HTTPS_ORIGIN' 20 }, { 21 features: 'noopener' 22 }); 23 const prerenderedRC = await referrerRC.addPrerender({ 24 origin: 'HTTPS_REMOTE_ORIGIN', 25 headers: [ 26 ['Supports-Loading-Mode', 'credentialed-prerender'] 27 ] 28 }); 29 30 const differentOrigin = get_host_info().HTTPS_REMOTE_ORIGIN; 31 32 // Open new window with different origin to clear cache data through 33 // Clear-Site-Data header. 34 // Ensure that the cache is cleared before the navigation. 35 const gotMessage = new Promise(resolve => { 36 window.addEventListener('message', e => { 37 resolve(e.data); 38 }, { 39 once: true 40 }); 41 }); 42 window.open(differentOrigin + "/../../clear-site-data/support/clear-site-data-prerenderCache.py"); 43 await gotMessage; 44 45 // Because Clear-Site-Data response header is sent on a different origin than 46 // the initiator origin, the existing prerender is not expected to be 47 // canceled. 48 // And the prerender is expected to be activated. 49 await referrerRC.navigateExpectingPrerenderingActivation(prerenderedRC); 50 }); 51 </script>