test_trustworthy_loopback.html (2137B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>Bug 1732069: Sec-Fetch-Site inconsistent on localhost/IPs</title> 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 7 </head> 8 <body> 9 <script type="application/javascript"> 10 11 SimpleTest.waitForExplicitFinish(); 12 13 let testsSucceeded = 0; 14 15 let win; 16 function checkTestsDone() { 17 testsSucceeded++; 18 if (testsSucceeded == 3) { 19 win.close(); 20 SimpleTest.finish(); 21 } 22 } 23 24 var script = SpecialPowers.loadChromeScript(() => { 25 /* eslint-env mozilla/chrome-script */ 26 Services.obs.addObserver(function onExamResp(subject) { 27 let channel = subject.QueryInterface(Ci.nsIHttpChannel); 28 if (!channel.URI.spec.includes("localhost") || 29 channel.URI.spec.startsWith("http://localhost:9898/tests/dom/security/test/sec-fetch/file_trustworthy_loopback.html")) { 30 return; 31 } 32 33 const expectedHeaders = { 34 "localhost:9898": { 35 "sec-fetch-site": "same-origin", 36 "sec-fetch-mode": "navigate", 37 "sec-fetch-dest": "iframe", 38 }, 39 "sub.localhost:-1": { 40 "sec-fetch-site": "cross-site", 41 "sec-fetch-mode": "navigate", 42 "sec-fetch-dest": "iframe", 43 }, 44 "localhost:9899": { 45 "sec-fetch-site": "same-site", 46 "sec-fetch-mode": "navigate", 47 "sec-fetch-dest": "iframe", 48 }, 49 }; 50 51 info(`checking headers for request to ${channel.URI.spec}`); 52 const expected = expectedHeaders[channel.URI.host + ":" + channel.URI.port]; 53 for (let key in expected) { 54 try { 55 is(channel.getRequestHeader(key), expected[key], `${key} header matches`); 56 } catch (e) { 57 ok(false, "failed to check headers"); 58 } 59 } 60 sendAsyncMessage("test-end"); 61 }, "http-on-stop-request"); 62 }); 63 64 script.addMessageListener("test-end", () => { 65 checkTestsDone(); 66 }); 67 68 SpecialPowers.pushPrefEnv({set: [ 69 ["network.proxy.allow_hijacking_localhost", true], 70 ]}).then(function() { 71 win = window.open("http://localhost:9898/tests/dom/security/test/sec-fetch/file_trustworthy_loopback.html"); 72 }); 73 74 </script> 75 </body> 76 </html>