test_permmanager_expiration.js (4560B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 // Test that permissions with specific expiry times behave as expected. 5 var test_generator = do_run_test(); 6 7 function run_test() { 8 do_test_pending(); 9 test_generator.next(); 10 } 11 12 function continue_test() { 13 do_run_generator(test_generator); 14 } 15 16 function* do_run_test() { 17 let pm = Services.perms; 18 let permURI = NetUtil.newURI("http://example.com"); 19 let principal = Services.scriptSecurityManager.createContentPrincipal( 20 permURI, 21 {} 22 ); 23 24 let now = Number(Date.now()); 25 26 // add a permission with *now* expiration 27 pm.addFromPrincipal( 28 principal, 29 "test/expiration-perm-exp", 30 1, 31 pm.EXPIRE_TIME, 32 now 33 ); 34 pm.addFromPrincipal( 35 principal, 36 "test/expiration-session-exp", 37 1, 38 pm.EXPIRE_SESSION, 39 now 40 ); 41 42 // add a permission with future expiration (100 milliseconds) 43 pm.addFromPrincipal( 44 principal, 45 "test/expiration-perm-exp2", 46 1, 47 pm.EXPIRE_TIME, 48 now + 100 49 ); 50 pm.addFromPrincipal( 51 principal, 52 "test/expiration-session-exp2", 53 1, 54 pm.EXPIRE_SESSION, 55 now + 100 56 ); 57 58 // add a permission with future expiration (1000 seconds) 59 pm.addFromPrincipal( 60 principal, 61 "test/expiration-perm-exp3", 62 1, 63 pm.EXPIRE_TIME, 64 now + 1e6 65 ); 66 pm.addFromPrincipal( 67 principal, 68 "test/expiration-session-exp3", 69 1, 70 pm.EXPIRE_SESSION, 71 now + 1e6 72 ); 73 74 // add a permission without expiration 75 pm.addFromPrincipal( 76 principal, 77 "test/expiration-perm-nexp", 78 1, 79 pm.EXPIRE_NEVER, 80 0 81 ); 82 83 // check that the second two haven't expired yet 84 Assert.equal( 85 1, 86 pm.testPermissionFromPrincipal(principal, "test/expiration-perm-exp3") 87 ); 88 Assert.equal( 89 1, 90 pm.testPermissionFromPrincipal(principal, "test/expiration-session-exp3") 91 ); 92 Assert.equal( 93 1, 94 pm.testPermissionFromPrincipal(principal, "test/expiration-perm-nexp") 95 ); 96 Assert.equal(1, pm.getAllWithTypePrefix("test/expiration-perm-exp3").length); 97 Assert.equal( 98 1, 99 pm.getAllWithTypePrefix("test/expiration-session-exp3").length 100 ); 101 Assert.equal(1, pm.getAllWithTypePrefix("test/expiration-perm-nexp").length); 102 Assert.equal(5, pm.getAllForPrincipal(principal).length); 103 104 // ... and the first one has 105 do_timeout(10, continue_test); 106 yield; 107 Assert.equal( 108 0, 109 pm.testPermissionFromPrincipal(principal, "test/expiration-perm-exp") 110 ); 111 Assert.equal( 112 0, 113 pm.testPermissionFromPrincipal(principal, "test/expiration-session-exp") 114 ); 115 116 // ... and that the short-term one will 117 do_timeout(200, continue_test); 118 yield; 119 Assert.equal( 120 0, 121 pm.testPermissionFromPrincipal(principal, "test/expiration-perm-exp2") 122 ); 123 Assert.equal( 124 0, 125 pm.testPermissionFromPrincipal(principal, "test/expiration-session-exp2") 126 ); 127 Assert.equal(0, pm.getAllWithTypePrefix("test/expiration-perm-exp2").length); 128 Assert.equal( 129 0, 130 pm.getAllWithTypePrefix("test/expiration-session-exp2").length 131 ); 132 133 Assert.equal(3, pm.getAllForPrincipal(principal).length); 134 135 // Check that .getPermission returns a matching result 136 Assert.equal( 137 null, 138 pm.getPermissionObject(principal, "test/expiration-perm-exp", false) 139 ); 140 Assert.equal( 141 null, 142 pm.getPermissionObject(principal, "test/expiration-session-exp", false) 143 ); 144 Assert.equal( 145 null, 146 pm.getPermissionObject(principal, "test/expiration-perm-exp2", false) 147 ); 148 Assert.equal( 149 null, 150 pm.getPermissionObject(principal, "test/expiration-session-exp2", false) 151 ); 152 153 // Add a persistent permission for private browsing 154 let principalPB = Services.scriptSecurityManager.createContentPrincipal( 155 permURI, 156 { privateBrowsingId: 1 } 157 ); 158 pm.addFromPrincipal( 159 principalPB, 160 "test/expiration-session-pb", 161 pm.ALLOW_ACTION 162 ); 163 164 // The permission should be set to session expiry 165 let perm = pm.getPermissionObject( 166 principalPB, 167 "test/expiration-session-pb", 168 true 169 ); 170 Assert.equal(perm.expireType, pm.EXPIRE_SESSION); 171 172 // Add a persistent permission for private browsing using 173 // addFromPrincipalAndPersistInPrivateBrowsing 174 pm.addFromPrincipalAndPersistInPrivateBrowsing( 175 principalPB, 176 "test/expiration-session-pb", 177 pm.ALLOW_ACTION 178 ); 179 180 // The permission should be set to never expire 181 perm = pm.getPermissionObject( 182 principalPB, 183 "test/expiration-session-pb", 184 true 185 ); 186 Assert.equal(perm.expireType, pm.EXPIRE_NEVER); 187 188 do_finish_generator_test(test_generator); 189 }