netwerk/test/unit/test_permmgr.js

Thu, 15 Jan 2015 21:03:48 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 15 Jan 2015 21:03:48 +0100
branch
TOR_BUG_9701
changeset 11
deefc01c0e14
permissions
-rw-r--r--

Integrate friendly tips from Tor colleagues to make (or not) 4.5 alpha 3;
This includes removal of overloaded (but unused) methods, and addition of
a overlooked call to DataStruct::SetData(nsISupports, uint32_t, bool.)

     1 // tests nsIPermissionManager
     3 var hosts = [
     4   // format: [host, type, permission]
     5   ["mozilla.org", "cookie", 1],
     6   ["mozilla.org", "image", 2],
     7   ["mozilla.org", "popup", 3],
     8   ["mozilla.com", "cookie", 1],
     9   ["www.mozilla.com", "cookie", 2],
    10   ["dev.mozilla.com", "cookie", 3]
    11 ];
    13 var results = [
    14   // format: [host, type, testPermission result, testExactPermission result]
    15   // test defaults
    16   ["localhost", "cookie", 0, 0],
    17   ["spreadfirefox.com", "cookie", 0, 0],
    18   // test different types
    19   ["mozilla.org", "cookie", 1, 1],
    20   ["mozilla.org", "image", 2, 2],
    21   ["mozilla.org", "popup", 3, 3],
    22   // test subdomains
    23   ["www.mozilla.org", "cookie", 1, 0],
    24   ["www.dev.mozilla.org", "cookie", 1, 0],
    25   // test different permissions on subdomains
    26   ["mozilla.com", "cookie", 1, 1],
    27   ["www.mozilla.com", "cookie", 2, 2],
    28   ["dev.mozilla.com", "cookie", 3, 3],
    29   ["www.dev.mozilla.com", "cookie", 3, 0]
    30 ];
    32 function run_test() {
    33   var pm = Components.classes["@mozilla.org/permissionmanager;1"]
    34                      .getService(Components.interfaces.nsIPermissionManager);
    36   var ioService = Components.classes["@mozilla.org/network/io-service;1"]
    37                             .getService(Components.interfaces.nsIIOService);
    39   var secMan = Components.classes["@mozilla.org/scriptsecuritymanager;1"]
    40                          .getService(Components.interfaces.nsIScriptSecurityManager);
    42   // nsIPermissionManager implementation is an extension; don't fail if it's not there
    43   if (!pm)
    44     return;
    46   // put a few hosts in
    47   for (var i = 0; i < hosts.length; ++i) {
    48     var uri = ioService.newURI("http://" + hosts[i][0], null, null);
    49     var principal = secMan.getNoAppCodebasePrincipal(uri);
    51     pm.addFromPrincipal(principal, hosts[i][1], hosts[i][2]);
    52   }
    54   // test the result
    55   for (var i = 0; i < results.length; ++i) {
    56     var uri = ioService.newURI("http://" + results[i][0], null, null);
    57     var principal = secMan.getNoAppCodebasePrincipal(uri);
    59     do_check_eq(pm.testPermissionFromPrincipal(principal, results[i][1]), results[i][2]);
    60     do_check_eq(pm.testExactPermissionFromPrincipal(principal, results[i][1]), results[i][3]);
    61   }
    63   // test the enumerator ...
    64   var j = 0;
    65   var perms = new Array();
    66   var enumerator = pm.enumerator;
    67   while (enumerator.hasMoreElements()) {
    68     perms[j] = enumerator.getNext().QueryInterface(Components.interfaces.nsIPermission);
    69     ++j;
    70   }
    71   do_check_eq(perms.length, hosts.length);
    73   // ... remove all the hosts ...
    74   for (var j = 0; j < perms.length; ++j) {
    75     var uri = ioService.newURI("http://" + perms[j].host, null, null);
    76     var principal = secMan.getNoAppCodebasePrincipal(uri);
    78     pm.removeFromPrincipal(principal, perms[j].type);
    79   }
    81   // ... ensure each and every element is equal ...
    82   for (var i = 0; i < hosts.length; ++i) {
    83     for (var j = 0; j < perms.length; ++j) {
    84       if (hosts[i][0] == perms[j].host &&
    85           hosts[i][1] == perms[j].type &&
    86           hosts[i][2] == perms[j].capability) {
    87         perms.splice(j, 1);
    88         break;
    89       }
    90     }
    91   }
    92   do_check_eq(perms.length, 0);
    94   // ... and check the permmgr's empty
    95   do_check_eq(pm.enumerator.hasMoreElements(), false);
    97   // test UTF8 normalization behavior: expect ASCII/ACE host encodings
    98   var utf8 = "b\u00FCcher.dolske.org"; // "bücher.dolske.org"
    99   var aceref = "xn--bcher-kva.dolske.org";
   100   var uri = ioService.newURI("http://" + utf8, null, null);
   101   pm.add(uri, "utf8", 1);
   102   var enumerator = pm.enumerator;
   103   do_check_eq(enumerator.hasMoreElements(), true);
   104   var ace = enumerator.getNext().QueryInterface(Components.interfaces.nsIPermission);
   105   do_check_eq(ace.host, aceref);
   106   do_check_eq(enumerator.hasMoreElements(), false);
   108   // test removeAll()
   109   pm.removeAll();
   110   do_check_eq(pm.enumerator.hasMoreElements(), false);
   111 }

mercurial