security/manager/ssl/tests/mochitest/bugs/test_bug413909.html

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 <!DOCTYPE HTML>
     2 <html>
     3 <head>
     4   <title>Test bug 413909</title>
     5   <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>        
     6   <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" />
     7 </head>
     8 <body onload="onWindowLoad()">
    10 <script class="testbody" type="text/javascript">
    12 var certOverrideService = Components.classes["@mozilla.org/security/certoverride;1"]
    13   .getService(Components.interfaces.nsICertOverrideService);
    14 var cert = null;
    15 var certListener = null;
    17 SimpleTest.waitForExplicitFinish();
    19 function badCertListener() 
    20 {
    21 }
    23 badCertListener.prototype = {
    24   exceptionAdded: false,
    26   getInterface: function (aIID) {
    27     return this.QueryInterface(aIID);
    28   },
    30   QueryInterface: function(aIID) {
    31     if (aIID.equals(Components.interfaces.nsIBadCertListener2) ||
    32         aIID.equals(Components.interfaces.nsIInterfaceRequestor) ||
    33         aIID.equals(Components.interfaces.nsISupports))
    34       return this;
    36     throw Components.results.NS_ERROR_NO_INTERFACE;
    37   },  
    39   notifyCertProblem: function MSR_notifyCertProblem(socketInfo, sslStatus, targetHost) {
    40     cert = sslStatus.QueryInterface(Components.interfaces.nsISSLStatus)
    41       .serverCert;
    43     certOverrideService.rememberValidityOverride(
    44       "bug413909.xn--hxajbheg2az3al.xn--jxalpdlp",
    45       -1,
    46       cert,
    47       certOverrideService.ERROR_UNTRUSTED,
    48       false);
    50     this.exceptionAdded = true;
    51     return true;
    52   }
    53 }
    55 function apiTest(expected)
    56 {
    57   var has;
    58   var bits = {}, temp = {};
    60   has = certOverrideService.hasMatchingOverride(
    61       "bug413909.xn--hxajbheg2az3al.xn--jxalpdlp", 
    62       -1, cert, bits, temp);
    63   is(has, expected, "hasMatchingOverride "+expected+" for default port value");
    65   has = certOverrideService.hasMatchingOverride(
    66       "bug413909.xn--hxajbheg2az3al.xn--jxalpdlp", 
    67       443, cert, bits, temp);
    68   is(has, expected, "hasMatchingOverride "+expected+" for explicit port value");
    70   has = certOverrideService.hasMatchingOverride(
    71       "bug413909.xn--hxajbheg2az3al.xn--jxalpdlp", 
    72       563, cert, bits, temp);
    73   ok(!has, "hasMatchingOverride false for invalid port value");
    75   has = certOverrideService.hasMatchingOverride(
    76       window.frame1.location.hostname, 
    77       -1, cert, bits, temp);
    78   ok(!has, "hasMatchingOverride false for default port value and non-ascii host");
    80   has = certOverrideService.hasMatchingOverride(
    81       window.frame1.location.hostname, 
    82       443, cert, bits, temp);
    83   ok(!has, "hasMatchingOverride false for explicit port value and non-ascii host");
    85   has = certOverrideService.hasMatchingOverride(
    86       window.frame1.location.hostname, 
    87       563, cert, bits, temp);
    88   ok(!has, "hasMatchingOverride false for invalid port value and non-ascii host");
    89 }
    91 function onFrameLoad()
    92 {
    93   ok(certListener.exceptionAdded, "Secure page loaded after exception was added and not sooner");
    94   if (!certListener.exceptionAdded)
    95     return;
    97   apiTest(true);
    98   certOverrideService.clearValidityOverride(
    99     "bug413909.xn--hxajbheg2az3al.xn--jxalpdlp", -1);
   100   apiTest(false);
   102   SimpleTest.finish();
   103 }
   105 function onWindowLoad()
   106 {
   107   var req = new XMLHttpRequest();
   108   try
   109   {
   110     certListener = new badCertListener();
   112     req.open("GET", "https://bug413909.xn--hxajbheg2az3al.xn--jxalpdlp/", false);
   113     req.channel.notificationCallbacks = certListener;
   114     req.send(null);
   115   }
   116   catch(ex)
   117   {
   118     // ignore
   119   }
   121   window.frame1.location.reload();
   122 }
   124 </script>
   125 <iframe name="frame1" src="https://bug413909.xn--hxajbheg2az3al.xn--jxalpdlp/" onload="onFrameLoad()"></iframe>
   126 </body>
   127 </html>

mercurial