/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ /* vim: set sts=2 sw=2 et tw=80: */ "use strict"; /* exported IS_OOP, valueSum, clearHistograms, getSnapshots, promiseTelemetryRecorded */ ChromeUtils.defineModuleGetter(this, "ContentTaskUtils", "resource://testing-common/ContentTaskUtils.jsm"); const IS_OOP = Services.prefs.getBoolPref("extensions.webextensions.remote"); function valueSum(arr) { return Object.values(arr).reduce((a, b) => a + b, 0); } function clearHistograms() { Services.telemetry.getSnapshotForHistograms("main", true /* clear */); Services.telemetry.getSnapshotForKeyedHistograms("main", true /* clear */); } function getSnapshots(process) { return Services.telemetry.getSnapshotForHistograms("main", false /* clear */)[process]; } function getKeyedSnapshots(process) { return Services.telemetry.getSnapshotForKeyedHistograms("main", false /* clear */)[process]; } // TODO Bug 1357509: There is no good way to make sure that the parent received // the histogram entries from the extension and content processes. Let's stick // to the ugly, spinning the event loop until we have a good approach. function promiseTelemetryRecorded(id, process, expectedCount) { let condition = () => { let snapshot = Services.telemetry.getSnapshotForHistograms("main", false /* clear */)[process][id]; return snapshot && valueSum(snapshot.values) >= expectedCount; }; return ContentTaskUtils.waitForCondition(condition); } function promiseKeyedTelemetryRecorded(id, process, expectedKey, expectedCount) { let condition = () => { let snapshot = Services.telemetry.getSnapshotForKeyedHistograms("main", false /* clear */)[process][id]; return snapshot && snapshot[expectedKey] && valueSum(snapshot[expectedKey].values) >= expectedCount; }; return ContentTaskUtils.waitForCondition(condition); } function assertHistogramSnapshot(histogramId, {keyed, processSnapshot, expectedValue}, msg) { let histogram; if (keyed) { histogram = Services.telemetry.getKeyedHistogramById(histogramId); } else { histogram = Services.telemetry.getHistogramById(histogramId); } let res = processSnapshot(histogram.snapshot()); Assert.deepEqual(res, expectedValue, msg); return res; } function assertHistogramEmpty(histogramId) { assertHistogramSnapshot(histogramId, { processSnapshot: (snapshot) => snapshot.sum, expectedValue: 0, }, `No data recorded for histogram: ${histogramId}.`); } function assertKeyedHistogramEmpty(histogramId) { assertHistogramSnapshot(histogramId, { keyed: true, processSnapshot: (snapshot) => Object.keys(snapshot).length, expectedValue: 0, }, `No data recorded for histogram: ${histogramId}.`); }