test_websocket.html (2074B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>Bug 1628605: Test Sec-Fetch-* header for websockets</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 function checkTestsDone() { 16 testsSucceeded++; 17 if (testsSucceeded == 2) { 18 SimpleTest.finish(); 19 } 20 } 21 22 var script = SpecialPowers.loadChromeScript(() => { 23 /* eslint-env mozilla/chrome-script */ 24 Services.obs.addObserver(function onExamResp(subject) { 25 let channel = subject.QueryInterface(Ci.nsIHttpChannel); 26 if (!channel.URI.spec.startsWith("https://example.com/tests/dom/security/test/sec-fetch/file_websocket")) { 27 return; 28 } 29 30 // Sec-Fetch-* Headers should be present for Dest, Mode, Site 31 try { 32 let secFetchDest = channel.getRequestHeader("Sec-Fetch-Dest"); 33 is(secFetchDest, "empty", "testing sec-fetch-dest"); 34 35 let secFetchMode = channel.getRequestHeader("Sec-Fetch-Mode"); 36 is(secFetchMode, "websocket", "testing sec-fetch-mode"); 37 38 let secFetchSite = channel.getRequestHeader("Sec-Fetch-Site"); 39 is(secFetchSite, "cross-site", "testing sec-fetch-site"); 40 } 41 catch (e) { 42 ok(false, "testing sec-fetch-*"); 43 } 44 45 // Sec-Fetch-User should not be present 46 try { 47 channel.getRequestHeader("Sec-Fetch-User"); 48 ok(false, "testing sec-fetch-user"); 49 } 50 catch (e) { 51 ok(true, "testing sec-fetch-user"); 52 } 53 Services.obs.removeObserver(onExamResp, "http-on-stop-request"); 54 55 sendAsyncMessage("test-end"); 56 }, "http-on-stop-request"); 57 }); 58 59 script.addMessageListener("test-end", () => { 60 checkTestsDone(); 61 }); 62 63 var wssSocket = new WebSocket("wss://example.com/tests/dom/security/test/sec-fetch/file_websocket"); 64 wssSocket.onopen = function() { 65 ok(true, "sanity: wssSocket onopen"); 66 checkTestsDone(); 67 }; 68 wssSocket.onerror = function() { 69 ok(false, "sanity: wssSocket onerror"); 70 }; 71 72 </script> 73 </body> 74 </html>