Bug 1348273 - Convert the telemetry annotations; r?Dexter draft
authorGabriele Svelto <gsvelto@mozilla.com>
Sat, 17 Mar 2018 00:07:22 +0100
changeset 781401 fa7f940dadf3f5a68015ac64ef3f7e74ef5dfef2
parent 781400 79ffbdccdf6e2ca5298dfcc33f9e089e9c9bc46b
child 781402 440dae86ca0bddb14a1d693ae564b1204ae4d000
push id106292
push usergsvelto@mozilla.com
push dateThu, 12 Apr 2018 22:06:23 +0000
reviewersDexter
bugs1348273
milestone61.0a1
Bug 1348273 - Convert the telemetry annotations; r?Dexter MozReview-Commit-ID: GxeACvkWbYO
toolkit/components/telemetry/TelemetrySend.jsm
toolkit/components/telemetry/TelemetryStartup.js
toolkit/components/telemetry/tests/unit/test_TelemetrySend.js
toolkit/crashreporter/CrashAnnotations.yaml
--- 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.