Bug 1452745 - Annotate crash pings with actual display and platform versions r?gsvelto draft
authorWilliam Lachance <wlachance@mozilla.com>
Tue, 10 Apr 2018 15:01:22 -0400
changeset 779884 358d5befb3cb2c2939b7e406be983a92059a6fc6
parent 779856 0a2dae2d8cf9f628c55668514c54a23da446d5de
push id105901
push userwlachance@mozilla.com
push dateTue, 10 Apr 2018 19:01:37 +0000
reviewersgsvelto
bugs1452745
milestone61.0a1
Bug 1452745 - Annotate crash pings with actual display and platform versions r?gsvelto Before we were falling back to using the raw version, which isn't correct on at least beta (i.e. we would get `60.0` instead of `60.0b1`). MozReview-Commit-ID: 7NfV6iRoj4y
toolkit/components/telemetry/TelemetryEnvironment.jsm
toolkit/crashreporter/client/ping.cpp
--- a/toolkit/components/telemetry/TelemetryEnvironment.jsm
+++ b/toolkit/components/telemetry/TelemetryEnvironment.jsm
@@ -1339,16 +1339,17 @@ EnvironmentCache.prototype = {
   _getBuild() {
     let buildData = {
       applicationId: Services.appinfo.ID || null,
       applicationName: Services.appinfo.name || null,
       architecture: Services.sysinfo.get("arch"),
       buildId: Services.appinfo.appBuildID || null,
       version: Services.appinfo.version || null,
       vendor: Services.appinfo.vendor || null,
+      displayVersion: AppConstants.MOZ_APP_VERSION_DISPLAY || null,
       platformVersion: Services.appinfo.platformVersion || null,
       xpcomAbi: Services.appinfo.XPCOMABI,
       updaterAvailable: AppConstants.MOZ_UPDATER,
     };
 
     // Add |architecturesInBinary| only for Mac Universal builds.
     if ("@mozilla.org/xpcom/mac-utils;1" in Cc) {
       let macUtils = Cc["@mozilla.org/xpcom/mac-utils;1"].getService(Ci.nsIMacUtils);
--- a/toolkit/crashreporter/client/ping.cpp
+++ b/toolkit/crashreporter/client/ping.cpp
@@ -193,27 +193,28 @@ CreatePayloadNode(StringTable& strings, 
   payload["metadata"] = CreateMetadataNode(strings);
 
   return payload;
 }
 
 // Create the application node of the crash ping
 static Json::Value
 CreateApplicationNode(const string& aVendor, const string& aName,
-                      const string& aVersion, const string& aChannel,
+                      const string& aVersion, const string& aDisplayVersion,
+                      const string& aPlatformVersion, const string& aChannel,
                       const string& aBuildId, const string& aArchitecture,
                       const string& aXpcomAbi)
 {
   Json::Value application;
 
   application["vendor"] = aVendor;
   application["name"] = aName;
   application["buildId"] = aBuildId;
-  application["displayVersion"] = aVersion;
-  application["platformVersion"] = aVersion;
+  application["displayVersion"] = aDisplayVersion;
+  application["platformVersion"] = aPlatformVersion;
   application["version"] = aVersion;
   application["channel"] = aChannel;
   if (!aArchitecture.empty()) {
     application["architecture"] = aArchitecture;
   }
   if (!aXpcomAbi.empty()) {
     application["xpcomAbi"] = aXpcomAbi;
   }
@@ -235,35 +236,45 @@ CreateRootNode(StringTable& strings, con
   root["creationDate"] = CurrentDate(kISO8601DateHours);
   root["clientId"] = aClientId;
 
   // Parse the telemetry environment
   Json::Value environment;
   Json::Reader reader;
   string architecture;
   string xpcomAbi;
+  string displayVersion;
+  string platformVersion;
 
   if (reader.parse(strings["TelemetryEnvironment"], environment,
                    /* collectComments */ false)) {
     if (environment.isMember("build") && environment["build"].isObject()) {
       Json::Value build = environment["build"];
       if (build.isMember("architecture") && build["architecture"].isString()) {
         architecture = build["architecture"].asString();
       }
       if (build.isMember("xpcomAbi") && build["xpcomAbi"].isString()) {
         xpcomAbi = build["xpcomAbi"].asString();
       }
+      if (build.isMember("displayVersion") && build["displayVersion"].isString()) {
+        displayVersion = build["displayVersion"].asString();
+      }
+      if (build.isMember("platformVersion") && build["platformVersion"].isString()) {
+        platformVersion = build["platformVersion"].asString();
+      }
     }
 
     root["environment"] = environment;
   }
 
   root["payload"] = CreatePayloadNode(strings, aHash, aSessionId);
   root["application"] = CreateApplicationNode(strings["Vendor"], aName,
-                                              aVersion, aChannel, aBuildId,
+                                              aVersion, displayVersion,
+                                              platformVersion,
+                                              aChannel, aBuildId,
                                               architecture, xpcomAbi);
 
   return root;
 }
 
 // Generates the URL used to submit the crash ping, see TelemetrySend.jsm
 string
 GenerateSubmissionUrl(const string& aUrl, const string& aId,