163 lines
4.5 KiB
JavaScript
163 lines
4.5 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/
|
|
*/
|
|
|
|
const { BrowserUsageTelemetry } = ChromeUtils.importESModule(
|
|
"resource:///modules/BrowserUsageTelemetry.sys.mjs"
|
|
);
|
|
const { TelemetryTestUtils } = ChromeUtils.importESModule(
|
|
"resource://testing-common/TelemetryTestUtils.sys.mjs"
|
|
);
|
|
|
|
const TIMESTAMP_TEST_VALUE = "007357735773577357";
|
|
|
|
let jsonPath = Services.dirsvc.get("XREExeF", Ci.nsIFile).parent;
|
|
jsonPath.append("installation_telemetry.json");
|
|
|
|
let scalarSnapshot = null;
|
|
|
|
let testDataJSON = null;
|
|
if (Services.sysinfo.getProperty("hasWinPackageId")) {
|
|
// On MSIX the test data is only used for
|
|
// verification purposes, it isn't written anywhere.
|
|
testDataJSON = {
|
|
installer_type: "msix",
|
|
version: AppConstants.MOZ_APP_VERSION,
|
|
build_id: AppConstants.MOZ_BULIDID,
|
|
admin_user: false,
|
|
// The undefined fields are not recorded on MSIX.
|
|
silent: undefined,
|
|
from_msi: undefined,
|
|
default_path: undefined,
|
|
install_existed: false,
|
|
other_inst: false,
|
|
other_msix_inst: false,
|
|
profdir_existed: false,
|
|
};
|
|
} else {
|
|
testDataJSON = {
|
|
version: "000.0a1",
|
|
build_id: "00000000000000",
|
|
admin_user: true,
|
|
install_existed: false,
|
|
profdir_existed: false,
|
|
installer_type: "full",
|
|
other_inst: false,
|
|
other_msix_inst: false,
|
|
silent: false,
|
|
from_msi: false,
|
|
default_path: true,
|
|
install_timestamp: TIMESTAMP_TEST_VALUE,
|
|
};
|
|
}
|
|
|
|
async function createTestInstallationTelemetry() {
|
|
// Only write the file on non-MSIX
|
|
if (Services.sysinfo.getProperty("hasWinPackageId")) {
|
|
return;
|
|
}
|
|
let utf16Array = new Uint16Array(
|
|
[...JSON.stringify(testDataJSON)].map(char => char.charCodeAt(0))
|
|
);
|
|
let byteArray = new Uint8Array(utf16Array.buffer);
|
|
await IOUtils.write(jsonPath.path, byteArray);
|
|
registerCleanupFunction(async () => {
|
|
await IOUtils.remove(jsonPath.path, { ignoreAbsent: true });
|
|
});
|
|
}
|
|
|
|
add_setup(
|
|
{
|
|
skip_if: () =>
|
|
Services.prefs.getBoolPref("telemetry.fog.artifact_build", false),
|
|
},
|
|
function () {
|
|
do_get_profile();
|
|
Services.fog.initializeFOG();
|
|
}
|
|
);
|
|
|
|
add_setup(async function () {
|
|
Services.telemetry.clearScalars();
|
|
await createTestInstallationTelemetry();
|
|
await BrowserUsageTelemetry.reportInstallationTelemetry();
|
|
scalarSnapshot = Services.telemetry.getSnapshotForScalars(
|
|
"new-profile",
|
|
false
|
|
).parent;
|
|
});
|
|
|
|
add_task(async function test_new_profile_ping() {
|
|
Object.entries(testDataJSON).forEach(([key, value]) => {
|
|
// We don't log "build_id" as a scalar
|
|
if (key == "build_id") {
|
|
return;
|
|
}
|
|
// We must not log install_timestamp as a scalar due
|
|
// to fingerprinting risk. Verify that we don't.
|
|
if (key == "install_timestamp") {
|
|
Assert.ok(
|
|
!(`installation.firstSeen.${key}` in scalarSnapshot),
|
|
"Must not record " + key + " as a scalar"
|
|
);
|
|
return;
|
|
}
|
|
TelemetryTestUtils.assertScalar(
|
|
scalarSnapshot,
|
|
`installation.firstSeen.${key}`,
|
|
value
|
|
);
|
|
});
|
|
});
|
|
|
|
add_task(
|
|
{
|
|
skip_if: () =>
|
|
Services.prefs.getBoolPref("telemetry.fog.artifact_build", false),
|
|
},
|
|
async function test_new_profile_gifft_mirror() {
|
|
Assert.equal(
|
|
testDataJSON.installer_type,
|
|
Glean.installationFirstSeen.installerType.testGetValue()
|
|
);
|
|
Assert.equal(
|
|
testDataJSON.version,
|
|
Glean.installationFirstSeen.version.testGetValue()
|
|
);
|
|
Assert.equal(
|
|
testDataJSON.admin_user,
|
|
Glean.installationFirstSeen.adminUser.testGetValue()
|
|
);
|
|
Assert.equal(
|
|
testDataJSON.install_existed,
|
|
Glean.installationFirstSeen.installExisted.testGetValue()
|
|
);
|
|
Assert.equal(
|
|
testDataJSON.profdir_existed,
|
|
Glean.installationFirstSeen.profdirExisted.testGetValue()
|
|
);
|
|
Assert.equal(
|
|
testDataJSON.other_inst,
|
|
Glean.installationFirstSeen.otherInst.testGetValue()
|
|
);
|
|
Assert.equal(
|
|
testDataJSON.other_msix_inst,
|
|
Glean.installationFirstSeen.otherMsixInst.testGetValue()
|
|
);
|
|
// These fields are only recorded on the full installer.
|
|
if (!Services.sysinfo.getProperty("hasWinPackageId")) {
|
|
Assert.equal(
|
|
testDataJSON.silent,
|
|
Glean.installationFirstSeen.silent.testGetValue()
|
|
);
|
|
Assert.equal(
|
|
testDataJSON.from_msi,
|
|
Glean.installationFirstSeen.fromMsi.testGetValue()
|
|
);
|
|
Assert.equal(
|
|
testDataJSON.default_path,
|
|
Glean.installationFirstSeen.defaultPath.testGetValue()
|
|
);
|
|
}
|
|
}
|
|
);
|