tor-browser

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

browser_temporary_permissions_tabs.js (3985B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 * http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 // Test that temp permissions are persisted through moving tabs to new windows.
      7 add_task(async function testTempPermissionOnTabMove() {
      8  let origin = "https://example.com/";
      9  let principal =
     10    Services.scriptSecurityManager.createContentPrincipalFromOrigin(origin);
     11  let id = "geo";
     12 
     13  let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, origin);
     14 
     15  SitePermissions.setForPrincipal(
     16    principal,
     17    id,
     18    SitePermissions.BLOCK,
     19    SitePermissions.SCOPE_TEMPORARY,
     20    tab.linkedBrowser
     21  );
     22 
     23  Assert.deepEqual(
     24    SitePermissions.getForPrincipal(principal, id, tab.linkedBrowser),
     25    {
     26      state: SitePermissions.BLOCK,
     27      scope: SitePermissions.SCOPE_TEMPORARY,
     28    }
     29  );
     30 
     31  let promiseWin = BrowserTestUtils.waitForNewWindow();
     32  gBrowser.replaceTabWithWindow(tab);
     33  let win = await promiseWin;
     34  tab = win.gBrowser.selectedTab;
     35 
     36  Assert.deepEqual(
     37    SitePermissions.getForPrincipal(principal, id, tab.linkedBrowser),
     38    {
     39      state: SitePermissions.BLOCK,
     40      scope: SitePermissions.SCOPE_TEMPORARY,
     41    }
     42  );
     43 
     44  SitePermissions.removeFromPrincipal(principal, id, tab.linkedBrowser);
     45  await BrowserTestUtils.closeWindow(win);
     46 });
     47 
     48 // Test that temp permissions don't affect other tabs of the same URI.
     49 add_task(async function testTempPermissionMultipleTabs() {
     50  let origin = "https://example.com/";
     51  let principal =
     52    Services.scriptSecurityManager.createContentPrincipalFromOrigin(origin);
     53  let id = "geo";
     54 
     55  let tab1 = await BrowserTestUtils.openNewForegroundTab(gBrowser, origin);
     56  let tab2 = await BrowserTestUtils.openNewForegroundTab(gBrowser, origin);
     57 
     58  SitePermissions.setForPrincipal(
     59    principal,
     60    id,
     61    SitePermissions.BLOCK,
     62    SitePermissions.SCOPE_TEMPORARY,
     63    tab2.linkedBrowser
     64  );
     65 
     66  Assert.deepEqual(
     67    SitePermissions.getForPrincipal(principal, id, tab2.linkedBrowser),
     68    {
     69      state: SitePermissions.BLOCK,
     70      scope: SitePermissions.SCOPE_TEMPORARY,
     71    }
     72  );
     73 
     74  Assert.deepEqual(
     75    SitePermissions.getForPrincipal(principal, id, tab1.linkedBrowser),
     76    {
     77      state: SitePermissions.UNKNOWN,
     78      scope: SitePermissions.SCOPE_PERSISTENT,
     79    }
     80  );
     81 
     82  let geoIcon = document.querySelector(
     83    ".blocked-permission-icon[data-permission-id=geo]"
     84  );
     85 
     86  Assert.notEqual(
     87    geoIcon.getBoundingClientRect().width,
     88    0,
     89    "geo anchor should be visible"
     90  );
     91 
     92  await BrowserTestUtils.switchTab(gBrowser, tab1);
     93 
     94  Assert.equal(
     95    geoIcon.getBoundingClientRect().width,
     96    0,
     97    "geo anchor should not be visible"
     98  );
     99 
    100  SitePermissions.removeFromPrincipal(principal, id, tab2.linkedBrowser);
    101  BrowserTestUtils.removeTab(tab1);
    102  BrowserTestUtils.removeTab(tab2);
    103 });
    104 
    105 // Test that temp permissions are cleared when closing tabs.
    106 add_task(async function testTempPermissionOnTabClose() {
    107  let origin = "https://example.com/";
    108  let principal =
    109    Services.scriptSecurityManager.createContentPrincipalFromOrigin(origin);
    110  let id = "geo";
    111 
    112  ok(
    113    !SitePermissions._temporaryPermissions._stateByBrowser.size,
    114    "Temporary permission map should be empty initially."
    115  );
    116 
    117  let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, origin);
    118 
    119  SitePermissions.setForPrincipal(
    120    principal,
    121    id,
    122    SitePermissions.BLOCK,
    123    SitePermissions.SCOPE_TEMPORARY,
    124    tab.linkedBrowser
    125  );
    126 
    127  Assert.deepEqual(
    128    SitePermissions.getForPrincipal(principal, id, tab.linkedBrowser),
    129    {
    130      state: SitePermissions.BLOCK,
    131      scope: SitePermissions.SCOPE_TEMPORARY,
    132    }
    133  );
    134 
    135  ok(
    136    SitePermissions._temporaryPermissions._stateByBrowser.has(
    137      tab.linkedBrowser
    138    ),
    139    "Temporary permission map should have an entry for the browser."
    140  );
    141 
    142  BrowserTestUtils.removeTab(tab);
    143 
    144  ok(
    145    !SitePermissions._temporaryPermissions._stateByBrowser.size,
    146    "Temporary permission map should be empty after closing the tab."
    147  );
    148 });