tor-browser

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

test_permmanager_matchesuri.js (5262B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 function matches_always(perm, uris) {
      5  uris.forEach(uri => {
      6    Assert.ok(
      7      perm.matchesURI(uri, true),
      8      "perm: " + perm.principal.origin + ", URI: " + uri.spec
      9    );
     10    Assert.ok(
     11      perm.matchesURI(uri, false),
     12      "perm: " + perm.principal.origin + ", URI: " + uri.spec
     13    );
     14  });
     15 }
     16 
     17 function matches_weak(perm, uris) {
     18  uris.forEach(uri => {
     19    Assert.ok(
     20      !perm.matchesURI(uri, true),
     21      "perm: " + perm.principal.origin + ", URI: " + uri.spec
     22    );
     23    Assert.ok(
     24      perm.matchesURI(uri, false),
     25      "perm: " + perm.principal.origin + ", URI: " + uri.spec
     26    );
     27  });
     28 }
     29 
     30 function matches_never(perm, uris) {
     31  uris.forEach(uri => {
     32    Assert.ok(
     33      !perm.matchesURI(uri, true),
     34      "perm: " + perm.principal.origin + ", URI: " + uri.spec
     35    );
     36    Assert.ok(
     37      !perm.matchesURI(uri, false),
     38      "perm: " + perm.principal.origin + ", URI: " + uri.spec
     39    );
     40  });
     41 }
     42 
     43 function mk_permission(uri) {
     44  let pm = Services.perms;
     45 
     46  let secMan = Services.scriptSecurityManager;
     47 
     48  // Get the permission from the principal!
     49  let principal = secMan.createContentPrincipal(uri, {});
     50 
     51  pm.addFromPrincipal(principal, "test/matchesuri", pm.ALLOW_ACTION);
     52  let permission = pm.getPermissionObject(principal, "test/matchesuri", true);
     53 
     54  return permission;
     55 }
     56 
     57 function run_test() {
     58  // initialize the permission manager service
     59  let pm = Services.perms;
     60 
     61  let fileprefix = "file:///";
     62  if (Services.appinfo.OS == "WINNT") {
     63    // Windows rejects files if they don't have a drive. See Bug 1180870
     64    fileprefix += "c:/";
     65  }
     66 
     67  // Add some permissions
     68  let uri0 = NetUtil.newURI("http://google.com:9091/just/a/path");
     69  let uri1 = NetUtil.newURI("http://hangouts.google.com:9091/some/path");
     70  let uri2 = NetUtil.newURI("http://google.com:9091/");
     71  let uri3 = NetUtil.newURI("http://google.org:9091/");
     72  let uri4 = NetUtil.newURI("http://deeper.hangouts.google.com:9091/");
     73  let uri5 = NetUtil.newURI("https://google.com/just/a/path");
     74  let uri6 = NetUtil.newURI("https://hangouts.google.com");
     75  let uri7 = NetUtil.newURI("https://google.com/");
     76 
     77  let fileuri1 = NetUtil.newURI(fileprefix + "a/file/path");
     78  let fileuri2 = NetUtil.newURI(fileprefix + "a/file/path/deeper");
     79  let fileuri3 = NetUtil.newURI(fileprefix + "a/file/otherpath");
     80 
     81  {
     82    let perm = mk_permission(uri0);
     83    matches_always(perm, [uri0, uri2]);
     84    matches_weak(perm, [uri1, uri4]);
     85    matches_never(perm, [uri3, uri5, uri6, uri7, fileuri1, fileuri2, fileuri3]);
     86  }
     87 
     88  {
     89    let perm = mk_permission(uri1);
     90    matches_always(perm, [uri1]);
     91    matches_weak(perm, [uri4]);
     92    matches_never(perm, [
     93      uri0,
     94      uri2,
     95      uri3,
     96      uri5,
     97      uri6,
     98      uri7,
     99      fileuri1,
    100      fileuri2,
    101      fileuri3,
    102    ]);
    103  }
    104 
    105  {
    106    let perm = mk_permission(uri2);
    107    matches_always(perm, [uri0, uri2]);
    108    matches_weak(perm, [uri1, uri4]);
    109    matches_never(perm, [uri3, uri5, uri6, uri7, fileuri1, fileuri2, fileuri3]);
    110  }
    111 
    112  {
    113    let perm = mk_permission(uri3);
    114    matches_always(perm, [uri3]);
    115    matches_weak(perm, []);
    116    matches_never(perm, [
    117      uri1,
    118      uri2,
    119      uri4,
    120      uri5,
    121      uri6,
    122      uri7,
    123      fileuri1,
    124      fileuri2,
    125      fileuri3,
    126    ]);
    127  }
    128 
    129  {
    130    let perm = mk_permission(uri4);
    131    matches_always(perm, [uri4]);
    132    matches_weak(perm, []);
    133    matches_never(perm, [
    134      uri1,
    135      uri2,
    136      uri3,
    137      uri5,
    138      uri6,
    139      uri7,
    140      fileuri1,
    141      fileuri2,
    142      fileuri3,
    143    ]);
    144  }
    145 
    146  {
    147    let perm = mk_permission(uri5);
    148    matches_always(perm, [uri5, uri7]);
    149    matches_weak(perm, [uri6]);
    150    matches_never(perm, [
    151      uri0,
    152      uri1,
    153      uri2,
    154      uri3,
    155      uri4,
    156      fileuri1,
    157      fileuri2,
    158      fileuri3,
    159    ]);
    160  }
    161 
    162  {
    163    let perm = mk_permission(uri6);
    164    matches_always(perm, [uri6]);
    165    matches_weak(perm, []);
    166    matches_never(perm, [
    167      uri0,
    168      uri1,
    169      uri2,
    170      uri3,
    171      uri4,
    172      uri5,
    173      uri7,
    174      fileuri1,
    175      fileuri2,
    176      fileuri3,
    177    ]);
    178  }
    179 
    180  {
    181    let perm = mk_permission(uri7);
    182    matches_always(perm, [uri5, uri7]);
    183    matches_weak(perm, [uri6]);
    184    matches_never(perm, [
    185      uri0,
    186      uri1,
    187      uri2,
    188      uri3,
    189      uri4,
    190      fileuri1,
    191      fileuri2,
    192      fileuri3,
    193    ]);
    194  }
    195 
    196  {
    197    let perm = mk_permission(fileuri1);
    198    matches_always(perm, [fileuri1]);
    199    matches_weak(perm, []);
    200    matches_never(perm, [
    201      uri0,
    202      uri1,
    203      uri2,
    204      uri3,
    205      uri4,
    206      uri5,
    207      uri6,
    208      uri7,
    209      fileuri2,
    210      fileuri3,
    211    ]);
    212  }
    213 
    214  {
    215    let perm = mk_permission(fileuri2);
    216    matches_always(perm, [fileuri2]);
    217    matches_weak(perm, []);
    218    matches_never(perm, [
    219      uri0,
    220      uri1,
    221      uri2,
    222      uri3,
    223      uri4,
    224      uri5,
    225      uri6,
    226      uri7,
    227      fileuri1,
    228      fileuri3,
    229    ]);
    230  }
    231 
    232  {
    233    let perm = mk_permission(fileuri3);
    234    matches_always(perm, [fileuri3]);
    235    matches_weak(perm, []);
    236    matches_never(perm, [
    237      uri0,
    238      uri1,
    239      uri2,
    240      uri3,
    241      uri4,
    242      uri5,
    243      uri6,
    244      uri7,
    245      fileuri1,
    246      fileuri2,
    247    ]);
    248  }
    249 
    250  // Clean up!
    251  pm.removeAll();
    252 }