tor-browser

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

modulepreload-referrer-check.html (1646B)


      1 <!DOCTYPE html>
      2 <html>
      3 <head>
      4 <title>Modulepreload Referrer Header Check</title>
      5 <script src="/resources/testharness.js"></script>
      6 <script src="/resources/testharnessreport.js"></script>
      7 <script>
      8 // Initialize the window.referrers object that will be used by echo-referrer.py
      9 window.referrers = {};
     10 </script>
     11 </head>
     12 <body>
     13 <iframe id="test-frame"></iframe>
     14 
     15 <script>
     16 // This test uses a simple approach to check if modulepreload sends a referrer header
     17 promise_test(async t => {
     18  const importId = Date.now();
     19  const preloadId = Date.now() + 1;
     20 
     21  // Import will set window.referrers[importId] to the referrer value
     22  await import(`/preload/resources/echo-referrer.py?uid=${importId}`);
     23 
     24  const link = document.createElement('link');
     25  link.rel = 'modulepreload';
     26  link.href = `/preload/resources/echo-referrer.py?uid=${preloadId}`;
     27 
     28  // Wait for the preload to complete using onload event
     29  const preloadComplete = new Promise(resolve => {
     30    link.onload = resolve;
     31    link.onerror = () => {
     32      assert_unreached("Modulepreload failed to load");
     33    };
     34  });
     35 
     36  document.head.appendChild(link);
     37  await preloadComplete;
     38 
     39  // Second import ensures the module is loaded and referrer is recorded
     40  await import(`/preload/resources/echo-referrer.py?uid=${preloadId}`);
     41 
     42  // Check if referrers were recorded in the global window.referrers object
     43  assert_equals(window.referrers[importId], location.href, "Dynamic import should have a referrer header");
     44  assert_equals(window.referrers[preloadId], location.href, "Modulepreload should have a referrer header");
     45 
     46 }, "Modulepreload should send a referrer header");
     47 </script>
     48 </body>
     49 </html>