summaryrefslogtreecommitdiffstats
path: root/devtools/shared/webconsole/test/test_network_security-hpkp.html
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/shared/webconsole/test/test_network_security-hpkp.html')
-rw-r--r--devtools/shared/webconsole/test/test_network_security-hpkp.html108
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>