cancel-prerendering-after-clear-site-data-cache-same-origin.https.html (2973B)
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_ORIGIN' 25 }); 26 27 const sameOrigin = get_host_info().HTTPS_ORIGIN; 28 29 // Open new window with url to clear cache data through Clear-Site-Data header. 30 // Ensure that the cache is cleared before the navigation. 31 const gotMessage = new Promise(resolve => { 32 window.addEventListener('message', e => { 33 resolve(e.data); 34 }, { 35 once: true 36 }); 37 }); 38 window.open(sameOrigin + "/../../clear-site-data/support/clear-site-data-prerenderCache.py"); 39 await gotMessage; 40 41 // Because Clear-Site-Data response header is sent, the existing prerender 42 // is expected to be canceled. 43 // And the navigation is expected to create another page instead of activation. 44 await referrerRC.navigateExpectingNoPrerenderingActivation(prerenderedRC); 45 }, "clear-site-data prerenderCache headers should prevent it from being activated"); 46 47 promise_test(async t => { 48 49 const rcHelper = new PrerenderingRemoteContextHelper(); 50 const referrerRC = await rcHelper.addWindow({ 51 origin: 'HTTPS_ORIGIN' 52 }, { 53 features: 'noopener' 54 }); 55 const prerenderedRC = await referrerRC.addPrerender({ 56 origin: 'HTTPS_ORIGIN' 57 }); 58 59 const sameOrigin = get_host_info().HTTPS_ORIGIN; 60 61 // Open new window with url to clear cache data through Clear-Site-Data header. 62 // Ensure that the cache is cleared before the navigation. 63 const gotMessage = new Promise(resolve => { 64 window.addEventListener('message', e => { 65 resolve(e.data); 66 }, { 67 once: true 68 }); 69 }); 70 let cache_helper = "cache_helper=" + self.crypto.randomUUID() + "&"; 71 window.open(sameOrigin + "/../../clear-site-data/support/clear-site-data-cache.py?" + cache_helper + "response=single_html&cache&clear_first=all"); 72 await gotMessage; 73 74 // Because Clear-Site-Data response header is sent, the existing prerender 75 // is expected to be canceled. 76 // And the navigation is expected to create another page instead of activation. 77 await referrerRC.navigateExpectingNoPrerenderingActivation(prerenderedRC); 78 }, "clear-site-data cache headers should prevent it from being activated"); 79 </script>