test_permissions.js (11230B)
1 /* Any copyright is dedicated to the Public Domain. 2 * http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 function URI(str) { 7 return Services.io.newURI(str); 8 } 9 10 add_task(async function test_setup_preexisting_permissions() { 11 // Pre-existing ALLOW permissions that should be overridden 12 // with DENY. 13 14 // No ALLOW -> DENY override for popup and install permissions, 15 // because their policies only supports the Allow parameter. 16 17 PermissionTestUtils.add( 18 "https://www.pre-existing-allow.com", 19 "camera", 20 Ci.nsIPermissionManager.ALLOW_ACTION, 21 Ci.nsIPermissionManager.EXPIRE_SESSION 22 ); 23 PermissionTestUtils.add( 24 "https://www.pre-existing-allow.com", 25 "microphone", 26 Ci.nsIPermissionManager.ALLOW_ACTION, 27 Ci.nsIPermissionManager.EXPIRE_SESSION 28 ); 29 PermissionTestUtils.add( 30 "https://www.pre-existing-allow.com", 31 "geo", 32 Ci.nsIPermissionManager.ALLOW_ACTION, 33 Ci.nsIPermissionManager.EXPIRE_SESSION 34 ); 35 PermissionTestUtils.add( 36 "https://www.pre-existing-allow.com", 37 "desktop-notification", 38 Ci.nsIPermissionManager.ALLOW_ACTION, 39 Ci.nsIPermissionManager.EXPIRE_SESSION 40 ); 41 PermissionTestUtils.add( 42 "https://www.pre-existing-allow.com", 43 "autoplay-media", 44 Ci.nsIPermissionManager.ALLOW_ACTION, 45 Ci.nsIPermissionManager.EXPIRE_SESSION 46 ); 47 PermissionTestUtils.add( 48 "https://www.pre-existing-allow.com", 49 "xr", 50 Ci.nsIPermissionManager.ALLOW_ACTION, 51 Ci.nsIPermissionManager.EXPIRE_SESSION 52 ); 53 54 // Pre-existing DENY permissions that should be overridden 55 // with ALLOW. 56 57 PermissionTestUtils.add( 58 "https://www.pre-existing-deny.com", 59 "camera", 60 Ci.nsIPermissionManager.DENY_ACTION, 61 Ci.nsIPermissionManager.EXPIRE_SESSION 62 ); 63 PermissionTestUtils.add( 64 "https://www.pre-existing-deny.com", 65 "microphone", 66 Ci.nsIPermissionManager.DENY_ACTION, 67 Ci.nsIPermissionManager.EXPIRE_SESSION 68 ); 69 PermissionTestUtils.add( 70 "https://www.pre-existing-deny.com", 71 "geo", 72 Ci.nsIPermissionManager.DENY_ACTION, 73 Ci.nsIPermissionManager.EXPIRE_SESSION 74 ); 75 PermissionTestUtils.add( 76 "https://www.pre-existing-deny.com", 77 "desktop-notification", 78 Ci.nsIPermissionManager.DENY_ACTION, 79 Ci.nsIPermissionManager.EXPIRE_SESSION 80 ); 81 PermissionTestUtils.add( 82 "https://www.pre-existing-deny.com", 83 "autoplay-media", 84 Ci.nsIPermissionManager.DENY_ACTION, 85 Ci.nsIPermissionManager.EXPIRE_SESSION 86 ); 87 PermissionTestUtils.add( 88 "https://www.pre-existing-deny.com", 89 "xr", 90 Ci.nsIPermissionManager.DENY_ACTION, 91 Ci.nsIPermissionManager.EXPIRE_SESSION 92 ); 93 }); 94 95 add_task(async function test_setup_activate_policies() { 96 await setupPolicyEngineWithJson({ 97 policies: { 98 Permissions: { 99 Camera: { 100 Allow: ["https://www.allow.com", "https://www.pre-existing-deny.com"], 101 Block: ["https://www.deny.com", "https://www.pre-existing-allow.com"], 102 }, 103 Microphone: { 104 Allow: ["https://www.allow.com", "https://www.pre-existing-deny.com"], 105 Block: ["https://www.deny.com", "https://www.pre-existing-allow.com"], 106 }, 107 Location: { 108 Allow: ["https://www.allow.com", "https://www.pre-existing-deny.com"], 109 Block: ["https://www.deny.com", "https://www.pre-existing-allow.com"], 110 }, 111 Notifications: { 112 Allow: ["https://www.allow.com", "https://www.pre-existing-deny.com"], 113 Block: ["https://www.deny.com", "https://www.pre-existing-allow.com"], 114 }, 115 Autoplay: { 116 Allow: ["https://www.allow.com", "https://www.pre-existing-deny.com"], 117 Block: ["https://www.deny.com", "https://www.pre-existing-allow.com"], 118 }, 119 VirtualReality: { 120 Allow: ["https://www.allow.com", "https://www.pre-existing-deny.com"], 121 Block: ["https://www.deny.com", "https://www.pre-existing-allow.com"], 122 }, 123 ScreenShare: { 124 Allow: ["https://www.allow.com", "https://www.pre-existing-deny.com"], 125 Block: ["https://www.deny.com", "https://www.pre-existing-allow.com"], 126 }, 127 }, 128 }, 129 }); 130 equal( 131 Services.policies.status, 132 Ci.nsIEnterprisePolicies.ACTIVE, 133 "Engine is active" 134 ); 135 }); 136 137 function checkPermission(url, expected, permissionName) { 138 let expectedValue = Ci.nsIPermissionManager[`${expected}_ACTION`]; 139 let uri = Services.io.newURI(`https://www.${url}`); 140 141 equal( 142 PermissionTestUtils.testPermission(uri, permissionName), 143 expectedValue, 144 `Correct (${permissionName}=${expected}) for URL ${url}` 145 ); 146 147 if (expected != "UNKNOWN") { 148 let permission = PermissionTestUtils.getPermissionObject( 149 uri, 150 permissionName, 151 true 152 ); 153 ok(permission, "Permission object exists"); 154 equal( 155 permission.expireType, 156 Ci.nsIPermissionManager.EXPIRE_POLICY, 157 "Permission expireType is correct" 158 ); 159 } 160 } 161 162 function checkAllPermissionsForType(type, typeSupportsDeny = true) { 163 checkPermission("allow.com", "ALLOW", type); 164 checkPermission("unknown.com", "UNKNOWN", type); 165 checkPermission("pre-existing-deny.com", "ALLOW", type); 166 167 if (typeSupportsDeny) { 168 checkPermission("deny.com", "DENY", type); 169 checkPermission("pre-existing-allow.com", "DENY", type); 170 } 171 } 172 173 add_task(async function test_camera_policy() { 174 checkAllPermissionsForType("camera"); 175 }); 176 177 add_task(async function test_microphone_policy() { 178 checkAllPermissionsForType("microphone"); 179 }); 180 181 add_task(async function test_location_policy() { 182 checkAllPermissionsForType("geo"); 183 }); 184 185 add_task(async function test_notifications_policy() { 186 checkAllPermissionsForType("desktop-notification"); 187 }); 188 189 add_task(async function test_autoplay_policy() { 190 checkAllPermissionsForType("autoplay-media"); 191 }); 192 193 add_task(async function test_xr_policy() { 194 checkAllPermissionsForType("xr"); 195 }); 196 197 add_task(async function test_change_permission() { 198 // Checks that changing a permission will still retain the 199 // value set through the engine. 200 PermissionTestUtils.add( 201 "https://www.allow.com", 202 "camera", 203 Ci.nsIPermissionManager.DENY_ACTION, 204 Ci.nsIPermissionManager.EXPIRE_SESSION 205 ); 206 PermissionTestUtils.add( 207 "https://www.allow.com", 208 "microphone", 209 Ci.nsIPermissionManager.DENY_ACTION, 210 Ci.nsIPermissionManager.EXPIRE_SESSION 211 ); 212 PermissionTestUtils.add( 213 "https://www.allow.com", 214 "geo", 215 Ci.nsIPermissionManager.DENY_ACTION, 216 Ci.nsIPermissionManager.EXPIRE_SESSION 217 ); 218 PermissionTestUtils.add( 219 "https://www.allow.com", 220 "desktop-notification", 221 Ci.nsIPermissionManager.DENY_ACTION, 222 Ci.nsIPermissionManager.EXPIRE_SESSION 223 ); 224 PermissionTestUtils.add( 225 "https://www.allow.com", 226 "autoplay-media", 227 Ci.nsIPermissionManager.DENY_ACTION, 228 Ci.nsIPermissionManager.EXPIRE_SESSION 229 ); 230 PermissionTestUtils.add( 231 "https://www.allow.com", 232 "xr", 233 Ci.nsIPermissionManager.DENY_ACTION, 234 Ci.nsIPermissionManager.EXPIRE_SESSION 235 ); 236 PermissionTestUtils.add( 237 "https://www.allow.com", 238 "screen", 239 Ci.nsIPermissionManager.DENY_ACTION, 240 Ci.nsIPermissionManager.EXPIRE_SESSION 241 ); 242 243 checkPermission("allow.com", "ALLOW", "camera"); 244 checkPermission("allow.com", "ALLOW", "microphone"); 245 checkPermission("allow.com", "ALLOW", "geo"); 246 checkPermission("allow.com", "ALLOW", "desktop-notification"); 247 checkPermission("allow.com", "ALLOW", "autoplay-media"); 248 checkPermission("allow.com", "ALLOW", "xr"); 249 checkPermission("allow.com", "ALLOW", "screen"); 250 251 // Also change one un-managed permission to make sure it doesn't 252 // cause any problems to the policy engine or the permission manager. 253 PermissionTestUtils.add( 254 "https://www.unmanaged.com", 255 "camera", 256 Ci.nsIPermissionManager.DENY_ACTION, 257 Ci.nsIPermissionManager.EXPIRE_SESSION 258 ); 259 PermissionTestUtils.add( 260 "https://www.unmanaged.com", 261 "microphone", 262 Ci.nsIPermissionManager.DENY_ACTION, 263 Ci.nsIPermissionManager.EXPIRE_SESSION 264 ); 265 PermissionTestUtils.add( 266 "https://www.unmanaged.com", 267 "geo", 268 Ci.nsIPermissionManager.DENY_ACTION, 269 Ci.nsIPermissionManager.EXPIRE_SESSION 270 ); 271 PermissionTestUtils.add( 272 "https://www.unmanaged.com", 273 "desktop-notification", 274 Ci.nsIPermissionManager.DENY_ACTION, 275 Ci.nsIPermissionManager.EXPIRE_SESSION 276 ); 277 PermissionTestUtils.add( 278 "https://www.unmanaged.com", 279 "autoplay-media", 280 Ci.nsIPermissionManager.DENY_ACTION, 281 Ci.nsIPermissionManager.EXPIRE_SESSION 282 ); 283 PermissionTestUtils.add( 284 "https://www.unmanaged.com", 285 "xr", 286 Ci.nsIPermissionManager.DENY_ACTION, 287 Ci.nsIPermissionManager.EXPIRE_SESSION 288 ); 289 PermissionTestUtils.add( 290 "https://www.unmanaged.com", 291 "screen", 292 Ci.nsIPermissionManager.DENY_ACTION, 293 Ci.nsIPermissionManager.EXPIRE_SESSION 294 ); 295 }); 296 297 add_task(async function test_setup_trackingprotection() { 298 await setupPolicyEngineWithJson({ 299 policies: { 300 EnableTrackingProtection: { 301 Exceptions: ["https://www.allow.com"], 302 }, 303 }, 304 }); 305 equal( 306 Services.policies.status, 307 Ci.nsIEnterprisePolicies.ACTIVE, 308 "Engine is active" 309 ); 310 }); 311 312 add_task(async function test_trackingprotection() { 313 checkPermission("allow.com", "ALLOW", "trackingprotection"); 314 }); 315 316 // This seems a little out of place, but it's really a cookie 317 // permission, not cookies per say. 318 add_task(async function test_cookie_allow_session() { 319 await setupPolicyEngineWithJson({ 320 policies: { 321 Cookies: { 322 AllowSession: ["https://allowsession.example.com"], 323 }, 324 }, 325 }); 326 equal( 327 PermissionTestUtils.testPermission( 328 URI("https://allowsession.example.com"), 329 "cookie" 330 ), 331 Ci.nsICookiePermission.ACCESS_SESSION 332 ); 333 }); 334 335 // This again seems out of place, but AutoLaunchProtocolsFromOrigins 336 // is all permissions. 337 add_task(async function test_autolaunchprotocolsfromorigins() { 338 await setupPolicyEngineWithJson({ 339 policies: { 340 AutoLaunchProtocolsFromOrigins: [ 341 { 342 allowed_origins: ["https://allowsession.example.com"], 343 protocol: "test-protocol", 344 }, 345 ], 346 }, 347 }); 348 equal( 349 PermissionTestUtils.testPermission( 350 URI("https://allowsession.example.com"), 351 "open-protocol-handler^test-protocol" 352 ), 353 Ci.nsIPermissionManager.ALLOW_ACTION 354 ); 355 }); 356 357 // This again seems out of place, but PasswordManagerExceptions 358 // is all permissions. 359 add_task(async function test_passwordmanagerexceptions() { 360 await setupPolicyEngineWithJson({ 361 policies: { 362 PasswordManagerExceptions: ["https://pwexception.example.com"], 363 }, 364 }); 365 equal( 366 PermissionTestUtils.testPermission( 367 URI("https://pwexception.example.com"), 368 "login-saving" 369 ), 370 Ci.nsIPermissionManager.DENY_ACTION 371 ); 372 }); 373 374 // This again seems out of place, but HttpAllowlist 375 // is all permissions. 376 add_task(async function test_httpsonly_exceptions() { 377 await setupPolicyEngineWithJson({ 378 policies: { 379 HttpAllowlist: ["https://http.example.com"], 380 }, 381 }); 382 equal( 383 PermissionTestUtils.testPermission( 384 URI("https://http.example.com"), 385 "https-only-load-insecure" 386 ), 387 Ci.nsIPermissionManager.ALLOW_ACTION 388 ); 389 });