tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

no-vary-search.https.html (3818B)


      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/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-28">
     43 <meta name="variant" content="?29-29">
     44 <meta name="variant" content="?30-last">
     45 
     46 <body></body>
     47 <script>
     48 setup(() => assertSpeculationRulesIsSupported());
     49 
     50 function prerender_no_vary_search_test(description, noVarySearch, prefetchQuery, navigateQuery, shouldUse) {
     51  promise_test(async t => {
     52    const prefetchQueryParams = new URLSearchParams(prefetchQuery);
     53    const navigateQueryParams = new URLSearchParams(navigateQuery);
     54 
     55    addNoVarySearchHeaderUsingPipe(prefetchQueryParams, noVarySearch);
     56    addNoVarySearchHeaderUsingPipe(navigateQueryParams, noVarySearch);
     57 
     58    const params = {
     59      'prerendering': prefetchQueryParams,
     60      'activating': navigateQueryParams
     61    };
     62 
     63    const {exec, tryToActivate, getNetworkRequestCount, prerenderingURL, activatingURL} =
     64        await create_prerendered_page(t, params);
     65 
     66    if (shouldUse) {
     67      // The request should be sent only one time for prerendering.
     68 
     69      // Test that the URL changes, and that popstate isn't called as part of
     70      // activation changing the URL.
     71      await exec(() => {
     72        window.popstateFired = false;
     73        window.addEventListener("popstate", () => {
     74          window.popstateFired = true;
     75        });
     76      });
     77      assert_equals(await exec(() => location.href), prerenderingURL, 'location.href before activation');
     78 
     79      assert_equals(await tryToActivate(), 'activated');
     80      assert_equals(await getNetworkRequestCount(), '1');
     81 
     82      assert_equals(await exec(() => location.href), activatingURL, 'location.href after activation');
     83      assert_equals(await exec(() => window.popstateFired), false, 'popstate must not be fired');
     84    } else {
     85      // The request should be sent twice for prerendering and real navigation
     86      // that doesn't activate the prerendered page.
     87      assert_equals(await tryToActivate(), 'discarded');
     88      assert_equals(await getNetworkRequestCount(), '2');
     89    }
     90  }, description);
     91 }
     92 
     93 test_inputs.forEach(({description, noVarySearch, prefetchQuery, navigateQuery, shouldUse}) => {
     94  subsetTest(prerender_no_vary_search_test, description, noVarySearch, prefetchQuery, navigateQuery, shouldUse);
     95 });
     96 </script>