michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: // Test that permissions with specific expiry times behave as expected. michael@0: michael@0: let test_generator = do_run_test(); michael@0: michael@0: function run_test() { michael@0: do_test_pending(); michael@0: test_generator.next(); michael@0: } michael@0: michael@0: function continue_test() michael@0: { michael@0: do_run_generator(test_generator); michael@0: } michael@0: michael@0: function do_run_test() { michael@0: // Set up a profile. michael@0: let profile = do_get_profile(); michael@0: michael@0: let pm = Services.perms; michael@0: let permURI = NetUtil.newURI("http://example.com"); michael@0: let principal = Services.scriptSecurityManager.getNoAppCodebasePrincipal(permURI); michael@0: michael@0: let now = Number(Date.now()); michael@0: michael@0: // add a permission with *now* expiration michael@0: pm.addFromPrincipal(principal, "test/expiration-perm-exp", 1, pm.EXPIRE_TIME, now); michael@0: pm.addFromPrincipal(principal, "test/expiration-session-exp", 1, pm.EXPIRE_SESSION, now); michael@0: michael@0: // add a permission with future expiration (100 milliseconds) michael@0: pm.addFromPrincipal(principal, "test/expiration-perm-exp2", 1, pm.EXPIRE_TIME, now + 100); michael@0: pm.addFromPrincipal(principal, "test/expiration-session-exp2", 1, pm.EXPIRE_SESSION, now + 100); michael@0: michael@0: // add a permission with future expiration (1000 seconds) michael@0: pm.addFromPrincipal(principal, "test/expiration-perm-exp3", 1, pm.EXPIRE_TIME, now + 1e6); michael@0: pm.addFromPrincipal(principal, "test/expiration-session-exp3", 1, pm.EXPIRE_SESSION, now + 1e6); michael@0: michael@0: // add a permission without expiration michael@0: pm.addFromPrincipal(principal, "test/expiration-perm-nexp", 1, pm.EXPIRE_NEVER, 0); michael@0: michael@0: // add a permission for renewal michael@0: pm.addFromPrincipal(principal, "test/expiration-perm-renewable", 1, pm.EXPIRE_TIME, now + 100); michael@0: pm.addFromPrincipal(principal, "test/expiration-session-renewable", 1, pm.EXPIRE_SESSION, now + 100); michael@0: michael@0: // And immediately renew them with longer timeouts michael@0: pm.updateExpireTime(principal, "test/expiration-perm-renewable", true, now + 100, now + 1e6); michael@0: pm.updateExpireTime(principal, "test/expiration-session-renewable", true, now + 1e6, now + 100); michael@0: michael@0: // check that the second two haven't expired yet michael@0: do_check_eq(1, pm.testPermissionFromPrincipal(principal, "test/expiration-perm-exp3")); michael@0: do_check_eq(1, pm.testPermissionFromPrincipal(principal, "test/expiration-session-exp3")); michael@0: do_check_eq(1, pm.testPermissionFromPrincipal(principal, "test/expiration-perm-nexp")); michael@0: do_check_eq(1, pm.testPermissionFromPrincipal(principal, "test/expiration-perm-renewable")); michael@0: do_check_eq(1, pm.testPermissionFromPrincipal(principal, "test/expiration-session-renewable")); michael@0: michael@0: // ... and the first one has michael@0: do_timeout(10, continue_test); michael@0: yield; michael@0: do_check_eq(0, pm.testPermissionFromPrincipal(principal, "test/expiration-perm-exp")); michael@0: do_check_eq(0, pm.testPermissionFromPrincipal(principal, "test/expiration-session-exp")); michael@0: michael@0: // ... and that the short-term one will michael@0: do_timeout(200, continue_test); michael@0: yield; michael@0: do_check_eq(0, pm.testPermissionFromPrincipal(principal, "test/expiration-perm-exp2")); michael@0: do_check_eq(0, pm.testPermissionFromPrincipal(principal, "test/expiration-session-exp2")); michael@0: michael@0: // Check that .getPermission returns a matching result michael@0: do_check_null(pm.getPermissionObject(principal, "test/expiration-perm-exp", false)); michael@0: do_check_null(pm.getPermissionObject(principal, "test/expiration-session-exp", false)); michael@0: do_check_null(pm.getPermissionObject(principal, "test/expiration-perm-exp2", false)); michael@0: do_check_null(pm.getPermissionObject(principal, "test/expiration-session-exp2", false)); michael@0: michael@0: // Check that the renewable permissions actually got renewed michael@0: do_check_eq(1, pm.testPermissionFromPrincipal(principal, "test/expiration-perm-renewable")); michael@0: do_check_eq(1, pm.testPermissionFromPrincipal(principal, "test/expiration-session-renewable")); michael@0: michael@0: do_finish_generator_test(test_generator); michael@0: } michael@0: