tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 }