no-vary-search-hint.https.html (3660B)
1 <!DOCTYPE html> 2 <meta charset="utf-8"> 3 <meta name="timeout" content="long"> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <script src="/common/get-host-info.sub.js"></script> 7 <script src="/common/utils.js"></script> 8 <script src="/common/dispatcher/dispatcher.js"></script> 9 <script src="../resources/utils.js"></script> 10 <script src="resources/utils.js"></script> 11 <script src="/common/subset-tests.js"></script> 12 <script src="../prefetch/no-vary-search/test-utils.js"></script> 13 <script src="../prefetch/no-vary-search/hint-test-inputs.js"></script> 14 15 <meta name="variant" content="?1-1"> 16 <meta name="variant" content="?2-2"> 17 <meta name="variant" content="?3-3"> 18 <meta name="variant" content="?4-4"> 19 <meta name="variant" content="?5-5"> 20 <meta name="variant" content="?6-6"> 21 <meta name="variant" content="?7-7"> 22 <meta name="variant" content="?8-8"> 23 <meta name="variant" content="?9-9"> 24 <meta name="variant" content="?10-10"> 25 <meta name="variant" content="?11-11"> 26 <meta name="variant" content="?12-12"> 27 <meta name="variant" content="?13-13"> 28 <meta name="variant" content="?14-14"> 29 <meta name="variant" content="?15-15"> 30 <meta name="variant" content="?16-16"> 31 <meta name="variant" content="?17-17"> 32 <meta name="variant" content="?18-18"> 33 <meta name="variant" content="?19-19"> 34 <meta name="variant" content="?20-20"> 35 <meta name="variant" content="?21-21"> 36 <meta name="variant" content="?22-22"> 37 <meta name="variant" content="?23-23"> 38 <meta name="variant" content="?24-24"> 39 <meta name="variant" content="?25-25"> 40 <meta name="variant" content="?26-26"> 41 <meta name="variant" content="?27-27"> 42 <meta name="variant" content="?28-last"> 43 44 <body></body> 45 <script> 46 setup(() => assertSpeculationRulesIsSupported()); 47 48 function prerender_no_vary_search_test(description, noVarySearch, noVarySearchHint, prefetchQuery, navigateQuery, shouldUse) { 49 promise_test(async t => { 50 const prefetchQueryParams = new URLSearchParams(prefetchQuery); 51 const navigateQueryParams = new URLSearchParams(navigateQuery); 52 53 addNoVarySearchHeaderUsingPipe(prefetchQueryParams, noVarySearch); 54 addNoVarySearchHeaderUsingPipe(navigateQueryParams, noVarySearch); 55 56 const params = { 57 'prerendering': prefetchQueryParams, 58 'activating': navigateQueryParams 59 }; 60 61 const rule_extras = { 62 'expects_no_vary_search': noVarySearchHint 63 }; 64 65 // TODO(crbug.com/343754418): Block serving a response to prerendering 66 // request until `tryToActivate` processes the No-Vary-Search hint and 67 // starts waiting for the response. See prefetch-single-with-hint.https.html 68 // and prefetch_nvs_hint.py. Without that, the No-Vary-Search header may 69 // arrive before the hint is processed. The case is not what this test want 70 // to confirm. 71 const {tryToActivate, getNetworkRequestCount} = 72 await create_prerendered_page(t, params, undefined, rule_extras); 73 74 if (shouldUse) { 75 // The request should be sent only one time for prerendering. 76 assert_equals(await tryToActivate(), 'activated'); 77 assert_equals(await getNetworkRequestCount(), '1'); 78 } else { 79 // The request should be sent twice for prerendering and real navigation 80 // that doesn't activate the prerendered page. 81 assert_equals(await tryToActivate(), 'discarded'); 82 assert_equals(await getNetworkRequestCount(), '2'); 83 } 84 }, description); 85 } 86 87 hint_test_inputs.forEach(({description, noVarySearch, noVarySearchHint, prefetchQuery, navigateQuery, shouldUse}) => { 88 subsetTest(prerender_no_vary_search_test, description, noVarySearch, prefetchQuery, navigateQuery, shouldUse); 89 }); 90 </script>