tor-browser

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

browser_sanitization_events.js (2531B)


      1 "use strict";
      2 
      3 const { TelemetryTestUtils } = ChromeUtils.importESModule(
      4  "resource://testing-common/TelemetryTestUtils.sys.mjs"
      5 );
      6 
      7 // eslint-disable-next-line
      8 const ROOT = getRootDirectory(gTestPath).replace(
      9  "chrome://mochitests/content",
     10  "https://example.com"
     11 );
     12 const PAGE_URL = ROOT + "file_access_sanitized_pref.html";
     13 
     14 async function waitForEventCount(
     15  count,
     16  process = "content",
     17  category = "security",
     18  method = "prefUsage"
     19 ) {
     20  // eslint-disable-next-line mozilla/no-arbitrary-setTimeout
     21  await new Promise(resolve => setTimeout(resolve, 100));
     22  let returned_events = await TestUtils.waitForCondition(() => {
     23    let events = Services.telemetry.snapshotEvents(
     24      Ci.nsITelemetry.DATASET_PRERELEASE_CHANNELS,
     25      false
     26    )[process];
     27 
     28    if (!events) {
     29      return null;
     30    }
     31 
     32    events = events.filter(e => e[1] == category && e[2] == method);
     33    dump(`Waiting for ${count} events, got ${events.length}\n`);
     34    return events.length >= count ? events : null;
     35  }, "waiting for telemetry event count of: " + count);
     36  return returned_events;
     37 }
     38 
     39 add_task(async function sanitized_pref_test() {
     40  await SpecialPowers.pushPrefEnv({
     41    set: [
     42      ["fission.omitBlocklistedPrefsInSubprocesses", true],
     43      ["fission.enforceBlocklistedPrefsInSubprocesses", false],
     44    ],
     45  });
     46 
     47  Services.telemetry.clearEvents();
     48 
     49  TelemetryTestUtils.assertNumberOfEvents(0, { process: "content" });
     50 
     51  await BrowserTestUtils.withNewTab(
     52    { gBrowser, url: PAGE_URL },
     53    async function () {}
     54  );
     55 
     56  // Needed because otherwise we advance too quickly
     57  await waitForEventCount(1);
     58 
     59  let events = TelemetryTestUtils.getEvents(
     60    { category: "security", method: "prefUsage", object: "contentProcess" },
     61    { process: "content" }
     62  );
     63 
     64  let count = 0,
     65    foundIt = false;
     66  for (let i = 0; i < events.length; i++) {
     67    if (events[i].value == "extensions.webextensions.uuids") {
     68      foundIt = true;
     69      count++;
     70    }
     71  }
     72 
     73  // We may have more than one event entries because we take two paths in the preference code
     74  // in this access pattern, but in other patterns we may only take one of those
     75  // paths, so we happen to count it twice this way.  No big deal. Sometimes we even have 4
     76  // or 6 based on timing
     77  dump(
     78    `We found ${events.length} events, ${count} of which were 'extensions.webextensions.uuids'.`
     79  );
     80 
     81  // eslint-disable-next-line
     82  Assert.ok(
     83    foundIt,
     84    "We did not find an event for 'extensions.webextensions.uuids'"
     85  );
     86 
     87  await SpecialPowers.popPrefEnv();
     88 });