Bug 1348273 - Convert the telemetry annotations; r?Dexter
MozReview-Commit-ID: GxeACvkWbYO
--- a/toolkit/components/telemetry/TelemetrySend.jsm
+++ b/toolkit/components/telemetry/TelemetrySend.jsm
@@ -700,21 +700,21 @@ var TelemetrySendImpl = {
if (cr) {
const crs = cr.getService(Ci.nsICrashReporter);
let clientId = ClientID.getCachedClientID();
let server = this._server || Services.prefs.getStringPref(TelemetryUtils.Preferences.Server, undefined);
if (!this.sendingEnabled() || !TelemetryReportingPolicy.canUpload()) {
// If we cannot send pings then clear the crash annotations
- crs.annotateCrashReport("TelemetryClientId", "");
- crs.annotateCrashReport("TelemetryServerURL", "");
+ crs.removeCrashReportAnnotation(crs.TelemetryClientId);
+ crs.removeCrashReportAnnotation(crs.TelemetryServerURL);
} else {
- crs.annotateCrashReport("TelemetryClientId", clientId);
- crs.annotateCrashReport("TelemetryServerURL", server);
+ crs.annotateCrashReport(crs.TelemetryClientId, clientId);
+ crs.annotateCrashReport(crs.TelemetryServerURL, server);
}
}
} catch (e) {
// Ignore errors when crash reporting is disabled
}
},
/**
--- a/toolkit/components/telemetry/TelemetryStartup.js
+++ b/toolkit/components/telemetry/TelemetryStartup.js
@@ -32,17 +32,18 @@ TelemetryStartup.prototype.observe = fun
TelemetryEnvironment.onInitialized().then(() => annotateEnvironment());
}
};
function annotateEnvironment() {
try {
let cr = Cc["@mozilla.org/toolkit/crash-reporter;1"];
if (cr) {
+ let crs = cr.getService(Ci.nsICrashReporter);
let env = JSON.stringify(TelemetryEnvironment.currentEnvironment);
- cr.getService(Ci.nsICrashReporter).annotateCrashReport("TelemetryEnvironment", env);
+ crs.annotateCrashReport(crs.TelemetryEnvironment, env);
}
} catch (e) {
// crash reporting not built or disabled? Ignore errors
}
}
this.NSGetFactory = XPCOMUtils.generateNSGetFactory([TelemetryStartup]);
--- a/toolkit/components/telemetry/tests/unit/test_TelemetrySend.js
+++ b/toolkit/components/telemetry/tests/unit/test_TelemetrySend.js
@@ -594,34 +594,45 @@ add_task(async function test_pref_observ
if (!IS_UNIFIED_TELEMETRY) {
Services.prefs.setBoolPref(TelemetryUtils.Preferences.TelemetryEnabled, true);
}
Services.prefs.setBoolPref(TelemetryUtils.Preferences.FhrUploadEnabled, true);
function waitAnnotateCrashReport(expectedValue, trigger) {
return new Promise(function(resolve, reject) {
- let keys = new Set(["TelemetryClientId", "TelemetryServerURL"]);
+ let realCrs = Cc["@mozilla.org/toolkit/crash-reporter;1"]
+ .getService(Ci.nsICrashReporter);
+ let keys = new Set([
+ realCrs.TelemetryClientId,
+ realCrs.TelemetryServerURL
+ ]);
let crs = {
QueryInterface: XPCOMUtils.generateQI([Ci.nsICrashReporter]),
annotateCrashReport(key, value) {
if (!keys.delete(key)) {
MockRegistrar.unregister(gMockCrs);
reject(Error(`Crash report annotation with unexpected key: "${key}".`));
}
if (expectedValue && value == "") {
MockRegistrar.unregister(gMockCrs);
reject(Error("Crash report annotation without expected value."));
}
- if (!expectedValue && value != "") {
+ if (keys.size == 0) {
MockRegistrar.unregister(gMockCrs);
- reject(Error(`Crash report annotation ("${key}") with unexpected value: "${value}".`));
+ resolve();
+ }
+ },
+ removeCrashReportAnnotation(key) {
+ if (!keys.delete(key)) {
+ MockRegistrar.unregister(gMockCrs);
+ reject(Error(`Crash report annotation with unexpected key: "${key}".`));
}
if (keys.size == 0) {
MockRegistrar.unregister(gMockCrs);
resolve();
}
},
UpdateCrashEventsDir() {
--- a/toolkit/crashreporter/CrashAnnotations.yaml
+++ b/toolkit/crashreporter/CrashAnnotations.yaml
@@ -488,16 +488,32 @@ StatFailure:
SystemMemoryUsePercentage:
description: >
Windows-only, percentage of physical memory in use. This annotation is
populated with the contents of the MEMORYSTATUSEX's structure dwMemoryLoad
field.
type: integer
ping: true
+TelemetryClientId:
+ description: >
+ Telemetry client ID.
+ type: string
+
+TelemetryEnvironment:
+ description: >
+ The telemetry environment in JSON format.
+ type: string
+
+TelemetryServerURL:
+ description: >
+ Telemetry server URL. Used to send main process crash pings directly from
+ the crashreporter client.
+ type: string
+
TelemetrySessionId:
description: >
Telemetry session ID.
type: string
TestKey:
description: >
Annotation used in tests.