Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
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 }