netwerk/test/unit/test_permmgr.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/netwerk/test/unit/test_permmgr.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,111 @@
     1.4 +// tests nsIPermissionManager
     1.5 +
     1.6 +var hosts = [
     1.7 +  // format: [host, type, permission]
     1.8 +  ["mozilla.org", "cookie", 1],
     1.9 +  ["mozilla.org", "image", 2],
    1.10 +  ["mozilla.org", "popup", 3],
    1.11 +  ["mozilla.com", "cookie", 1],
    1.12 +  ["www.mozilla.com", "cookie", 2],
    1.13 +  ["dev.mozilla.com", "cookie", 3]
    1.14 +];
    1.15 +
    1.16 +var results = [
    1.17 +  // format: [host, type, testPermission result, testExactPermission result]
    1.18 +  // test defaults
    1.19 +  ["localhost", "cookie", 0, 0],
    1.20 +  ["spreadfirefox.com", "cookie", 0, 0],
    1.21 +  // test different types
    1.22 +  ["mozilla.org", "cookie", 1, 1],
    1.23 +  ["mozilla.org", "image", 2, 2],
    1.24 +  ["mozilla.org", "popup", 3, 3],
    1.25 +  // test subdomains
    1.26 +  ["www.mozilla.org", "cookie", 1, 0],
    1.27 +  ["www.dev.mozilla.org", "cookie", 1, 0],
    1.28 +  // test different permissions on subdomains
    1.29 +  ["mozilla.com", "cookie", 1, 1],
    1.30 +  ["www.mozilla.com", "cookie", 2, 2],
    1.31 +  ["dev.mozilla.com", "cookie", 3, 3],
    1.32 +  ["www.dev.mozilla.com", "cookie", 3, 0]
    1.33 +];
    1.34 +
    1.35 +function run_test() {
    1.36 +  var pm = Components.classes["@mozilla.org/permissionmanager;1"]
    1.37 +                     .getService(Components.interfaces.nsIPermissionManager);
    1.38 +
    1.39 +  var ioService = Components.classes["@mozilla.org/network/io-service;1"]
    1.40 +                            .getService(Components.interfaces.nsIIOService);
    1.41 +
    1.42 +  var secMan = Components.classes["@mozilla.org/scriptsecuritymanager;1"]
    1.43 +                         .getService(Components.interfaces.nsIScriptSecurityManager);
    1.44 +
    1.45 +  // nsIPermissionManager implementation is an extension; don't fail if it's not there
    1.46 +  if (!pm)
    1.47 +    return;
    1.48 +
    1.49 +  // put a few hosts in
    1.50 +  for (var i = 0; i < hosts.length; ++i) {
    1.51 +    var uri = ioService.newURI("http://" + hosts[i][0], null, null);
    1.52 +    var principal = secMan.getNoAppCodebasePrincipal(uri);
    1.53 +
    1.54 +    pm.addFromPrincipal(principal, hosts[i][1], hosts[i][2]);
    1.55 +  }
    1.56 +
    1.57 +  // test the result
    1.58 +  for (var i = 0; i < results.length; ++i) {
    1.59 +    var uri = ioService.newURI("http://" + results[i][0], null, null);
    1.60 +    var principal = secMan.getNoAppCodebasePrincipal(uri);
    1.61 +
    1.62 +    do_check_eq(pm.testPermissionFromPrincipal(principal, results[i][1]), results[i][2]);
    1.63 +    do_check_eq(pm.testExactPermissionFromPrincipal(principal, results[i][1]), results[i][3]);
    1.64 +  }
    1.65 +
    1.66 +  // test the enumerator ...
    1.67 +  var j = 0;
    1.68 +  var perms = new Array();
    1.69 +  var enumerator = pm.enumerator;
    1.70 +  while (enumerator.hasMoreElements()) {
    1.71 +    perms[j] = enumerator.getNext().QueryInterface(Components.interfaces.nsIPermission);
    1.72 +    ++j;
    1.73 +  }
    1.74 +  do_check_eq(perms.length, hosts.length);
    1.75 +
    1.76 +  // ... remove all the hosts ...
    1.77 +  for (var j = 0; j < perms.length; ++j) {
    1.78 +    var uri = ioService.newURI("http://" + perms[j].host, null, null);
    1.79 +    var principal = secMan.getNoAppCodebasePrincipal(uri);
    1.80 +
    1.81 +    pm.removeFromPrincipal(principal, perms[j].type);
    1.82 +  }
    1.83 +  
    1.84 +  // ... ensure each and every element is equal ...
    1.85 +  for (var i = 0; i < hosts.length; ++i) {
    1.86 +    for (var j = 0; j < perms.length; ++j) {
    1.87 +      if (hosts[i][0] == perms[j].host &&
    1.88 +          hosts[i][1] == perms[j].type &&
    1.89 +          hosts[i][2] == perms[j].capability) {
    1.90 +        perms.splice(j, 1);
    1.91 +        break;
    1.92 +      }
    1.93 +    }
    1.94 +  }
    1.95 +  do_check_eq(perms.length, 0);
    1.96 +
    1.97 +  // ... and check the permmgr's empty
    1.98 +  do_check_eq(pm.enumerator.hasMoreElements(), false);
    1.99 +
   1.100 +  // test UTF8 normalization behavior: expect ASCII/ACE host encodings
   1.101 +  var utf8 = "b\u00FCcher.dolske.org"; // "bücher.dolske.org"
   1.102 +  var aceref = "xn--bcher-kva.dolske.org";
   1.103 +  var uri = ioService.newURI("http://" + utf8, null, null);
   1.104 +  pm.add(uri, "utf8", 1);
   1.105 +  var enumerator = pm.enumerator;
   1.106 +  do_check_eq(enumerator.hasMoreElements(), true);
   1.107 +  var ace = enumerator.getNext().QueryInterface(Components.interfaces.nsIPermission);
   1.108 +  do_check_eq(ace.host, aceref);
   1.109 +  do_check_eq(enumerator.hasMoreElements(), false);
   1.110 +
   1.111 +  // test removeAll()
   1.112 +  pm.removeAll();
   1.113 +  do_check_eq(pm.enumerator.hasMoreElements(), false);
   1.114 +}

mercurial