Bug 1388695 - Show the payload for non main ping in about:telemetry r?gfritzsche draft
authorflyingrub <flyinggrub@gmail.com>
Wed, 09 Aug 2017 13:29:56 +0200
changeset 644181 a45116b5324e727ff842b4d7fb9364dc794e0257
parent 644177 6b6e7b873c3f0adfda1690f06ce1d257c01142a2
child 725517 91fae0a2381fda8839e3f7817c971b85547b9259
push id73337
push userbmo:flyinggrub@gmail.com
push dateThu, 10 Aug 2017 16:03:51 +0000
reviewersgfritzsche
bugs1388695
milestone57.0a1
Bug 1388695 - Show the payload for non main ping in about:telemetry r?gfritzsche Add a raw payload section when looking at a non main ping. MozReview-Commit-ID: 2dU8apRfzLP
toolkit/content/aboutTelemetry.js
toolkit/content/aboutTelemetry.xhtml
toolkit/locales/en-US/chrome/global/aboutTelemetry.dtd
--- a/toolkit/content/aboutTelemetry.js
+++ b/toolkit/content/aboutTelemetry.js
@@ -986,16 +986,33 @@ var StackRenderer = {
       aPrefix + "-title", aFormatArgs, aFormatArgs.length);
     titleElement.appendChild(document.createTextNode(titleText));
 
     div.appendChild(titleElement);
     div.appendChild(document.createElement("br"));
   }
 };
 
+var RawPayloadData = {
+  /**
+   * Renders the raw pyaload.
+   */
+  render(aPing) {
+    setHasData("raw-payload-section", true);
+    let pre = document.getElementById("raw-payload-data");
+    pre.textContent = JSON.stringify(aPing.payload, null, 2);
+  },
+
+  attachObservers() {
+    document.getElementById("payload-json-viewer").addEventListener("click", (e) => {
+      openJsonInFirefoxJsonViewer(JSON.stringify(gPingData.payload, null, 2));
+    });
+  }
+};
+
 function SymbolicationRequest(aPrefix, aRenderHeader,
                               aMemoryMap, aStacks, aDurations = null) {
   this.prefix = aPrefix;
   this.renderHeader = aRenderHeader;
   this.memoryMap = aMemoryMap;
   this.stacks = aStacks;
   this.durations = aDurations;
 }
@@ -1846,17 +1863,17 @@ function displayProcessesSelector(select
   let processes = document.getElementById("processes");
   processes.hidden = !whitelist.includes(selectedSection);
 }
 
 function adjustSearchState() {
   let selectedSection = document.querySelector("section.active").id;
   let blacklist = [
     "home-section",
-    "raw-ping-data-section"
+    "raw-payload-section"
   ];
   // TODO: Implement global search for the Home section
   let search = document.getElementById("search");
   search.hidden = blacklist.includes(selectedSection);
   // Filter element on section change.
   if (!blacklist.includes(selectedSection)) {
     Search.search(search.value);
   }
@@ -1929,16 +1946,17 @@ function showSubSection(selected) {
 }
 
 /**
  * Initializes load/unload, pref change and mouse-click listeners
  */
 function setupListeners() {
   Settings.attachObservers();
   PingPicker.attachObservers();
+  RawPayloadData.attachObservers();
 
   let menu = document.getElementById("categories");
   menu.addEventListener("click", (e) => {
     if (e.target && e.target.parentNode == menu) {
       show(e.target)
     }
   });
 
@@ -2292,17 +2310,22 @@ function togglePingSections(isMainPing) 
                                 "environment-data-section",
                                 "raw-json-viewer"]);
 
   let elements = document.querySelectorAll(".category");
   for (let section of elements) {
     if (commonSections.has(section.getAttribute("value"))) {
       continue;
     }
-    section.classList.toggle("has-data", isMainPing);
+    // Only show the raw payload for non main ping.
+    if (section.getAttribute("value") == "raw-payload-section") {
+      section.classList.toggle("has-data", !isMainPing);
+    } else {
+      section.classList.toggle("has-data", isMainPing);
+    }
   }
 }
 
 function displayPingData(ping, updatePayloadList = false) {
   gPingData = ping;
   try {
     PingPicker.render();
     displayRichPingData(ping, updatePayloadList);
@@ -2321,16 +2344,18 @@ function displayRichPingData(ping, updat
   }
 
   // Show general data.
   GeneralData.render(ping);
 
   // Show environment data.
   EnvironmentData.render(ping);
 
+  RawPayloadData.render(ping);
+
   // We only have special rendering code for the payloads from "main" pings.
   // For any other pings we just render the raw JSON payload.
   let isMainPing = (ping.type == "main" || ping.type == "saved-session");
   togglePingSections(isMainPing);
 
   if (!isMainPing) {
     return;
   }
--- a/toolkit/content/aboutTelemetry.xhtml
+++ b/toolkit/content/aboutTelemetry.xhtml
@@ -82,16 +82,19 @@
         <span class="category-name">&aboutTelemetry.addonDetailsSection;</span>
       </div>
       <div class="category" value="captured-stacks-section">
         <span class="category-name">&aboutTelemetry.capturedStacksSection;</span>
       </div>
       <div class="category" value="late-writes-section">
         <span class="category-name">&aboutTelemetry.lateWritesSection;</span>
       </div>
+      <div class="category has-data" value="raw-payload-section">
+        <span class="category-name">&aboutTelemetry.rawPayloadSection;</span>
+      </div>
       <div id="category-raw" class="category has-data" value="raw-json-viewer">
           <span class="category-name">&aboutTelemetry.raw;</span>
       </div>
     </div>
 
     <div class="main-content">
 
       <div id="ping-picker" class="hidden">
@@ -138,16 +141,21 @@
       </div>
 
       <section id="home-section" class="active">
         <h3 id="page-subtitle"></h3>
         <p id="home-explanation"></p>
         <p id="ping-explanation"></p>
       </section>
 
+      <section id="raw-payload-section">
+        <button id="payload-json-viewer">&aboutTelemetry.showInFirefoxJsonViewer;</button>
+        <pre id="raw-payload-data"></pre>
+      </section>
+
       <section id="general-data-section">
         <div id="general-data" class="data"></div>
       </section>
 
       <section id="environment-data-section">
         <div id="environment-data" class="data"></div>
       </section>
 
--- a/toolkit/locales/en-US/chrome/global/aboutTelemetry.dtd
+++ b/toolkit/locales/en-US/chrome/global/aboutTelemetry.dtd
@@ -15,16 +15,20 @@ Current ping data
 <!ENTITY aboutTelemetry.showArchivedPingData "
 Archived ping data
 ">
 
 <!ENTITY aboutTelemetry.raw "
 Raw JSON
 ">
 
+<!ENTITY aboutTelemetry.showInFirefoxJsonViewer "
+Open in the firefox JSON viewer
+">
+
 <!ENTITY aboutTelemetry.showSubsessionData "
 Show subsession data
 ">
 
 <!ENTITY aboutTelemetry.choosePing "
 Choose ping:
 ">
 
@@ -115,16 +119,20 @@ Older
 <!ENTITY aboutTelemetry.addonDetailsSection "
   Add-on Details
 ">
 
 <!ENTITY aboutTelemetry.lateWritesSection "
   Late Writes
 ">
 
+<!ENTITY aboutTelemetry.rawPayloadSection "
+Raw Payload
+">
+
 <!ENTITY aboutTelemetry.sessionInfoSection "
   Session Information
 ">
 
 <!ENTITY aboutTelemetry.fullSqlWarning "
   NOTE: Slow SQL debugging is enabled. Full SQL strings may be displayed below but they will not be submitted to Telemetry.
 ">