test_permmanager_matchesuri.js (5262B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 function matches_always(perm, uris) { 5 uris.forEach(uri => { 6 Assert.ok( 7 perm.matchesURI(uri, true), 8 "perm: " + perm.principal.origin + ", URI: " + uri.spec 9 ); 10 Assert.ok( 11 perm.matchesURI(uri, false), 12 "perm: " + perm.principal.origin + ", URI: " + uri.spec 13 ); 14 }); 15 } 16 17 function matches_weak(perm, uris) { 18 uris.forEach(uri => { 19 Assert.ok( 20 !perm.matchesURI(uri, true), 21 "perm: " + perm.principal.origin + ", URI: " + uri.spec 22 ); 23 Assert.ok( 24 perm.matchesURI(uri, false), 25 "perm: " + perm.principal.origin + ", URI: " + uri.spec 26 ); 27 }); 28 } 29 30 function matches_never(perm, uris) { 31 uris.forEach(uri => { 32 Assert.ok( 33 !perm.matchesURI(uri, true), 34 "perm: " + perm.principal.origin + ", URI: " + uri.spec 35 ); 36 Assert.ok( 37 !perm.matchesURI(uri, false), 38 "perm: " + perm.principal.origin + ", URI: " + uri.spec 39 ); 40 }); 41 } 42 43 function mk_permission(uri) { 44 let pm = Services.perms; 45 46 let secMan = Services.scriptSecurityManager; 47 48 // Get the permission from the principal! 49 let principal = secMan.createContentPrincipal(uri, {}); 50 51 pm.addFromPrincipal(principal, "test/matchesuri", pm.ALLOW_ACTION); 52 let permission = pm.getPermissionObject(principal, "test/matchesuri", true); 53 54 return permission; 55 } 56 57 function run_test() { 58 // initialize the permission manager service 59 let pm = Services.perms; 60 61 let fileprefix = "file:///"; 62 if (Services.appinfo.OS == "WINNT") { 63 // Windows rejects files if they don't have a drive. See Bug 1180870 64 fileprefix += "c:/"; 65 } 66 67 // Add some permissions 68 let uri0 = NetUtil.newURI("http://google.com:9091/just/a/path"); 69 let uri1 = NetUtil.newURI("http://hangouts.google.com:9091/some/path"); 70 let uri2 = NetUtil.newURI("http://google.com:9091/"); 71 let uri3 = NetUtil.newURI("http://google.org:9091/"); 72 let uri4 = NetUtil.newURI("http://deeper.hangouts.google.com:9091/"); 73 let uri5 = NetUtil.newURI("https://google.com/just/a/path"); 74 let uri6 = NetUtil.newURI("https://hangouts.google.com"); 75 let uri7 = NetUtil.newURI("https://google.com/"); 76 77 let fileuri1 = NetUtil.newURI(fileprefix + "a/file/path"); 78 let fileuri2 = NetUtil.newURI(fileprefix + "a/file/path/deeper"); 79 let fileuri3 = NetUtil.newURI(fileprefix + "a/file/otherpath"); 80 81 { 82 let perm = mk_permission(uri0); 83 matches_always(perm, [uri0, uri2]); 84 matches_weak(perm, [uri1, uri4]); 85 matches_never(perm, [uri3, uri5, uri6, uri7, fileuri1, fileuri2, fileuri3]); 86 } 87 88 { 89 let perm = mk_permission(uri1); 90 matches_always(perm, [uri1]); 91 matches_weak(perm, [uri4]); 92 matches_never(perm, [ 93 uri0, 94 uri2, 95 uri3, 96 uri5, 97 uri6, 98 uri7, 99 fileuri1, 100 fileuri2, 101 fileuri3, 102 ]); 103 } 104 105 { 106 let perm = mk_permission(uri2); 107 matches_always(perm, [uri0, uri2]); 108 matches_weak(perm, [uri1, uri4]); 109 matches_never(perm, [uri3, uri5, uri6, uri7, fileuri1, fileuri2, fileuri3]); 110 } 111 112 { 113 let perm = mk_permission(uri3); 114 matches_always(perm, [uri3]); 115 matches_weak(perm, []); 116 matches_never(perm, [ 117 uri1, 118 uri2, 119 uri4, 120 uri5, 121 uri6, 122 uri7, 123 fileuri1, 124 fileuri2, 125 fileuri3, 126 ]); 127 } 128 129 { 130 let perm = mk_permission(uri4); 131 matches_always(perm, [uri4]); 132 matches_weak(perm, []); 133 matches_never(perm, [ 134 uri1, 135 uri2, 136 uri3, 137 uri5, 138 uri6, 139 uri7, 140 fileuri1, 141 fileuri2, 142 fileuri3, 143 ]); 144 } 145 146 { 147 let perm = mk_permission(uri5); 148 matches_always(perm, [uri5, uri7]); 149 matches_weak(perm, [uri6]); 150 matches_never(perm, [ 151 uri0, 152 uri1, 153 uri2, 154 uri3, 155 uri4, 156 fileuri1, 157 fileuri2, 158 fileuri3, 159 ]); 160 } 161 162 { 163 let perm = mk_permission(uri6); 164 matches_always(perm, [uri6]); 165 matches_weak(perm, []); 166 matches_never(perm, [ 167 uri0, 168 uri1, 169 uri2, 170 uri3, 171 uri4, 172 uri5, 173 uri7, 174 fileuri1, 175 fileuri2, 176 fileuri3, 177 ]); 178 } 179 180 { 181 let perm = mk_permission(uri7); 182 matches_always(perm, [uri5, uri7]); 183 matches_weak(perm, [uri6]); 184 matches_never(perm, [ 185 uri0, 186 uri1, 187 uri2, 188 uri3, 189 uri4, 190 fileuri1, 191 fileuri2, 192 fileuri3, 193 ]); 194 } 195 196 { 197 let perm = mk_permission(fileuri1); 198 matches_always(perm, [fileuri1]); 199 matches_weak(perm, []); 200 matches_never(perm, [ 201 uri0, 202 uri1, 203 uri2, 204 uri3, 205 uri4, 206 uri5, 207 uri6, 208 uri7, 209 fileuri2, 210 fileuri3, 211 ]); 212 } 213 214 { 215 let perm = mk_permission(fileuri2); 216 matches_always(perm, [fileuri2]); 217 matches_weak(perm, []); 218 matches_never(perm, [ 219 uri0, 220 uri1, 221 uri2, 222 uri3, 223 uri4, 224 uri5, 225 uri6, 226 uri7, 227 fileuri1, 228 fileuri3, 229 ]); 230 } 231 232 { 233 let perm = mk_permission(fileuri3); 234 matches_always(perm, [fileuri3]); 235 matches_weak(perm, []); 236 matches_never(perm, [ 237 uri0, 238 uri1, 239 uri2, 240 uri3, 241 uri4, 242 uri5, 243 uri6, 244 uri7, 245 fileuri1, 246 fileuri2, 247 ]); 248 } 249 250 // Clean up! 251 pm.removeAll(); 252 }