mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-11-04 02:09:05 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			141 lines
		
	
	
	
		
			4.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
	
		
			4.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* -*- js-indent-level: 2; indent-tabs-mode: nil -*- */
 | 
						|
/* 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/. */
 | 
						|
 | 
						|
import { AppConstants } from "resource://gre/modules/AppConstants.sys.mjs";
 | 
						|
import { Log } from "resource://gre/modules/Log.sys.mjs";
 | 
						|
 | 
						|
const LOGGER_NAME = "Toolkit.Telemetry";
 | 
						|
const LOGGER_PREFIX = "TelemetryController::";
 | 
						|
 | 
						|
const PREF_BRANCH_LOG = "toolkit.telemetry.log.";
 | 
						|
const PREF_LOG_LEVEL = "toolkit.telemetry.log.level";
 | 
						|
const PREF_LOG_DUMP = "toolkit.telemetry.log.dump";
 | 
						|
 | 
						|
const PREF_TELEMETRY_ENABLED = "toolkit.telemetry.enabled";
 | 
						|
 | 
						|
const Preferences = Object.freeze({
 | 
						|
  OverridePreRelease: "toolkit.telemetry.testing.overridePreRelease",
 | 
						|
  Unified: "toolkit.telemetry.unified",
 | 
						|
});
 | 
						|
 | 
						|
/**
 | 
						|
 * Setup Telemetry logging. This function also gets called when loggin related
 | 
						|
 * preferences change.
 | 
						|
 */
 | 
						|
var gLogger = null;
 | 
						|
var gPrefixLogger = null;
 | 
						|
var gLogAppenderDump = null;
 | 
						|
 | 
						|
export var TelemetryControllerBase = Object.freeze({
 | 
						|
  // Whether the FHR/Telemetry unification features are enabled.
 | 
						|
  // Changing this pref requires a restart.
 | 
						|
  IS_UNIFIED_TELEMETRY: Services.prefs.getBoolPref(Preferences.Unified, false),
 | 
						|
 | 
						|
  Preferences,
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the state of the Telemetry enabled preference, making sure
 | 
						|
   * it correctly evaluates to a boolean type.
 | 
						|
   */
 | 
						|
  get isTelemetryEnabled() {
 | 
						|
    return Services.prefs.getBoolPref(PREF_TELEMETRY_ENABLED, false) === true;
 | 
						|
  },
 | 
						|
 | 
						|
  get log() {
 | 
						|
    if (!gPrefixLogger) {
 | 
						|
      gPrefixLogger = Log.repository.getLoggerWithMessagePrefix(
 | 
						|
        LOGGER_NAME,
 | 
						|
        LOGGER_PREFIX
 | 
						|
      );
 | 
						|
    }
 | 
						|
    return gPrefixLogger;
 | 
						|
  },
 | 
						|
 | 
						|
  configureLogging() {
 | 
						|
    if (!gLogger) {
 | 
						|
      gLogger = Log.repository.getLogger(LOGGER_NAME);
 | 
						|
 | 
						|
      // Log messages need to go to the browser console.
 | 
						|
      let consoleAppender = new Log.ConsoleAppender(new Log.BasicFormatter());
 | 
						|
      gLogger.addAppender(consoleAppender);
 | 
						|
 | 
						|
      Services.prefs.addObserver(PREF_BRANCH_LOG, this.configureLogging);
 | 
						|
    }
 | 
						|
 | 
						|
    // Make sure the logger keeps up with the logging level preference.
 | 
						|
    gLogger.level =
 | 
						|
      Log.Level[Services.prefs.getStringPref(PREF_LOG_LEVEL, "Warn")];
 | 
						|
 | 
						|
    // If enabled in the preferences, add a dump appender.
 | 
						|
    let logDumping = Services.prefs.getBoolPref(PREF_LOG_DUMP, false);
 | 
						|
    if (logDumping != !!gLogAppenderDump) {
 | 
						|
      if (logDumping) {
 | 
						|
        gLogAppenderDump = new Log.DumpAppender(new Log.BasicFormatter());
 | 
						|
        gLogger.addAppender(gLogAppenderDump);
 | 
						|
      } else {
 | 
						|
        gLogger.removeAppender(gLogAppenderDump);
 | 
						|
        gLogAppenderDump = null;
 | 
						|
      }
 | 
						|
    }
 | 
						|
  },
 | 
						|
 | 
						|
  /**
 | 
						|
   * Set the Telemetry core recording flag for Unified Telemetry.
 | 
						|
   */
 | 
						|
  setTelemetryRecordingFlags() {
 | 
						|
    // Enable extended Telemetry on pre-release channels and disable it
 | 
						|
    // on Release/ESR.
 | 
						|
    let prereleaseChannels = [
 | 
						|
      "nightly",
 | 
						|
      "nightly-autoland",
 | 
						|
      "nightly-try",
 | 
						|
      "aurora",
 | 
						|
      "beta",
 | 
						|
    ];
 | 
						|
    if (!AppConstants.MOZILLA_OFFICIAL) {
 | 
						|
      // Turn extended telemetry for local developer builds.
 | 
						|
      prereleaseChannels.push("default");
 | 
						|
    }
 | 
						|
    const isPrereleaseChannel = prereleaseChannels.includes(
 | 
						|
      AppConstants.MOZ_UPDATE_CHANNEL
 | 
						|
    );
 | 
						|
    const isReleaseCandidateOnBeta =
 | 
						|
      AppConstants.MOZ_UPDATE_CHANNEL === "release" &&
 | 
						|
      Services.prefs.getCharPref("app.update.channel", null) === "beta";
 | 
						|
    Services.telemetry.canRecordBase = true;
 | 
						|
    Services.telemetry.canRecordExtended =
 | 
						|
      isPrereleaseChannel ||
 | 
						|
      isReleaseCandidateOnBeta ||
 | 
						|
      Services.prefs.getBoolPref(this.Preferences.OverridePreRelease, false);
 | 
						|
  },
 | 
						|
 | 
						|
  /**
 | 
						|
   * Perform telemetry initialization for either chrome or content process.
 | 
						|
   * @return {Boolean} True if Telemetry is allowed to record at least base (FHR) data,
 | 
						|
   *                   false otherwise.
 | 
						|
   */
 | 
						|
  enableTelemetryRecording: function enableTelemetryRecording() {
 | 
						|
    // Configure base Telemetry recording.
 | 
						|
    // Unified Telemetry makes it opt-out. If extended Telemetry is enabled, base recording
 | 
						|
    // is always on as well.
 | 
						|
    if (this.IS_UNIFIED_TELEMETRY) {
 | 
						|
      this.setTelemetryRecordingFlags();
 | 
						|
    } else {
 | 
						|
      // We're not on unified Telemetry, stick to the old behaviour for
 | 
						|
      // supporting Fennec.
 | 
						|
      Services.telemetry.canRecordBase = Services.telemetry.canRecordExtended =
 | 
						|
        this.isTelemetryEnabled;
 | 
						|
    }
 | 
						|
 | 
						|
    this.log.config(
 | 
						|
      "enableTelemetryRecording - canRecordBase:" +
 | 
						|
        Services.telemetry.canRecordBase +
 | 
						|
        ", canRecordExtended: " +
 | 
						|
        Services.telemetry.canRecordExtended
 | 
						|
    );
 | 
						|
 | 
						|
    return Services.telemetry.canRecordBase;
 | 
						|
  },
 | 
						|
});
 |