tor-browser

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

browser_antitracking_subiframes.js (3412B)


      1 const BEHAVIOR_REJECT_TRACKER = Ci.nsICookieService.BEHAVIOR_REJECT_TRACKER;
      2 
      3 const TOP_DOMAIN = "http://mochi.test:8888/";
      4 const SW_DOMAIN = "https://example.org/";
      5 
      6 const TOP_TEST_ROOT = getRootDirectory(gTestPath).replace(
      7  "chrome://mochitests/content/",
      8  TOP_DOMAIN
      9 );
     10 const SW_TEST_ROOT = getRootDirectory(gTestPath).replace(
     11  "chrome://mochitests/content/",
     12  SW_DOMAIN
     13 );
     14 
     15 const TOP_EMPTY_PAGE = `${TOP_TEST_ROOT}empty_with_utils.html`;
     16 const SW_REGISTER_PAGE = `${SW_TEST_ROOT}empty_with_utils.html`;
     17 const SW_IFRAME_PAGE = `${SW_TEST_ROOT}page_post_controlled.html`;
     18 const SW_REL_SW_SCRIPT = "empty.js";
     19 
     20 /**
     21 * Set up a ServiceWorker on a domain that will be used as 3rd party iframe.
     22 * That 3rd party frame should be controlled by the ServiceWorker.
     23 * After that, we open a second iframe into the first one. That should not be
     24 * controlled.
     25 */
     26 add_task(async function () {
     27  await SpecialPowers.pushPrefEnv({
     28    set: [
     29      ["dom.serviceWorkers.enabled", true],
     30      ["dom.serviceWorkers.exemptFromPerDomainMax", true],
     31      ["dom.serviceWorkers.testing.enabled", true],
     32      ["network.cookie.cookieBehavior", BEHAVIOR_REJECT_TRACKER],
     33    ],
     34  });
     35 
     36  // Open the top-level page.
     37  info("Opening a new tab: " + SW_REGISTER_PAGE);
     38  let topTab = await BrowserTestUtils.openNewForegroundTab({
     39    gBrowser,
     40    opening: SW_REGISTER_PAGE,
     41  });
     42 
     43  // Install SW
     44  info("Registering a SW: " + SW_REL_SW_SCRIPT);
     45  await SpecialPowers.spawn(
     46    topTab.linkedBrowser,
     47    [{ sw: SW_REL_SW_SCRIPT }],
     48    async function ({ sw }) {
     49      // Waive the xray to use the content utils.js script functions.
     50      await content.wrappedJSObject.registerAndWaitForActive(sw);
     51      // User interaction
     52      content.document.userInteractionForTesting();
     53    }
     54  );
     55 
     56  info("Loading a new top-level URL: " + TOP_EMPTY_PAGE);
     57  let browserLoadedPromise = BrowserTestUtils.browserLoaded(
     58    topTab.linkedBrowser
     59  );
     60  BrowserTestUtils.startLoadingURIString(topTab.linkedBrowser, TOP_EMPTY_PAGE);
     61  await browserLoadedPromise;
     62 
     63  // Create Iframe in the top-level page and verify its state.
     64  info("Creating iframe and checking if controlled");
     65  let { controlled } = await SpecialPowers.spawn(
     66    topTab.linkedBrowser,
     67    [{ url: SW_IFRAME_PAGE }],
     68    async function ({ url }) {
     69      content.document.userInteractionForTesting();
     70      const payload =
     71        await content.wrappedJSObject.createIframeAndWaitForMessage(url);
     72      return payload;
     73    }
     74  );
     75 
     76  ok(controlled, "Should be controlled!");
     77 
     78  // Create a nested Iframe.
     79  info("Creating nested-iframe and checking if controlled");
     80  let { nested_controlled } = await SpecialPowers.spawn(
     81    topTab.linkedBrowser,
     82    [{ url: SW_IFRAME_PAGE }],
     83    async function ({ url }) {
     84      const payload =
     85        await content.wrappedJSObject.createNestedIframeAndWaitForMessage(url);
     86      return payload;
     87    }
     88  );
     89 
     90  ok(!nested_controlled, "Should not be controlled!");
     91 
     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 });