Follow-on fix for bug 457825. Use sheet principal for agent and user sheets. r=dbaron...
[wine-gecko.git] / netwerk / test / unit / test_permmgr.js
blob6b8a87a52d1fc28e2ed56a8674a757f5c4e55da0
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]
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]
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   // nsIPermissionManager implementation is an extension; don't fail if it's not there
40   if (!pm)
41     return;
43   // put a few hosts in
44   for (var i = 0; i < hosts.length; ++i) {
45     var uri = ioService.newURI("http://" + hosts[i][0], null, null);
46     pm.add(uri, hosts[i][1], hosts[i][2]);
47   }
49   // test the result
50   for (var i = 0; i < results.length; ++i) {
51     var uri = ioService.newURI("http://" + results[i][0], null, null);
52     do_check_eq(pm.testPermission(uri, results[i][1]), results[i][2]);
53     do_check_eq(pm.testExactPermission(uri, results[i][1]), results[i][3]);
54   }
56   // test the enumerator ...
57   var j = 0;
58   var perms = new Array();
59   var enumerator = pm.enumerator;
60   while (enumerator.hasMoreElements()) {
61     perms[j] = enumerator.getNext().QueryInterface(Components.interfaces.nsIPermission);
62     ++j;
63   }
64   do_check_eq(perms.length, hosts.length);
66   // ... remove all the hosts ...
67   for (var j = 0; j < perms.length; ++j) {
68     pm.remove(perms[j].host, perms[j].type);
69   }
70   
71   // ... ensure each and every element is equal ...
72   for (var i = 0; i < hosts.length; ++i) {
73     for (var j = 0; j < perms.length; ++j) {
74       if (hosts[i][0] == perms[j].host &&
75           hosts[i][1] == perms[j].type &&
76           hosts[i][2] == perms[j].capability) {
77         perms.splice(j, 1);
78         break;
79       }
80     }
81   }
82   do_check_eq(perms.length, 0);
84   // ... and check the permmgr's empty
85   do_check_eq(pm.enumerator.hasMoreElements(), false);
87   // test UTF8 normalization behavior: expect ASCII/ACE host encodings
88   var utf8 = "b\u00FCcher.dolske.org"; // "bücher.dolske.org"
89   var aceref = "xn--bcher-kva.dolske.org";
90   var uri = ioService.newURI("http://" + utf8, null, null);
91   pm.add(uri, "utf8", 1);
92   var enumerator = pm.enumerator;
93   do_check_eq(enumerator.hasMoreElements(), true);
94   var ace = enumerator.getNext().QueryInterface(Components.interfaces.nsIPermission);
95   do_check_eq(ace.host, aceref);
96   do_check_eq(enumerator.hasMoreElements(), false);
98   // test removeAll()
99   pm.removeAll();
100   do_check_eq(pm.enumerator.hasMoreElements(), false);