|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
3 |
|
4 function getPrincipalFromURI(uri) { |
|
5 return Cc["@mozilla.org/scriptsecuritymanager;1"] |
|
6 .getService(Ci.nsIScriptSecurityManager) |
|
7 .getNoAppCodebasePrincipal(NetUtil.newURI(uri)); |
|
8 } |
|
9 |
|
10 function getSystemPrincipal() { |
|
11 return Cc["@mozilla.org/scriptsecuritymanager;1"] |
|
12 .getService(Ci.nsIScriptSecurityManager) |
|
13 .getSystemPrincipal(); |
|
14 } |
|
15 |
|
16 function run_test() { |
|
17 var pm = Cc["@mozilla.org/permissionmanager;1"]. |
|
18 getService(Ci.nsIPermissionManager); |
|
19 |
|
20 do_check_null(pm.getPermissionObject(getSystemPrincipal(), "test/pobject", false)); |
|
21 |
|
22 let principal = getPrincipalFromURI("http://example.com"); |
|
23 let subPrincipal = getPrincipalFromURI("http://sub.example.com"); |
|
24 let subSubPrincipal = getPrincipalFromURI("http://sub.sub.example.com"); |
|
25 |
|
26 do_check_null(pm.getPermissionObject(principal, "test/pobject", false)); |
|
27 do_check_null(pm.getPermissionObject(principal, "test/pobject", true)); |
|
28 |
|
29 pm.addFromPrincipal(principal, "test/pobject", pm.ALLOW_ACTION); |
|
30 var rootPerm = pm.getPermissionObject(principal, "test/pobject", false); |
|
31 do_check_true(rootPerm != null); |
|
32 do_check_eq(rootPerm.host, "example.com"); |
|
33 do_check_eq(rootPerm.type, "test/pobject"); |
|
34 do_check_eq(rootPerm.capability, pm.ALLOW_ACTION); |
|
35 do_check_eq(rootPerm.expireType, pm.EXPIRE_NEVER); |
|
36 |
|
37 var rootPerm2 = pm.getPermissionObject(principal, "test/pobject", true); |
|
38 do_check_true(rootPerm != null); |
|
39 do_check_eq(rootPerm.host, "example.com"); |
|
40 |
|
41 var subPerm = pm.getPermissionObject(subPrincipal, "test/pobject", true); |
|
42 do_check_null(subPerm); |
|
43 subPerm = pm.getPermissionObject(subPrincipal, "test/pobject", false); |
|
44 do_check_true(subPerm != null); |
|
45 do_check_eq(subPerm.host, "example.com"); |
|
46 do_check_eq(subPerm.type, "test/pobject"); |
|
47 do_check_eq(subPerm.capability, pm.ALLOW_ACTION); |
|
48 |
|
49 subPerm = pm.getPermissionObject(subSubPrincipal, "test/pobject", true); |
|
50 do_check_null(subPerm); |
|
51 subPerm = pm.getPermissionObject(subSubPrincipal, "test/pobject", false); |
|
52 do_check_true(subPerm != null); |
|
53 do_check_eq(subPerm.host, "example.com"); |
|
54 |
|
55 pm.addFromPrincipal(principal, "test/pobject", pm.DENY_ACTION, pm.EXPIRE_SESSION); |
|
56 |
|
57 // make sure permission objects are not dynamic |
|
58 do_check_eq(rootPerm.capability, pm.ALLOW_ACTION); |
|
59 |
|
60 // but do update on change |
|
61 rootPerm = pm.getPermissionObject(principal, "test/pobject", true); |
|
62 do_check_eq(rootPerm.capability, pm.DENY_ACTION); |
|
63 do_check_eq(rootPerm.expireType, pm.EXPIRE_SESSION); |
|
64 |
|
65 subPerm = pm.getPermissionObject(subPrincipal, "test/pobject", false); |
|
66 do_check_eq(subPerm.host, "example.com"); |
|
67 do_check_eq(subPerm.capability, pm.DENY_ACTION); |
|
68 do_check_eq(subPerm.expireType, pm.EXPIRE_SESSION); |
|
69 |
|
70 pm.addFromPrincipal(subPrincipal, "test/pobject", pm.PROMPT_ACTION); |
|
71 rootPerm = pm.getPermissionObject(principal, "test/pobject", true); |
|
72 do_check_eq(rootPerm.host, "example.com"); |
|
73 do_check_eq(rootPerm.capability, pm.DENY_ACTION); |
|
74 |
|
75 subPerm = pm.getPermissionObject(subPrincipal, "test/pobject", true); |
|
76 do_check_eq(subPerm.host, "sub.example.com"); |
|
77 do_check_eq(subPerm.capability, pm.PROMPT_ACTION); |
|
78 |
|
79 subPerm = pm.getPermissionObject(subPrincipal, "test/pobject", false); |
|
80 do_check_eq(subPerm.host, "sub.example.com"); |
|
81 do_check_eq(subPerm.capability, pm.PROMPT_ACTION); |
|
82 |
|
83 subPerm = pm.getPermissionObject(subSubPrincipal, "test/pobject", true); |
|
84 do_check_null(subPerm); |
|
85 |
|
86 subPerm = pm.getPermissionObject(subSubPrincipal, "test/pobject", false); |
|
87 do_check_eq(subPerm.host, "sub.example.com"); |
|
88 do_check_eq(subPerm.capability, pm.PROMPT_ACTION); |
|
89 |
|
90 pm.removeFromPrincipal(principal, "test/pobject"); |
|
91 |
|
92 rootPerm = pm.getPermissionObject(principal, "test/pobject", true); |
|
93 do_check_null(rootPerm); |
|
94 } |