/* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ var gPendingTests = []; var gTestsRun = 0; function add_test(test) { gPendingTests.push(test); } function run_next_test() { if (gPendingTests.length == 0) { end_test(); return; } gTestsRun++; info("Running test " + gTestsRun); gPendingTests.shift()(); } function CertOverrideListener(host, bits) { this.host = host; this.bits = bits; } CertOverrideListener.prototype = { host: null, bits: null, getInterface: function (aIID) { return this.QueryInterface(aIID); }, QueryInterface: function(aIID) { if (aIID.equals(Ci.nsIBadCertListener2) || aIID.equals(Ci.nsIInterfaceRequestor) || aIID.equals(Ci.nsISupports)) return this; throw Components.results.NS_ERROR_NO_INTERFACE; }, notifyCertProblem: function (socketInfo, sslStatus, targetHost) { cert = sslStatus.QueryInterface(Components.interfaces.nsISSLStatus) .serverCert; var cos = Cc["@mozilla.org/security/certoverride;1"]. getService(Ci.nsICertOverrideService); cos.rememberValidityOverride(this.host, -1, cert, this.bits, false); return true; } } // Add overrides for the bad certificates function addCertOverride(host, bits) { var req = new XMLHttpRequest(); try { req.open("GET", "https://" + host + "/", false); req.channel.notificationCallbacks = new CertOverrideListener(host, bits); req.send(null); } catch (e) { // This request will fail since the SSL server is not trusted yet } }