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 });