mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-11-04 10:18:41 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			151 lines
		
	
	
	
		
			5.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			151 lines
		
	
	
	
		
			5.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* 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 { AppConstants } = ChromeUtils.importESModule(
 | 
						|
  "resource://gre/modules/AppConstants.sys.mjs"
 | 
						|
);
 | 
						|
 | 
						|
function updatePrefsAndDefines() {
 | 
						|
  let upload = Services.prefs.getBoolPref(
 | 
						|
    "datareporting.healthreport.uploadEnabled"
 | 
						|
  );
 | 
						|
  document.l10n.setAttributes(
 | 
						|
    document.querySelector("[data-l10n-id='about-glean-data-upload']"),
 | 
						|
    "about-glean-data-upload",
 | 
						|
    {
 | 
						|
      "data-upload-pref-value": upload,
 | 
						|
    }
 | 
						|
  );
 | 
						|
  let port = Services.prefs.getIntPref("telemetry.fog.test.localhost_port");
 | 
						|
  document.l10n.setAttributes(
 | 
						|
    document.querySelector("[data-l10n-id='about-glean-local-port']"),
 | 
						|
    "about-glean-local-port",
 | 
						|
    {
 | 
						|
      "local-port-pref-value": port,
 | 
						|
    }
 | 
						|
  );
 | 
						|
  document.l10n.setAttributes(
 | 
						|
    document.querySelector("[data-l10n-id='about-glean-glean-android']"),
 | 
						|
    "about-glean-glean-android",
 | 
						|
    { "glean-android-define-value": AppConstants.MOZ_GLEAN_ANDROID }
 | 
						|
  );
 | 
						|
  document.l10n.setAttributes(
 | 
						|
    document.querySelector("[data-l10n-id='about-glean-moz-official']"),
 | 
						|
    "about-glean-moz-official",
 | 
						|
    { "moz-official-define-value": AppConstants.MOZILLA_OFFICIAL }
 | 
						|
  );
 | 
						|
 | 
						|
  // Knowing what we know, and copying logic from viaduct_uploader.rs,
 | 
						|
  // (which is documented in Preferences and Defines),
 | 
						|
  // tell the fine user whether and why upload is disabled.
 | 
						|
  let uploadMessageEl = document.getElementById("upload-status");
 | 
						|
  let uploadL10nId = "about-glean-upload-enabled";
 | 
						|
  if (!upload) {
 | 
						|
    uploadL10nId = "about-glean-upload-disabled";
 | 
						|
  } else if (port < 0 || (port == 0 && !AppConstants.MOZILLA_OFFICIAL)) {
 | 
						|
    uploadL10nId = "about-glean-upload-fake-enabled";
 | 
						|
    // This message has a link to the Glean Debug Ping Viewer in it.
 | 
						|
    // We must add the anchor element now so that Fluent can match it.
 | 
						|
    let a = document.createElement("a");
 | 
						|
    a.href = "https://debug-ping-preview.firebaseapp.com/";
 | 
						|
    a.setAttribute("data-l10n-name", "glean-debug-ping-viewer");
 | 
						|
    uploadMessageEl.appendChild(a);
 | 
						|
  } else if (port > 0) {
 | 
						|
    uploadL10nId = "about-glean-upload-enabled-local";
 | 
						|
  }
 | 
						|
  document.l10n.setAttributes(uploadMessageEl, uploadL10nId);
 | 
						|
}
 | 
						|
 | 
						|
function camelToKebab(str) {
 | 
						|
  let out = "";
 | 
						|
  for (let i = 0; i < str.length; i++) {
 | 
						|
    let c = str.charAt(i);
 | 
						|
    if (c == c.toUpperCase()) {
 | 
						|
      out += "-";
 | 
						|
      c = c.toLowerCase();
 | 
						|
    }
 | 
						|
    out += c;
 | 
						|
  }
 | 
						|
  return out;
 | 
						|
}
 | 
						|
 | 
						|
// I'm consciously omitting "deletion-request" until someone can come up with
 | 
						|
// a use-case for sending it via about:glean.
 | 
						|
const GLEAN_BUILTIN_PINGS = ["metrics", "events", "baseline"];
 | 
						|
const NO_PING = "(don't submit any ping)";
 | 
						|
function refillPingNames() {
 | 
						|
  let select = document.getElementById("ping-names");
 | 
						|
  let pings = GLEAN_BUILTIN_PINGS.slice().concat(Object.keys(GleanPings));
 | 
						|
 | 
						|
  pings.forEach(ping => {
 | 
						|
    let option = document.createElement("option");
 | 
						|
    option.textContent = camelToKebab(ping);
 | 
						|
    select.appendChild(option);
 | 
						|
  });
 | 
						|
  let option = document.createElement("option");
 | 
						|
  document.l10n.setAttributes(option, "about-glean-no-ping-label");
 | 
						|
  option.value = NO_PING;
 | 
						|
  select.appendChild(option);
 | 
						|
}
 | 
						|
 | 
						|
// If there's been a previous tag, use it.
 | 
						|
// If not, be _slightly_ clever and derive a default one from the profile dir.
 | 
						|
function fillDebugTag() {
 | 
						|
  const DEBUG_TAG_PREF = "telemetry.fog.aboutGlean.debugTag";
 | 
						|
  let debugTag;
 | 
						|
  if (Services.prefs.prefHasUserValue(DEBUG_TAG_PREF)) {
 | 
						|
    debugTag = Services.prefs.getStringPref(DEBUG_TAG_PREF);
 | 
						|
  } else {
 | 
						|
    const debugTagPrefix = "about-glean-";
 | 
						|
    const profileDir = Services.dirsvc.get("ProfD", Ci.nsIFile).path;
 | 
						|
    let charSum = Array.from(profileDir).reduce(
 | 
						|
      (prev, cur) => prev + cur.charCodeAt(0),
 | 
						|
      0
 | 
						|
    );
 | 
						|
 | 
						|
    debugTag = debugTagPrefix + (charSum % 1000);
 | 
						|
  }
 | 
						|
 | 
						|
  let tagInput = document.getElementById("tag-pings");
 | 
						|
  tagInput.value = debugTag;
 | 
						|
  const updateDebugTagValues = () => {
 | 
						|
    document.l10n.setAttributes(
 | 
						|
      document.querySelector(
 | 
						|
        "[data-l10n-id='about-glean-label-for-controls-submit']"
 | 
						|
      ),
 | 
						|
      "about-glean-label-for-controls-submit",
 | 
						|
      { "debug-tag": tagInput.value }
 | 
						|
    );
 | 
						|
    const GDPV_ROOT = "https://debug-ping-preview.firebaseapp.com/pings/";
 | 
						|
    let gdpvLink = document.querySelector(
 | 
						|
      "[data-l10n-name='gdpv-tagged-pings-link']"
 | 
						|
    );
 | 
						|
    gdpvLink.href = GDPV_ROOT + tagInput.value;
 | 
						|
  };
 | 
						|
  tagInput.addEventListener("change", () => {
 | 
						|
    Services.prefs.setStringPref(DEBUG_TAG_PREF, tagInput.value);
 | 
						|
    updateDebugTagValues();
 | 
						|
  });
 | 
						|
  updateDebugTagValues();
 | 
						|
}
 | 
						|
 | 
						|
function onLoad() {
 | 
						|
  updatePrefsAndDefines();
 | 
						|
  refillPingNames();
 | 
						|
  fillDebugTag();
 | 
						|
  document.getElementById("controls-submit").addEventListener("click", () => {
 | 
						|
    let tag = document.getElementById("tag-pings").value;
 | 
						|
    let log = document.getElementById("log-pings").checked;
 | 
						|
    let ping = document.getElementById("ping-names").value;
 | 
						|
    Services.fog.setLogPings(log);
 | 
						|
    Services.fog.setTagPings(tag);
 | 
						|
    if (ping != NO_PING) {
 | 
						|
      Services.fog.sendPing(ping);
 | 
						|
    }
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
window.addEventListener("load", onLoad);
 |