| <!DOCTYPE html> |
| <title>clear-site-data-cache cancels prerenders</title> |
| <meta name="timeout" content="long"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/common/utils.js"></script> |
| <script src="/common/get-host-info.sub.js"></script> |
| <script src="/common/dispatcher/dispatcher.js"></script> |
| <script src="/html/browsers/browsing-the-web/remote-context-helper/resources/remote-context-helper.js"></script> |
| <script src="../resources/utils.js"></script> |
| <script src="resources/utils.js"></script> |
| <script> |
| setup(() => assertSpeculationRulesIsSupported()); |
| |
| promise_test(async t => { |
| |
| const rcHelper = new PrerenderingRemoteContextHelper(); |
| const referrerRC = await rcHelper.addWindow({ |
| origin: 'HTTPS_ORIGIN' |
| }, { |
| features: 'noopener' |
| }); |
| const prerenderedRC = await referrerRC.addPrerender({ |
| origin: 'HTTPS_ORIGIN' |
| }); |
| |
| const sameOrigin = get_host_info().HTTPS_ORIGIN; |
| |
| // Open new window with url to clear cache data through Clear-Site-Data header. |
| // Ensure that the cache is cleared before the navigation. |
| const gotMessage = new Promise(resolve => { |
| window.addEventListener('message', e => { |
| resolve(e.data); |
| }, { |
| once: true |
| }); |
| }); |
| window.open(sameOrigin + "/../../clear-site-data/support/clear-site-data-prerenderCache.py"); |
| await gotMessage; |
| |
| // Because Clear-Site-Data response header is sent, the existing prerender |
| // is expected to be canceled. |
| // And the navigation is expected to create another page instead of activation. |
| await referrerRC.navigateExpectingNoPrerenderingActivation(prerenderedRC); |
| }, "clear-site-data prerenderCache headers should prevent it from being activated"); |
| |
| promise_test(async t => { |
| |
| const rcHelper = new PrerenderingRemoteContextHelper(); |
| const referrerRC = await rcHelper.addWindow({ |
| origin: 'HTTPS_ORIGIN' |
| }, { |
| features: 'noopener' |
| }); |
| const prerenderedRC = await referrerRC.addPrerender({ |
| origin: 'HTTPS_ORIGIN' |
| }); |
| |
| const sameOrigin = get_host_info().HTTPS_ORIGIN; |
| |
| // Open new window with url to clear cache data through Clear-Site-Data header. |
| // Ensure that the cache is cleared before the navigation. |
| const gotMessage = new Promise(resolve => { |
| window.addEventListener('message', e => { |
| resolve(e.data); |
| }, { |
| once: true |
| }); |
| }); |
| let cache_helper = "cache_helper=" + self.crypto.randomUUID() + "&"; |
| window.open(sameOrigin + "/../../clear-site-data/support/clear-site-data-cache.py?" + cache_helper + "response=single_html&cache&clear_first=all"); |
| await gotMessage; |
| |
| // Because Clear-Site-Data response header is sent, the existing prerender |
| // is expected to be canceled. |
| // And the navigation is expected to create another page instead of activation. |
| await referrerRC.navigateExpectingNoPrerenderingActivation(prerenderedRC); |
| }, "clear-site-data cache headers should prevent it from being activated"); |
| </script> |