Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: os == 'android'
- Manifest: toolkit/mozapps/extensions/test/xpcshell/xpcshell.toml
/* Any copyright is dedicated to the Public Domain.
"use strict";
const { TelemetryController } = ChromeUtils.importESModule(
"resource://gre/modules/TelemetryController.sys.mjs"
);
AddonTestUtils.init(this);
AddonTestUtils.overrideCertDB();
AddonTestUtils.createAppInfo(
"xpcshell@tests.mozilla.org",
"XPCShell",
"1",
"42"
);
add_task(async function setup() {
// We need to set this pref to `true` in order to collect add-ons Telemetry
// data (which is considered extended data and disabled in CI).
const overridePreReleasePref = "toolkit.telemetry.testing.overridePreRelease";
let oldOverrideValue = Services.prefs.getBoolPref(
overridePreReleasePref,
false
);
Services.prefs.setBoolPref(overridePreReleasePref, true);
registerCleanupFunction(() => {
Services.prefs.setBoolPref(overridePreReleasePref, oldOverrideValue);
});
await TelemetryController.testSetup();
await AddonTestUtils.promiseStartupManager();
});
add_task(async function test_ping_payload_and_environment() {
const extensions = [
{
id: "addons-telemetry@test-extension-1",
name: "some extension 1",
version: "1.2.3",
},
{
id: "addons-telemetry@test-extension-2",
name: "some extension 2",
version: "0.1",
},
];
// Install some extensions.
const installedExtensions = [];
for (const { id, name, version } of extensions) {
const extension = ExtensionTestUtils.loadExtension({
manifest: {
name,
version,
browser_specific_settings: { gecko: { id } },
},
useAddonManager: "permanent",
});
installedExtensions.push(extension);
await extension.startup();
}
const { payload, environment } = TelemetryController.getCurrentPingData();
// Important: `payload.info.addons` is being used for AMO usage stats.
Assert.ok("addons" in payload.info, "payload.info.addons is defined");
Assert.equal(
payload.info.addons,
extensions
.map(({ id, version }) => `${encodeURIComponent(id)}:${version}`)
.join(",")
);
Assert.ok(
"XPI" in payload.addonDetails,
"payload.addonDetails.XPI is defined"
);
for (const { id, name } of extensions) {
Assert.ok(id in payload.addonDetails.XPI);
Assert.equal(payload.addonDetails.XPI[id].name, name);
}
const { addons } = environment;
Assert.ok(
"activeAddons" in addons,
"environment.addons.activeAddons is defined"
);
Assert.ok("theme" in addons, "environment.addons.theme is defined");
for (const { id } of extensions) {
Assert.ok(id in environment.addons.activeAddons);
}
for (const extension of installedExtensions) {
await extension.unload();
}
});
add_task(async function cleanup() {
await TelemetryController.testShutdown();
});