tor-browser

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

browser_protectionsUI_trackers_subview.js (5016B)


      1 /* eslint-disable mozilla/no-arbitrary-setTimeout */
      2 /* Any copyright is dedicated to the Public Domain.
      3 * http://creativecommons.org/publicdomain/zero/1.0/ */
      4 
      5 "use strict";
      6 
      7 const { PermissionTestUtils } = ChromeUtils.importESModule(
      8  "resource://testing-common/PermissionTestUtils.sys.mjs"
      9 );
     10 
     11 const l10n = new Localization(["browser/siteProtections.ftl"]);
     12 
     13 const TRACKING_PAGE =
     14  // eslint-disable-next-line @microsoft/sdl/no-insecure-url
     15  "http://tracking.example.org/browser/browser/base/content/test/protectionsUI/trackingPage.html";
     16 
     17 const TP_PREF = "privacy.trackingprotection.enabled";
     18 
     19 add_setup(async function () {
     20  await UrlClassifierTestUtils.addTestTrackers();
     21 
     22  registerCleanupFunction(() => {
     23    UrlClassifierTestUtils.cleanupTestTrackers();
     24  });
     25 });
     26 
     27 async function assertSitesListed(blocked) {
     28  let promise = BrowserTestUtils.openNewForegroundTab({
     29    url: TRACKING_PAGE,
     30    gBrowser,
     31  });
     32 
     33  // Wait for 2 content blocking events - one for the load and one for the tracker.
     34  let [tab] = await Promise.all([promise, waitForContentBlockingEvent(2)]);
     35 
     36  await openProtectionsPanel();
     37 
     38  let categoryItem = document.getElementById(
     39    "protections-popup-category-trackers"
     40  );
     41 
     42  // Explicitly waiting for the category item becoming visible.
     43  await TestUtils.waitForCondition(() => {
     44    return BrowserTestUtils.isVisible(categoryItem);
     45  });
     46 
     47  ok(BrowserTestUtils.isVisible(categoryItem), "TP category item is visible");
     48  let trackersView = document.getElementById("protections-popup-trackersView");
     49  let viewShown = BrowserTestUtils.waitForEvent(trackersView, "ViewShown");
     50  categoryItem.click();
     51  await viewShown;
     52 
     53  ok(true, "Trackers view was shown");
     54 
     55  let trackersViewShimHint = document.getElementById(
     56    "protections-popup-trackersView-shim-allow-hint"
     57  );
     58  ok(trackersViewShimHint.hidden, "Shim hint is hidden");
     59  let listItems = trackersView.querySelectorAll(".protections-popup-list-item");
     60  is(listItems.length, 1, "We have 1 tracker in the list");
     61 
     62  let mainView = document.getElementById("protections-popup-mainView");
     63  viewShown = BrowserTestUtils.waitForEvent(mainView, "ViewShown");
     64  let backButton = trackersView.querySelector(".subviewbutton-back");
     65  backButton.click();
     66  await viewShown;
     67 
     68  ok(true, "Main view was shown");
     69 
     70  let change = waitForSecurityChange(1);
     71  let timeoutPromise = new Promise(resolve => setTimeout(resolve, 1000));
     72 
     73  await SpecialPowers.spawn(tab.linkedBrowser, [], function () {
     74    content.postMessage("more-tracking", "*");
     75  });
     76 
     77  let result = await Promise.race([change, timeoutPromise]);
     78  is(result, undefined, "No securityChange events should be received");
     79 
     80  viewShown = BrowserTestUtils.waitForEvent(trackersView, "ViewShown");
     81  categoryItem.click();
     82  await viewShown;
     83 
     84  ok(true, "Trackers view was shown");
     85 
     86  const header = trackersView.querySelector(".panel-header > h1 > span");
     87  const headerL10nId = blocked
     88    ? "protections-blocking-tracking-content"
     89    : "protections-not-blocking-tracking-content";
     90  const [headerMsg] = await l10n.formatMessages([headerL10nId]);
     91  const expHeader = headerMsg.attributes.find(a => a.name === "title").value;
     92  is(header.textContent, expHeader, "Trackers view header is correct");
     93 
     94  listItems = Array.from(
     95    trackersView.querySelectorAll(".protections-popup-list-item")
     96  );
     97  is(listItems.length, 2, "We have 2 trackers in the list");
     98 
     99  let listItem = listItems.find(
    100    // eslint-disable-next-line @microsoft/sdl/no-insecure-url
    101    item => item.querySelector("label").value == "http://trackertest.org"
    102  );
    103  ok(listItem, "Has an item for trackertest.org");
    104  ok(BrowserTestUtils.isVisible(listItem), "List item is visible");
    105  is(
    106    listItem.classList.contains("allowed"),
    107    !blocked,
    108    "Indicates whether the tracker was blocked or allowed"
    109  );
    110 
    111  listItem = listItems.find(
    112    item => item.querySelector("label").value == "https://itisatracker.org"
    113  );
    114  ok(listItem, "Has an item for itisatracker.org");
    115  ok(BrowserTestUtils.isVisible(listItem), "List item is visible");
    116  is(
    117    listItem.classList.contains("allowed"),
    118    !blocked,
    119    "Indicates whether the tracker was blocked or allowed"
    120  );
    121  BrowserTestUtils.removeTab(tab);
    122 }
    123 
    124 add_task(async function testTrackersSubView() {
    125  info("Testing trackers subview with TP disabled.");
    126  Services.prefs.setBoolPref(TP_PREF, false);
    127  await assertSitesListed(false);
    128  info("Testing trackers subview with TP enabled.");
    129  Services.prefs.setBoolPref(TP_PREF, true);
    130  await assertSitesListed(true);
    131  info("Testing trackers subview with TP enabled and a CB exception.");
    132  let uri = Services.io.newURI("https://tracking.example.org");
    133  PermissionTestUtils.add(
    134    uri,
    135    "trackingprotection",
    136    Services.perms.ALLOW_ACTION
    137  );
    138  await assertSitesListed(false);
    139  info("Testing trackers subview with TP enabled and a CB exception removed.");
    140  PermissionTestUtils.remove(uri, "trackingprotection");
    141  await assertSitesListed(true);
    142 
    143  Services.prefs.clearUserPref(TP_PREF);
    144 });