|
1 // tests nsIPermissionManager |
|
2 |
|
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 ]; |
|
12 |
|
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 ]; |
|
31 |
|
32 function run_test() { |
|
33 var pm = Components.classes["@mozilla.org/permissionmanager;1"] |
|
34 .getService(Components.interfaces.nsIPermissionManager); |
|
35 |
|
36 var ioService = Components.classes["@mozilla.org/network/io-service;1"] |
|
37 .getService(Components.interfaces.nsIIOService); |
|
38 |
|
39 var secMan = Components.classes["@mozilla.org/scriptsecuritymanager;1"] |
|
40 .getService(Components.interfaces.nsIScriptSecurityManager); |
|
41 |
|
42 // nsIPermissionManager implementation is an extension; don't fail if it's not there |
|
43 if (!pm) |
|
44 return; |
|
45 |
|
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); |
|
50 |
|
51 pm.addFromPrincipal(principal, hosts[i][1], hosts[i][2]); |
|
52 } |
|
53 |
|
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); |
|
58 |
|
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 } |
|
62 |
|
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); |
|
72 |
|
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); |
|
77 |
|
78 pm.removeFromPrincipal(principal, perms[j].type); |
|
79 } |
|
80 |
|
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); |
|
93 |
|
94 // ... and check the permmgr's empty |
|
95 do_check_eq(pm.enumerator.hasMoreElements(), false); |
|
96 |
|
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); |
|
107 |
|
108 // test removeAll() |
|
109 pm.removeAll(); |
|
110 do_check_eq(pm.enumerator.hasMoreElements(), false); |
|
111 } |