tor-browser

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

test_IPPExceptionsManager.js (3060B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 https://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 const { IPPExceptionsManager } = ChromeUtils.importESModule(
      7  "moz-src:///browser/components/ipprotection/IPPExceptionsManager.sys.mjs"
      8 );
      9 
     10 const ONBOARDING_MESSAGE_MASK_PREF =
     11  "browser.ipProtection.onboardingMessageMask";
     12 
     13 /**
     14 * Tests the manager can modify exclusions in ipp-vpn permission.
     15 */
     16 add_task(async function test_IPPExceptionsManager_exclusions() {
     17  const site1 = "https://www.example.com";
     18  const site2 = "https://www.another.example.com";
     19 
     20  IPPExceptionsManager.init();
     21 
     22  // Make mock principals and add two exclusions
     23  let contentPrincipal1 =
     24    Services.scriptSecurityManager.createContentPrincipalFromOrigin(site1);
     25  let contentPrincipal2 =
     26    Services.scriptSecurityManager.createContentPrincipalFromOrigin(site2);
     27 
     28  // Add two exclusions
     29  IPPExceptionsManager.addExclusion(contentPrincipal1);
     30  IPPExceptionsManager.addExclusion(contentPrincipal2);
     31 
     32  // Verify that hasExclusion can detect the newly added sites
     33  let site1Exists = IPPExceptionsManager.hasExclusion(contentPrincipal1);
     34  let site2Exists = IPPExceptionsManager.hasExclusion(contentPrincipal2);
     35 
     36  Assert.ok(site1Exists, `hasExclusion correctly states that ${site1} exists`);
     37  Assert.ok(site2Exists, `hasExclusion correctly states that ${site2} exists`);
     38 
     39  // Verify the permission data
     40  let permissionObj1 =
     41    IPPExceptionsManager.getExceptionPermissionObject(contentPrincipal1);
     42  let permissionObj2 =
     43    IPPExceptionsManager.getExceptionPermissionObject(contentPrincipal2);
     44 
     45  Assert.equal(
     46    permissionObj1?.capability,
     47    Ci.nsIPermissionManager.DENY_ACTION,
     48    `getExceptionPermissionObject correctly states that ${site1} exists and has capability DENY`
     49  );
     50  Assert.equal(
     51    permissionObj2?.capability,
     52    Ci.nsIPermissionManager.DENY_ACTION,
     53    `getExceptionPermissionObject correctly states that ${site2} exists and has capability DENY`
     54  );
     55 
     56  // Now remove the exceptions
     57  IPPExceptionsManager.removeExclusion(contentPrincipal1);
     58  IPPExceptionsManager.removeExclusion(contentPrincipal2);
     59 
     60  // Verify that hasExclusion no longer detects the recently removed sites
     61  site1Exists = IPPExceptionsManager.hasExclusion(contentPrincipal1);
     62  site2Exists = IPPExceptionsManager.hasExclusion(contentPrincipal2);
     63 
     64  Assert.ok(
     65    !site1Exists,
     66    `hasExclusion correctly states that ${site1} no longer exists`
     67  );
     68  Assert.ok(
     69    !site2Exists,
     70    `hasExclusion correctly states that ${site2} no longer exists`
     71  );
     72 
     73  // Verify the permission data no longer exists
     74  permissionObj1 =
     75    IPPExceptionsManager.getExceptionPermissionObject(contentPrincipal1);
     76  permissionObj2 =
     77    IPPExceptionsManager.getExceptionPermissionObject(contentPrincipal2);
     78 
     79  Assert.ok(!permissionObj1, `Permission object for ${site1} no longer exists`);
     80  Assert.ok(!permissionObj2, `Permission object for ${site2} no longer exists`);
     81 
     82  Services.prefs.clearUserPref(ONBOARDING_MESSAGE_MASK_PREF);
     83  IPPExceptionsManager.uninit();
     84 });