diff options
Diffstat (limited to 'devtools/shared/webconsole/test/test_network_security-hpkp.html')
-rw-r--r-- | devtools/shared/webconsole/test/test_network_security-hpkp.html | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/devtools/shared/webconsole/test/test_network_security-hpkp.html b/devtools/shared/webconsole/test/test_network_security-hpkp.html new file mode 100644 index 000000000..55e2621a8 --- /dev/null +++ b/devtools/shared/webconsole/test/test_network_security-hpkp.html @@ -0,0 +1,108 @@ +<!DOCTYPE HTML> +<html lang="en"> +<head> + <meta charset="utf8"> + <title>Test for the network actor (HPKP 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 (HPKP 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 HPKP_PREF = "security.cert_pinning.process_headers_from_non_builtin_roots"; + +// Static pins tested by unit/test_security-info-static-hpkp.js. +const TEST_CASES = [ + { + desc: "no Public Key Pinning", + url: "https://example.com", + usesPinning: false, + }, + { + desc: "dynamic Public Key Pinning with this request", + url: "https://include-subdomains.pinning-dynamic.example.com/" + + "browser/browser/base/content/test/general/pinning_headers.sjs", + usesPinning: true, + }, + { + desc: "dynamic Public Key Pinning with previous request", + url: "https://include-subdomains.pinning-dynamic.example.com/", + usesPinning: true, + } +]; + +function startTest() +{ + // Need to enable this pref or pinning headers are rejected due test + // certificate. + Services.prefs.setBoolPref(HPKP_PREF, true); + SimpleTest.registerCleanupFunction(() => { + Services.prefs.setBoolPref(HPKP_PREF, false); + + // Reset pinning state. + let gSSService = Cc["@mozilla.org/ssservice;1"] + .getService(Ci.nsISiteSecurityService); + + let gIOService = Cc["@mozilla.org/network/io-service;1"] + .getService(Ci.nsIIOService); + for (let {url} of TEST_CASES) { + let uri = gIOService.newURI(url, null, null); + gSSService.removeState(Ci.nsISiteSecurityService.HEADER_HPKP, uri, 0); + } + }); + + info("Test detection of Public Key Pinning."); + 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.hpkp, data.usesPinning, + "Public Key Pinning detected correctly."); + + runNextCase(aState); + } + + if (aPacket.updateType === "securityInfo") { + aState.client.getSecurityInfo(aPacket.from, onSecurityInfo); + } +} + +addEventListener("load", startTest); +</script> +</body> +</html> |