tor-browser

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

browser_antitracking.js (3461B)


      1 const BEHAVIOR_ACCEPT = Ci.nsICookieService.BEHAVIOR_ACCEPT;
      2 const BEHAVIOR_REJECT_TRACKER = Ci.nsICookieService.BEHAVIOR_REJECT_TRACKER;
      3 
      4 let { UrlClassifierTestUtils } = ChromeUtils.importESModule(
      5  "resource://testing-common/UrlClassifierTestUtils.sys.mjs"
      6 );
      7 
      8 const TOP_DOMAIN = "http://mochi.test:8888/";
      9 const SW_DOMAIN = "https://tracking.example.org/";
     10 
     11 const TOP_TEST_ROOT = getRootDirectory(gTestPath).replace(
     12  "chrome://mochitests/content/",
     13  TOP_DOMAIN
     14 );
     15 const SW_TEST_ROOT = getRootDirectory(gTestPath).replace(
     16  "chrome://mochitests/content/",
     17  SW_DOMAIN
     18 );
     19 
     20 const TOP_EMPTY_PAGE = `${TOP_TEST_ROOT}empty_with_utils.html`;
     21 const SW_REGISTER_PAGE = `${SW_TEST_ROOT}empty_with_utils.html`;
     22 const SW_IFRAME_PAGE = `${SW_TEST_ROOT}page_post_controlled.html`;
     23 // An empty script suffices for our SW needs; it's by definition no-fetch.
     24 const SW_REL_SW_SCRIPT = "empty.js";
     25 
     26 /**
     27 * Set up a no-fetch-optimized ServiceWorker on a domain that will be covered by
     28 * tracking protection (but is not yet).  Once the SW is installed, activate TP
     29 * and create a tab that embeds that tracking-site in an iframe.
     30 */
     31 add_task(async function () {
     32  await SpecialPowers.pushPrefEnv({
     33    set: [
     34      ["dom.serviceWorkers.enabled", true],
     35      ["dom.serviceWorkers.exemptFromPerDomainMax", true],
     36      ["dom.serviceWorkers.testing.enabled", true],
     37      ["network.cookie.cookieBehavior", BEHAVIOR_ACCEPT],
     38    ],
     39  });
     40 
     41  // Open the top-level page.
     42  info("Opening a new tab: " + SW_REGISTER_PAGE);
     43  let topTab = await BrowserTestUtils.openNewForegroundTab({
     44    gBrowser,
     45    opening: SW_REGISTER_PAGE,
     46  });
     47 
     48  // ## Install SW
     49  info("Installing SW");
     50  await SpecialPowers.spawn(
     51    topTab.linkedBrowser,
     52    [{ sw: SW_REL_SW_SCRIPT }],
     53    async function ({ sw }) {
     54      // Waive the xray to use the content utils.js script functions.
     55      await content.wrappedJSObject.registerAndWaitForActive(sw);
     56    }
     57  );
     58 
     59  // Enable Anti-tracking.
     60  await SpecialPowers.pushPrefEnv({
     61    set: [
     62      ["privacy.trackingprotection.enabled", false],
     63      ["privacy.trackingprotection.pbmode.enabled", false],
     64      ["privacy.trackingprotection.annotate_channels", true],
     65      ["network.cookie.cookieBehavior", BEHAVIOR_REJECT_TRACKER],
     66    ],
     67  });
     68  await UrlClassifierTestUtils.addTestTrackers();
     69 
     70  // Open the top-level URL.
     71  info("Loading a new top-level URL: " + TOP_EMPTY_PAGE);
     72  let browserLoadedPromise = BrowserTestUtils.browserLoaded(
     73    topTab.linkedBrowser
     74  );
     75  BrowserTestUtils.startLoadingURIString(topTab.linkedBrowser, TOP_EMPTY_PAGE);
     76  await browserLoadedPromise;
     77 
     78  // Create Iframe in the top-level page and verify its state.
     79  let { controlled } = await SpecialPowers.spawn(
     80    topTab.linkedBrowser,
     81    [{ url: SW_IFRAME_PAGE }],
     82    async function ({ url }) {
     83      const payload =
     84        await content.wrappedJSObject.createIframeAndWaitForMessage(url);
     85      return payload;
     86    }
     87  );
     88 
     89  ok(!controlled, "Should not be controlled!");
     90 
     91  // ## Cleanup
     92  info("Loading the SW unregister page: " + SW_REGISTER_PAGE);
     93  browserLoadedPromise = BrowserTestUtils.browserLoaded(topTab.linkedBrowser);
     94  BrowserTestUtils.startLoadingURIString(
     95    topTab.linkedBrowser,
     96    SW_REGISTER_PAGE
     97  );
     98  await browserLoadedPromise;
     99 
    100  await SpecialPowers.spawn(topTab.linkedBrowser, [], async function () {
    101    await content.wrappedJSObject.unregisterAll();
    102  });
    103 
    104  // Close the testing tab.
    105  BrowserTestUtils.removeTab(topTab);
    106 });