tor-browser

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

test_permmanager_removePermissionsWithAttributes.js (6020B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 add_task(function testRemovePermissionsByOriginAttributes() {
      5  // initialize the permission manager service
      6  let pm = Services.perms;
      7 
      8  Assert.equal(pm.all.length, 0, "Should start with no permissions");
      9 
     10  // add some permissions
     11  let attrs1 = {
     12    privateBrowsingId: 1,
     13  };
     14  let principal = Services.scriptSecurityManager.createContentPrincipal(
     15    Services.io.newURI("http://amazon.com:8080"),
     16    attrs1
     17  );
     18 
     19  let attrs2 = {
     20    partitionKey: "example.com",
     21    privateBrowsingId: 1,
     22  };
     23  let principal2 = Services.scriptSecurityManager.createContentPrincipal(
     24    Services.io.newURI("http://google.com:2048"),
     25    attrs2
     26  );
     27 
     28  let attrs3 = {
     29    privateBrowsingId: 0,
     30  };
     31  let principal3 = Services.scriptSecurityManager.createContentPrincipal(
     32    Services.io.newURI("https://google.com"),
     33    attrs3
     34  );
     35 
     36  let principal4 = Services.scriptSecurityManager.createContentPrincipal(
     37    Services.io.newURI("https://mozilla.org"),
     38    {}
     39  );
     40 
     41  pm.addFromPrincipal(principal, "type", Ci.nsIPermissionManager.ALLOW_ACTION);
     42  pm.addFromPrincipal(principal2, "type", Ci.nsIPermissionManager.ALLOW_ACTION);
     43  pm.addFromPrincipal(principal3, "type", Ci.nsIPermissionManager.ALLOW_ACTION);
     44  pm.addFromPrincipal(principal4, "type", Ci.nsIPermissionManager.ALLOW_ACTION);
     45 
     46  Assert.equal(pm.all.length, 4, "Check all permissions added");
     47 
     48  pm.removePermissionsWithAttributes(JSON.stringify(attrs1), [], []);
     49 
     50  // check exact match removed
     51  Assert.equal(
     52    pm.testPermissionFromPrincipal(
     53      principal,
     54      "type",
     55      "Check exact match removed"
     56    ),
     57    Ci.nsIPermissionManager.UNKNOWN_ACTION
     58  );
     59 
     60  // check non-exact match removed
     61  Assert.equal(
     62    pm.testPermissionFromPrincipal(
     63      principal2,
     64      "type",
     65      "Check non-exact match removed"
     66    ),
     67    Ci.nsIPermissionManager.UNKNOWN_ACTION
     68  );
     69 
     70  // check non-match not removed
     71  Assert.equal(
     72    pm.testPermissionFromPrincipal(
     73      principal3,
     74      "type",
     75      "Check non-match not removed"
     76    ),
     77    Ci.nsIPermissionManager.ALLOW_ACTION
     78  );
     79 
     80  // check default originattributes (privateBrowsingId=0) not removed
     81  Assert.equal(
     82    pm.testPermissionFromPrincipal(
     83      principal4,
     84      "type",
     85      "Check default not removed"
     86    ),
     87    Ci.nsIPermissionManager.ALLOW_ACTION
     88  );
     89 
     90  pm.removePermissionsWithAttributes(JSON.stringify({}), [], []);
     91 
     92  // check all removed
     93  Assert.equal(pm.all.length, 0, "All permissions should be removed");
     94 });
     95 
     96 add_task(function testRemovePermissionsByOriginAttributesWithExceptions() {
     97  // initialize the permission manager service
     98  let pm = Services.perms;
     99 
    100  Assert.equal(pm.all.length, 0, "Should start with no permissions");
    101 
    102  // add some permissions
    103  let attrs = { partitionKey: "mozilla.org" };
    104  let principal = Services.scriptSecurityManager.createContentPrincipal(
    105    Services.io.newURI("http://amazon.com:8080"),
    106    attrs
    107  );
    108 
    109  let principal2 = Services.scriptSecurityManager.createContentPrincipal(
    110    Services.io.newURI("http://google.com:2048"),
    111    attrs
    112  );
    113 
    114  let principal3 = Services.scriptSecurityManager.createContentPrincipal(
    115    Services.io.newURI("https://google.com"),
    116    {}
    117  );
    118 
    119  pm.addFromPrincipal(
    120    principal,
    121    "apple",
    122    Ci.nsIPermissionManager.PROMPT_ACTION
    123  );
    124  pm.addFromPrincipal(principal, "pear", Ci.nsIPermissionManager.ALLOW_ACTION);
    125  pm.addFromPrincipal(
    126    principal,
    127    "cucumber",
    128    Ci.nsIPermissionManager.ALLOW_ACTION
    129  );
    130  pm.addFromPrincipal(
    131    principal,
    132    "watermelon",
    133    Ci.nsIPermissionManager.ALLOW_ACTION
    134  );
    135 
    136  pm.addFromPrincipal(principal2, "apple", Ci.nsIPermissionManager.DENY_ACTION);
    137  pm.addFromPrincipal(principal2, "pear", Ci.nsIPermissionManager.DENY_ACTION);
    138 
    139  pm.addFromPrincipal(
    140    principal3,
    141    "cucumber",
    142    Ci.nsIPermissionManager.PROMPT_ACTION
    143  );
    144  pm.addFromPrincipal(
    145    principal3,
    146    "apple",
    147    Ci.nsIPermissionManager.ALLOW_ACTION
    148  );
    149 
    150  Assert.equal(pm.all.length, 8, "Check all permissions added");
    151 
    152  // remove all of type "apple" with originAttributes attrs
    153  pm.removePermissionsWithAttributes(JSON.stringify(attrs), ["apple"], []);
    154  Assert.equal(
    155    pm.all.length,
    156    6,
    157    '"apple" permissions with attr should be removed'
    158  );
    159 
    160  Assert.equal(pm.testPermissionFromPrincipal(principal, "apple"), 0);
    161  Assert.equal(
    162    pm.testPermissionFromPrincipal(principal, "pear"),
    163    Ci.nsIPermissionManager.ALLOW_ACTION
    164  );
    165  Assert.equal(
    166    pm.testPermissionFromPrincipal(principal, "cucumber"),
    167    Ci.nsIPermissionManager.ALLOW_ACTION
    168  );
    169  Assert.equal(
    170    pm.testPermissionFromPrincipal(principal, "watermelon"),
    171    Ci.nsIPermissionManager.ALLOW_ACTION
    172  );
    173 
    174  Assert.equal(
    175    pm.testPermissionFromPrincipal(principal2, "apple"),
    176    Ci.nsIPermissionManager.UNKNOWN_ACTION
    177  );
    178  Assert.equal(
    179    pm.testPermissionFromPrincipal(principal2, "pear"),
    180    Ci.nsIPermissionManager.DENY_ACTION
    181  );
    182 
    183  Assert.equal(
    184    pm.testPermissionFromPrincipal(principal3, "cucumber"),
    185    Ci.nsIPermissionManager.PROMPT_ACTION
    186  );
    187  Assert.equal(
    188    pm.testPermissionFromPrincipal(principal3, "apple"),
    189    Ci.nsIPermissionManager.ALLOW_ACTION
    190  );
    191 
    192  // remove rest except for perm with type "watermelon"
    193  pm.removePermissionsWithAttributes(JSON.stringify(attrs), [], ["watermelon"]);
    194  Assert.equal(
    195    pm.all.length,
    196    3,
    197    'All permissions with attrs should be removed except type "watermelon"'
    198  );
    199 
    200  Assert.equal(
    201    pm.testPermissionFromPrincipal(principal, "watermelon"),
    202    Ci.nsIPermissionManager.ALLOW_ACTION
    203  );
    204 
    205  Assert.equal(
    206    pm.testPermissionFromPrincipal(principal3, "cucumber"),
    207    Ci.nsIPermissionManager.PROMPT_ACTION
    208  );
    209  Assert.equal(
    210    pm.testPermissionFromPrincipal(principal3, "apple"),
    211    Ci.nsIPermissionManager.ALLOW_ACTION
    212  );
    213 
    214  // remove all
    215  pm.removePermissionsWithAttributes(JSON.stringify({}), [], []);
    216  Assert.equal(pm.all.length, 0, "All permissions should be removed");
    217 });