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>