123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- <!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_ENABLED_PREF = "security.cert_pinning.hpkp.enabled";
- const PROCESS_HPKP_FROM_NON_BUILTIN_ROOTS_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()
- {
- Services.prefs.setBoolPref(HPKP_ENABLED_PREF, true);
- Services.prefs.setBoolPref(PROCESS_HPKP_FROM_NON_BUILTIN_ROOTS_PREF, true);
- SimpleTest.registerCleanupFunction(() => {
- Services.prefs.setBoolPref(HPKP_ENABLED_PREF, false);
- Services.prefs.setBoolPref(PROCESS_HPKP_FROM_NON_BUILTIN_ROOTS_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>
|