prefetch-single.https.html (4112B)
1 <!DOCTYPE html> 2 <title>Prefetched response including No-Vary-Search headers is used during navigation</title> 3 <meta charset="utf-8"> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <script src="/common/dispatcher/dispatcher.js"></script> 7 <script src="/common/utils.js"></script> 8 <script src="../../resources/utils.js"></script> 9 <script src="../resources/utils.sub.js"></script> 10 <script src="/common/subset-tests.js"></script> 11 <script src="test-utils.js"></script> 12 <script src="test-inputs.js"></script> 13 14 <meta name="variant" content="?1-1"> 15 <meta name="variant" content="?2-2"> 16 <meta name="variant" content="?3-3"> 17 <meta name="variant" content="?4-4"> 18 <meta name="variant" content="?5-5"> 19 <meta name="variant" content="?6-6"> 20 <meta name="variant" content="?7-7"> 21 <meta name="variant" content="?8-8"> 22 <meta name="variant" content="?9-9"> 23 <meta name="variant" content="?10-10"> 24 <meta name="variant" content="?11-11"> 25 <meta name="variant" content="?12-12"> 26 <meta name="variant" content="?13-13"> 27 <meta name="variant" content="?14-14"> 28 <meta name="variant" content="?15-15"> 29 <meta name="variant" content="?16-16"> 30 <meta name="variant" content="?17-17"> 31 <meta name="variant" content="?18-18"> 32 <meta name="variant" content="?19-19"> 33 <meta name="variant" content="?20-20"> 34 <meta name="variant" content="?21-21"> 35 <meta name="variant" content="?22-22"> 36 <meta name="variant" content="?23-23"> 37 <meta name="variant" content="?24-24"> 38 <meta name="variant" content="?25-25"> 39 <meta name="variant" content="?26-26"> 40 <meta name="variant" content="?27-27"> 41 <meta name="variant" content="?28-28"> 42 <meta name="variant" content="?29-29"> 43 <meta name="variant" content="?30-last"> 44 45 <script> 46 setup(() => assertSpeculationRulesIsSupported()); 47 48 /* 49 remoteAgent: the RemoteContext instance used to communicate between the 50 test and the window where prefetch/navigation is happening 51 noVarySearchHeaderValue: the value of No-Vary-Search header to be populated 52 for the prefetched response 53 prefetchQuery: query params to be added to prefetchExecutor url and prefetched 54 navigateQuery: query params to be added to prefetchExecutor url and navigated to 55 */ 56 async function prefetchAndNavigate(remoteAgent, noVarySearchHeaderValue, prefetchQuery, navigateQuery){ 57 const nextUrl = remoteAgent.getExecutorURL(); 58 const navigateToUrl = new URL(nextUrl); 59 // Add query params to the url to be prefetched. 60 const additionalPrefetchedUrlSearchParams = new URLSearchParams(prefetchQuery); 61 addNoVarySearchHeaderUsingPipe(additionalPrefetchedUrlSearchParams, noVarySearchHeaderValue); 62 additionalPrefetchedUrlSearchParams.forEach((value, key) => { 63 nextUrl.searchParams.append(key, value); 64 }); 65 66 await remoteAgent.forceSinglePrefetch(nextUrl); 67 68 // Add new query params to navigateToUrl to match No-Vary-Search test case. 69 const additionalNavigateToUrlSearchParams = new URLSearchParams(navigateQuery); 70 addNoVarySearchHeaderUsingPipe(additionalNavigateToUrlSearchParams, noVarySearchHeaderValue); 71 additionalNavigateToUrlSearchParams.forEach((value, key) => { 72 navigateToUrl.searchParams.append(key, value); 73 }); 74 await remoteAgent.navigate(navigateToUrl); 75 } 76 77 function prefetch_no_vary_search_test(description, noVarySearch, prefetchQuery, navigateQuery, shouldUse){ 78 promise_test(async t => { 79 const agent = await spawnWindow(t, {}); 80 await prefetchAndNavigate(agent, 81 noVarySearch, 82 prefetchQuery, 83 navigateQuery); 84 85 if(shouldUse){ 86 assert_prefetched(await agent.getRequestHeaders(), 87 "Navigation didn't use the prefetched response!"); 88 } 89 else{ 90 assert_not_prefetched(await agent.getRequestHeaders(), 91 "Navigation used the prefetched response!"); 92 } 93 }, description); 94 } 95 96 test_inputs.forEach(({description, noVarySearch, prefetchQuery, navigateQuery, shouldUse}) => { 97 subsetTest(prefetch_no_vary_search_test, 98 description, noVarySearch, prefetchQuery, navigateQuery, 99 shouldUse); 100 }); 101 102 </script>