<!DOCTYPE HTML> <html lang="en"> <head> <meta charset="utf8"> <title>Test for the network actor (HSTS detection)</title> <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> <script type="text/javascript;version=1.8" src="common.js"></script> <!-- Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ --> </head> <body> <p>Test for the network actor (HSTS detection)</p> <iframe src="https://example.com/chrome/devtools/shared/webconsole/test/network_requests_iframe.html"></iframe> <script class="testbody" type="text/javascript;version=1.8"> SimpleTest.waitForExplicitFinish(); let gCurrentTestCase = -1; const TEST_CASES = [ { desc: "no HSTS", url: "https://example.com", usesHSTS: false, }, { desc: "HSTS from this response", url: "https://example.com/"+ "browser/browser/base/content/test/general/browser_star_hsts.sjs", usesHSTS: true, }, { desc: "stored HSTS from previous response", url: "https://example.com/", usesHSTS: true, } ]; function startTest() { SimpleTest.registerCleanupFunction(() => { // Reset HSTS state. let gSSService = Cc["@mozilla.org/ssservice;1"] .getService(Ci.nsISiteSecurityService); let gIOService = Cc["@mozilla.org/network/io-service;1"] .getService(Ci.nsIIOService); let uri = gIOService.newURI(TEST_CASES[0].url, null, null); gSSService.removeState(Ci.nsISiteSecurityService.HEADER_HSTS, uri, 0); }); info("Test detection of HTTP Strict Transport Security."); removeEventListener("load", startTest); attachConsoleToTab(["NetworkActivity"], onAttach); } function onAttach(aState, aResponse) { onNetworkEventUpdate = onNetworkEventUpdate.bind(null, aState); aState.dbgClient.addListener("networkEventUpdate", onNetworkEventUpdate); runNextCase(aState); } function runNextCase(aState) { gCurrentTestCase++; if (gCurrentTestCase === TEST_CASES.length) { info("Tests ran. Cleaning up."); closeDebugger(aState, SimpleTest.finish); return; } let { desc, url } = TEST_CASES[gCurrentTestCase]; info("Testing site with " + desc); let iframe = document.querySelector("iframe").contentWindow; iframe.wrappedJSObject.makeXhrCallback("GET", url); } function onNetworkEventUpdate(aState, aType, aPacket) { function onSecurityInfo(packet) { let data = TEST_CASES[gCurrentTestCase]; is(packet.securityInfo.hsts, data.usesHSTS, "Strict Transport Security detected correctly."); runNextCase(aState); } if (aPacket.updateType === "securityInfo") { aState.client.getSecurityInfo(aPacket.from, onSecurityInfo); } } addEventListener("load", startTest); </script> </body> </html>