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
--- 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.
">