bug 719484 - build about:healthreport, r=dolske, a=akeybl
authorMike Connor <mconnor@mozilla.com>
Fri, 11 Jan 2013 15:31:38 -0800
changeset 127232 be55bf9fff6f7e66b3fe914d140972210c34a01d
parent 127231 695dd2dc9fe8073132597402ec82c1931c429ae8
child 127233 b0f512680a8db3b9a8ba2643319e7308c0177e1c
push id2151
push userlsblakk@mozilla.com
push dateTue, 19 Feb 2013 18:06:57 +0000
treeherdermozilla-beta@4952e88741ec [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersdolske, akeybl
bugs719484
milestone20.0a2
bug 719484 - build about:healthreport, r=dolske, a=akeybl
browser/base/content/abouthealthreport/abouthealth.css
browser/base/content/abouthealthreport/abouthealth.js
browser/base/content/abouthealthreport/abouthealth.xhtml
browser/base/content/baseMenuOverlay.xul
browser/base/content/browser-appmenu.inc
browser/base/content/utilityOverlay.js
browser/base/jar.mn
browser/components/about/AboutRedirector.cpp
browser/components/build/nsModule.cpp
browser/locales/en-US/chrome/browser/aboutHealthReport.dtd
browser/locales/en-US/chrome/browser/baseMenuOverlay.dtd
browser/locales/jar.mn
services/datareporting/DataReportingService.js
services/datareporting/modules-testing/mocks.jsm
services/datareporting/policy.jsm
services/datareporting/tests/xpcshell/test_policy.js
services/healthreport/healthreport-prefs.js
new file mode 100644
--- /dev/null
+++ b/browser/base/content/abouthealthreport/abouthealth.css
@@ -0,0 +1,140 @@
+* {
+  margin: 0;
+  padding: 0;
+}
+
+html, body {
+  height: 100%;
+}
+
+body {
+  background-color: window;
+  color: windowtext;
+  font-family: "Trebuchet MS", "Helvetica";
+}
+
+#about-header {
+  padding: 6px 20px;
+  min-height: 60px;
+  border-bottom: 1px solid #999999;
+  margin-bottom: 12px;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  background-image: linear-gradient(to bottom, #E66000, #BB2200);
+  color: #FFFFFF;
+}
+
+#control-container {
+  display: flex;
+  align-items: center;
+}
+
+#content-line {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+#content {
+  display: flex;
+  flex-direction: column;
+}
+
+#state-intro {
+  background-image: linear-gradient(to bottom, #EAEFF2, #D4DDE4);
+  border: 1px solid #999999;
+  border-radius: 6px;
+  margin: 12px;
+  padding: 12px;
+}
+
+#settings-controls {
+  padding-top: 15px;
+}
+
+#control-container {
+  padding-top: 15px;
+}
+
+#content[state="default"] #details-hide,
+#content[state="default"] #btn-optin,
+#content[state="default"] #intro-disabled {
+  display: none;
+}
+
+#content[state="showDetails"] #details-show,
+#content[state="showDetails"] #btn-optin,
+#content[state="showDetails"] #intro-disabled {
+  display: none;
+}
+
+#content[state="showReport"] #details-hide,
+#content[state="showReport"] #report-show,
+#content[state="showReport"] #btn-optin,
+#content[state="showReport"] #intro-disabled {
+  display: none;
+}
+
+#content[state="disabled"] #details-hide,
+#content[state="disabled"] #details-show,
+#content[state="disabled"] #btn-optout,
+#content[state="disabled"] #intro-enabled {
+  display: none;
+}
+
+#details-view,
+#report-view {
+  display: none;
+}
+
+#data-view {
+  height: auto;
+  margin-top: 8px;
+  align-items: center;
+  justify-content: center;
+  border: 1px solid #999999;
+  border-radius: 6px;
+  margin: 12px;
+}
+
+#remote-report,
+#report-view {
+  width: 100%;
+  height: 100%;
+  min-height: 600px;
+}
+
+#report-show {
+  display: flex;
+  width: 100%;
+  height: 100%;
+  min-height: 60px;
+  font-size: 18px;
+  font-weight: bold;
+  background-image: linear-gradient(to bottom, #80BB2E, #547D1C);
+  color: #ffffff;
+  border-radius: 6px;
+}
+
+#details-view {
+  border: 1px solid #999999;
+  border-radius: 6px;
+  margin: 12px;
+  padding: 12px;
+}
+
+#content[state="showDetails"],
+#content[state="showReport"],
+#content[state="showDetails"] #details-view,
+#content[state="showReport"] #report-view {
+  display: block;
+}
+
+#content[state="showReport"] #report-show {
+  display: none;
+}
+#content[state="showReport"] #report-view,
+#remote-report {
+  border: 0;
+}
new file mode 100644
--- /dev/null
+++ b/browser/base/content/abouthealthreport/abouthealth.js
@@ -0,0 +1,117 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
+
+Cu.import("resource://services-common/preferences.js");
+
+const reporter = Cc["@mozilla.org/datareporting/service;1"]
+                   .getService(Ci.nsISupports)
+                   .wrappedJSObject
+                   .healthReporter;
+
+const policy = Cc["@mozilla.org/datareporting/service;1"]
+                .getService(Ci.nsISupports)
+                .wrappedJSObject.policy;
+
+const prefs = new Preferences("datareporting.healthreport.about.");
+
+function getLocale() {
+   return Cc["@mozilla.org/chrome/chrome-registry;1"]
+            .getService(Ci.nsIXULChromeRegistry)
+            .getSelectedLocale("global");
+}
+
+function init() {
+  refreshWithDataSubmissionFlag(reporter.willUploadData);
+  refreshJSONPayload();
+  document.getElementById("details-link").href = prefs.get("glossaryUrl");
+}
+
+/**
+ * Update the state of the page to reflect the current data submission state.
+ *
+ * @param enabled
+ *        (bool) Whether data submission is enabled.
+ */
+function refreshWithDataSubmissionFlag(enabled) {
+  if (!enabled)
+    updateView("disabled");
+  else
+    updateView("default");
+}
+
+function updateView(state="default") {
+  let content = document.getElementById("content");
+  let controlContainer = document.getElementById("control-container");
+  content.setAttribute("state", state);
+  controlContainer.setAttribute("state", state);
+}
+
+function refreshDataView(data) {
+  let noData = document.getElementById("data-no-data");
+  let dataEl = document.getElementById("raw-data");
+
+  noData.style.display = data ? "none" : "inline";
+  dataEl.style.display = data ? "block" : "none";
+  if (data)
+    dataEl.innerHTML = JSON.stringify(data, null, 2);
+}
+
+/**
+ * Ensure the page has the latest version of the uploaded JSON payload.
+ */
+function refreshJSONPayload() {
+  reporter.getLastPayload().then(refreshDataView);
+}
+
+function onOptInClick() {
+  policy.healthReportUploadEnable = true;
+  refreshWithDataSubmissionFlag(true);
+}
+
+function onOptOutClick() {
+  let prompts = Cc["@mozilla.org/embedcomp/prompt-service;1"]
+                  .getService(Ci.nsIPromptService);
+
+  let messages = document.getElementById("optout-confirmationPrompt");
+  let title = messages.getAttribute("confirmationPrompt_title");
+  let message = messages.getAttribute("confirmationPrompt_message");
+
+  if (!prompts.confirm(window, title, message)) {
+    return;
+  }
+
+  policy.healthReportUploadEnable = false;
+  let promise = reporter.requestDeleteRemoteData("Clicked opt out button on about page.");
+  if (promise) {
+    promise.then(function onDelete() {
+      refreshWithDataSubmissionFlag(reporter.willUploadData);
+    });
+  }
+
+  refreshWithDataSubmissionFlag(false);
+  updateView("disabled");
+}
+
+function onShowRawDataClick() {
+  updateView("showDetails");
+  refreshJSONPayload();
+}
+
+function onHideRawDataClick() {
+  updateView("default");
+}
+
+function onShowReportClick() {
+  updateView("showReport");
+  document.getElementById("remote-report").src = prefs.get("reportUrl");
+}
+
+function onHideReportClick() {
+  updateView("default");
+  document.getElementById("remote-report").src = "";
+}
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/browser/base/content/abouthealthreport/abouthealth.xhtml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+   - License, v. 2.0. If a copy of the MPL was not distributed with this
+   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<!DOCTYPE html [
+  <!ENTITY % htmlDTD PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
+  %htmlDTD;
+  <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
+  %brandDTD;
+  <!ENTITY % securityPrefsDTD SYSTEM "chrome://browser/locale/preferences/security.dtd">
+  %securityPrefsDTD;
+  <!ENTITY % aboutHealthReportDTD SYSTEM "chrome://browser/locale/aboutHealthReport.dtd">
+  %aboutHealthReportDTD;
+]>
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+   <title>&abouthealth.pagetitle;</title>
+   <link rel="stylesheet"
+     href="chrome://browser/content/abouthealthreport/abouthealth.css"
+     type="text/css" />
+   <script type="text/javascript;version=1.8"
+     src="chrome://browser/content/abouthealthreport/abouthealth.js" />
+  </head>
+  <body dir="&abouthealth.locale-direction;" class="aboutPageWideContainer" onload="init();">
+    <div id="about-header">
+      <h1>&abouthealth.header;</h1>
+      <img src="chrome://branding/content/icon48.png"/>
+    </div>
+
+    <div id="content">
+      <div id="state-intro">
+        <h3>&abouthealth.intro.title;</h3>
+        <div id="content-line">
+          <p id="intro-enabled">&abouthealth.intro-enabled;</p>
+          <p id="intro-disabled">&abouthealth.intro-disabled;</p>
+          <div id="control-container">
+            <button id="btn-optin" onclick="onOptInClick();">&abouthealth.optin;</button>
+            <button id="btn-optout" onclick="onOptOutClick();">&abouthealth.optout;</button>
+
+            <button id="details-show" onclick="onShowRawDataClick()">&abouthealth.show-raw-data;</button>
+            <button id="details-hide" onclick="onHideRawDataClick()">&abouthealth.hide-raw-data;</button>
+          </div>
+        </div>
+      </div>
+      <div id="details-view">
+        <p id="details-description">
+          &abouthealth.details.description-start;
+          <a id="details-link">&abouthealth.details-link;</a>
+          &abouthealth.details.description-end;
+        </p>
+
+        <p id="data-no-data">&abouthealth.no-data-available;</p>
+        <pre id="raw-data" style="display: none"></pre>
+      </div>
+
+      <div id="data-view">
+        <button id="report-show" onclick="onShowReportClick()">&abouthealth.show-report;</button>
+        <div id="report-view">
+          <iframe id="remote-report"/>
+        </div>
+      </div>
+    </div>
+
+    <input type="hidden" id="optout-confirmationPrompt"
+      confirmationPrompt_title="&abouthealth.optout.confirmationPrompt.title;"
+      confirmationPrompt_message="&abouthealth.optout.confirmationPrompt.message;"
+    />
+  </body>
+</html>
+
--- a/browser/base/content/baseMenuOverlay.xul
+++ b/browser/base/content/baseMenuOverlay.xul
@@ -47,16 +47,21 @@
                   onclick="checkForMiddleClick(this, event);"
                   label="&productHelp.label;"
                   accesskey="&productHelp.accesskey;"
 #ifdef XP_MACOSX
                   key="key_openHelpMac"/>
 #else
                   />
 #endif
+        <menuitem id="healthReport"
+                  label="&healthReport.label;"
+                  accesskey="&healthReport.accesskey;"
+                  oncommand="openHealthReport()"
+                  onclick="checkForMiddleClick(this, event);"/>
         <menuitem id="troubleShooting"
                   accesskey="&helpTroubleshootingInfo.accesskey;"
                   label="&helpTroubleshootingInfo.label;"
                   oncommand="openTroubleshootingPage()"
                   onclick="checkForMiddleClick(this, event);"/>
         <menuitem id="feedbackPage"
                   accesskey="&helpFeedbackPage.accesskey;"
                   label="&helpFeedbackPage.label;"
--- a/browser/base/content/browser-appmenu.inc
+++ b/browser/base/content/browser-appmenu.inc
@@ -373,16 +373,20 @@
             <menuitem id="appmenu_openHelp"
                       label="&helpMenu.label;"
                       oncommand="openHelpLink('firefox-help')"
                       onclick="checkForMiddleClick(this, event);"/>
             <menuitem id="appmenu_gettingStarted"
                       label="&appMenuGettingStarted.label;"
                       oncommand="gBrowser.loadOneTab('http://www.mozilla.com/firefox/central/', {inBackground: false});"
                       onclick="checkForMiddleClick(this, event);"/>
+            <menuitem id="appmenu_healthReport"
+                      label="&healthReport.label;"
+                      oncommand="openHealthReport()"
+                      onclick="checkForMiddleClick(this, event);"/>
             <menuitem id="appmenu_troubleshootingInfo"
                       label="&helpTroubleshootingInfo.label;"
                       oncommand="openTroubleshootingPage()"
                       onclick="checkForMiddleClick(this,event);"/>
             <menuitem id="appmenu_feedbackPage"
                       label="&helpFeedbackPage.label;"
                       oncommand="openFeedbackPage()"
                       onclick="checkForMiddleClick(this, event);"/>
--- a/browser/base/content/utilityOverlay.js
+++ b/browser/base/content/utilityOverlay.js
@@ -525,16 +525,26 @@ function openAdvancedPreferences(tabID)
  * of the application.
  */
 function openTroubleshootingPage()
 {
   openUILinkIn("about:support", "tab");
 }
 
 /**
+ * Opens the troubleshooting information (about:support) page for this version
+ * of the application.
+ */
+function openHealthReport()
+{
+  openUILinkIn("about:healthreport", "tab");
+}
+
+
+/**
  * Opens the feedback page for this version of the application.
  */
 function openFeedbackPage()
 {
   openUILinkIn("http://input.mozilla.com/feedback", "tab");
 }
 
 function buildHelpMenu()
--- a/browser/base/jar.mn
+++ b/browser/base/jar.mn
@@ -44,16 +44,21 @@ browser.jar:
         content/browser/abouthome/apps@2x.png          (content/abouthome/apps@2x.png)
         content/browser/abouthome/addons@2x.png        (content/abouthome/addons@2x.png)
         content/browser/abouthome/sync@2x.png          (content/abouthome/sync@2x.png)
         content/browser/abouthome/settings@2x.png      (content/abouthome/settings@2x.png)
         content/browser/abouthome/restore@2x.png       (content/abouthome/restore@2x.png)
         content/browser/abouthome/restore-large@2x.png (content/abouthome/restore-large@2x.png)
         content/browser/abouthome/mozilla@2x.png       (content/abouthome/mozilla@2x.png)
 #endif
+#ifdef MOZ_SERVICES_HEALTHREPORT
+        content/browser/abouthealthreport/abouthealth.xhtml   (content/abouthealthreport/abouthealth.xhtml)
+        content/browser/abouthealthreport/abouthealth.js      (content/abouthealthreport/abouthealth.js)
+        content/browser/abouthealthreport/abouthealth.css     (content/abouthealthreport/abouthealth.css)
+#endif
         content/browser/aboutRobots-icon.png          (content/aboutRobots-icon.png)
         content/browser/aboutRobots-widget-left.png   (content/aboutRobots-widget-left.png)
         content/browser/aboutSocialError.xhtml        (content/aboutSocialError.xhtml)
 *       content/browser/browser.css                   (content/browser.css)
 *       content/browser/browser.js                    (content/browser.js)
 *       content/browser/browser.xul                   (content/browser.xul)
 *       content/browser/browser-tabPreviews.xml       (content/browser-tabPreviews.xml)
         content/browser/content.js                    (content/content.js)
--- a/browser/components/about/AboutRedirector.cpp
+++ b/browser/components/about/AboutRedirector.cpp
@@ -77,16 +77,20 @@ static RedirEntry kRedirMap[] = {
   { "newtab", "chrome://browser/content/newtab/newTab.xul",
     nsIAboutModule::ALLOW_SCRIPT },
   { "permissions", "chrome://browser/content/preferences/aboutPermissions.xul",
     nsIAboutModule::ALLOW_SCRIPT },
   { "preferences", "chrome://browser/content/preferences/in-content/preferences.xul",
     nsIAboutModule::ALLOW_SCRIPT },
   { "downloads", "chrome://browser/content/downloads/contentAreaDownloadsView.xul",
     nsIAboutModule::ALLOW_SCRIPT },
+#ifdef MOZ_SERVICES_HEALTHREPORT
+  { "healthreport", "chrome://browser/content/abouthealthreport/abouthealth.xhtml",
+    nsIAboutModule::ALLOW_SCRIPT },
+#endif
 };
 static const int kRedirTotal = NS_ARRAY_LENGTH(kRedirMap);
 
 static nsAutoCString
 GetAboutModuleName(nsIURI *aURI)
 {
   nsAutoCString path;
   aURI->GetPath(path);
--- a/browser/components/build/nsModule.cpp
+++ b/browser/components/build/nsModule.cpp
@@ -112,16 +112,19 @@ static const mozilla::Module::ContractID
     { NS_ABOUT_MODULE_CONTRACTID_PREFIX "sync-tabs", &kNS_BROWSER_ABOUT_REDIRECTOR_CID },
     { NS_ABOUT_MODULE_CONTRACTID_PREFIX "sync-progress", &kNS_BROWSER_ABOUT_REDIRECTOR_CID },
 #endif
     { NS_ABOUT_MODULE_CONTRACTID_PREFIX "home", &kNS_BROWSER_ABOUT_REDIRECTOR_CID },
     { NS_ABOUT_MODULE_CONTRACTID_PREFIX "newtab", &kNS_BROWSER_ABOUT_REDIRECTOR_CID },
     { NS_ABOUT_MODULE_CONTRACTID_PREFIX "permissions", &kNS_BROWSER_ABOUT_REDIRECTOR_CID },
     { NS_ABOUT_MODULE_CONTRACTID_PREFIX "preferences", &kNS_BROWSER_ABOUT_REDIRECTOR_CID },
     { NS_ABOUT_MODULE_CONTRACTID_PREFIX "downloads", &kNS_BROWSER_ABOUT_REDIRECTOR_CID },
+#ifdef MOZ_SERVICES_HEALTHREPORT
+    { NS_ABOUT_MODULE_CONTRACTID_PREFIX "healthreport", &kNS_BROWSER_ABOUT_REDIRECTOR_CID },
+#endif
 #if defined(XP_WIN)
     { NS_IEHISTORYENUMERATOR_CONTRACTID, &kNS_WINIEHISTORYENUMERATOR_CID },
 #elif defined(XP_MACOSX)
     { NS_SHELLSERVICE_CONTRACTID, &kNS_SHELLSERVICE_CID },
 #endif
 #ifndef MOZ_PER_WINDOW_PRIVATE_BROWSING
     { NS_PRIVATE_BROWSING_SERVICE_CONTRACTID, &kNS_PRIVATE_BROWSING_SERVICE_WRAPPER_CID },
 #endif
new file mode 100644
--- /dev/null
+++ b/browser/locales/en-US/chrome/browser/aboutHealthReport.dtd
@@ -0,0 +1,27 @@
+<!-- metrics.locale-direction instead of the usual local.dir entity, so RTL can skip translating page. -->
+<!ENTITY abouthealth.locale-direction "ltr">
+
+<!-- LOCALIZATION NOTE (abouthealth.pagetitle): Firefox Health Report is a proper noun in en-US, please keep this in mind. -->
+<!ENTITY abouthealth.pagetitle "&brandShortName; Health Report">
+<!ENTITY abouthealth.header "&brandFullName; Health Report">
+
+<!ENTITY abouthealth.intro.title "What is &brandShortName; Health Report?">
+
+<!ENTITY abouthealth.intro-enabled "&brandFullName; collects some data about your computer and usage in order to provide you with a better browser experience.">
+<!ENTITY abouthealth.intro-disabled "You are currently not submitting usage data to &vendorShortName;. You can help us make &brandShortName; better by clicking the &quot;&abouthealth.optin;&quot; button.">
+
+<!ENTITY abouthealth.optin "Help make &brandShortName; better">
+<!ENTITY abouthealth.optout "Turn Off Reporting">
+
+<!ENTITY abouthealth.optout.confirmationPrompt.title "Stop data submission?">
+<!ENTITY abouthealth.optout.confirmationPrompt.message "Are you sure you want to opt out and delete all your anonymous product data stored on &vendorShortName; servers?">
+
+<!ENTITY abouthealth.show-raw-data "Show Details">
+<!ENTITY abouthealth.hide-raw-data "Hide Details">
+
+<!ENTITY abouthealth.show-report "Show &brandShortName; Report">
+
+<!ENTITY abouthealth.details.description-start "This is the data &brandFullName; is submitting in order for &brandShortName; Health Report to function.   You can ">
+<!ENTITY abouthealth.details-link "learn more">
+<!ENTITY abouthealth.details.description-end " about what we collect and submit.">
+<!ENTITY abouthealth.no-data-available "There is no previous submission to display. Please check back later.">
--- a/browser/locales/en-US/chrome/browser/baseMenuOverlay.dtd
+++ b/browser/locales/en-US/chrome/browser/baseMenuOverlay.dtd
@@ -17,16 +17,19 @@
 <!ENTITY aboutProduct.label       "About &brandShortName;">
 <!ENTITY aboutProduct.accesskey   "A">
 <!ENTITY productHelp.label        "&brandShortName; Help">
 <!ENTITY productHelp.accesskey    "H">
 <!ENTITY helpMac.commandkey       "?">
 <!ENTITY helpSafeMode.label       "Restart with Add-ons Disabled…">
 <!ENTITY helpSafeMode.accesskey   "R">
 
+<!ENTITY healthReport.label       "&brandShortName; Health Report">
+<!ENTITY healthReport.accesskey   "e">
+
 <!ENTITY helpTroubleshootingInfo.label      "Troubleshooting Information">
 <!ENTITY helpTroubleshootingInfo.accesskey  "T">
 
 <!ENTITY helpFeedbackPage.label      "Submit Feedback…">
 <!ENTITY helpFeedbackPage.accesskey  "S">
 
 <!ENTITY preferencesCmdMac.label        "Preferences…">
 <!ENTITY preferencesCmdMac.commandkey   ",">
--- a/browser/locales/jar.mn
+++ b/browser/locales/jar.mn
@@ -6,16 +6,19 @@
 
 @AB_CD@.jar:
 % locale browser @AB_CD@ %locale/browser/
     locale/browser/aboutCertError.dtd              (%chrome/browser/aboutCertError.dtd)
     locale/browser/aboutDialog.dtd                 (%chrome/browser/aboutDialog.dtd)
     locale/browser/aboutPrivateBrowsing.dtd        (%chrome/browser/aboutPrivateBrowsing.dtd)
     locale/browser/aboutRobots.dtd                 (%chrome/browser/aboutRobots.dtd)
     locale/browser/aboutHome.dtd                   (%chrome/browser/aboutHome.dtd)
+#ifdef MOZ_SERVICES_HEALTHREPORT
+    locale/browser/aboutHealthReport.dtd           (%chrome/browser/aboutHealthReport.dtd)
+#endif
     locale/browser/aboutSessionRestore.dtd         (%chrome/browser/aboutSessionRestore.dtd)
 #ifdef MOZ_SERVICES_SYNC
     locale/browser/syncProgress.dtd                (%chrome/browser/syncProgress.dtd)
     locale/browser/aboutSyncTabs.dtd               (%chrome/browser/aboutSyncTabs.dtd)
 #endif
     locale/browser/browser.dtd                     (%chrome/browser/browser.dtd)
     locale/browser/baseMenuOverlay.dtd             (%chrome/browser/baseMenuOverlay.dtd)
     locale/browser/browser.properties              (%chrome/browser/browser.properties)
--- a/services/healthreport/healthreport-prefs.js
+++ b/services/healthreport/healthreport-prefs.js
@@ -16,8 +16,10 @@ pref("datareporting.healthreport.pending
 
 // Health Report is enabled by default on all channels.
 pref("datareporting.healthreport.uploadEnabled", true);
 
 pref("datareporting.healthreport.service.enabled", true);
 pref("datareporting.healthreport.service.loadDelayMsec", 10000);
 pref("datareporting.healthreport.service.providerCategories", "healthreport-js-provider");
 
+pref("datareporting.healthreport.about.glossaryUrl", "https://services.mozilla.com/healthreport/glossary.html");
+pref("datareporting.healthreport.about.reportUrl",   "https://services.mozilla.com/healthreport/placeholder.html");