Bug 1471647 - Add a pref to override the Telemetry update channel. r=Dexter

MozReview-Commit-ID: 4pRYWT8R8bB

--HG--
extra : rebase_source : 4616ea0374139d7424c88a2d557c98645d7b46a1
This commit is contained in:
Christian Holler 2018-06-28 15:05:11 +02:00
Родитель 66aaca733d
Коммит 535dd9dbc9
6 изменённых файлов: 48 добавлений и 8 удалений

Просмотреть файл

@ -55,7 +55,6 @@ XPCOMUtils.defineLazyModuleGetters(this, {
AsyncShutdown: "resource://gre/modules/AsyncShutdown.jsm", AsyncShutdown: "resource://gre/modules/AsyncShutdown.jsm",
TelemetryStorage: "resource://gre/modules/TelemetryStorage.jsm", TelemetryStorage: "resource://gre/modules/TelemetryStorage.jsm",
TelemetryEnvironment: "resource://gre/modules/TelemetryEnvironment.jsm", TelemetryEnvironment: "resource://gre/modules/TelemetryEnvironment.jsm",
UpdateUtils: "resource://gre/modules/UpdateUtils.jsm",
TelemetryArchive: "resource://gre/modules/TelemetryArchive.jsm", TelemetryArchive: "resource://gre/modules/TelemetryArchive.jsm",
TelemetrySession: "resource://gre/modules/TelemetrySession.jsm", TelemetrySession: "resource://gre/modules/TelemetrySession.jsm",
TelemetrySend: "resource://gre/modules/TelemetrySend.jsm", TelemetrySend: "resource://gre/modules/TelemetrySend.jsm",
@ -325,7 +324,7 @@ var Impl = {
let updateChannel = null; let updateChannel = null;
try { try {
updateChannel = UpdateUtils.getUpdateChannel(false); updateChannel = Utils.getUpdateChannel();
} catch (e) { } catch (e) {
this._log.trace("_getApplicationSection - Unable to get update channel.", e); this._log.trace("_getApplicationSection - Unable to get update channel.", e);
} }

Просмотреть файл

@ -30,8 +30,6 @@ ChromeUtils.defineModuleGetter(this, "LightweightThemeManager",
"resource://gre/modules/LightweightThemeManager.jsm"); "resource://gre/modules/LightweightThemeManager.jsm");
ChromeUtils.defineModuleGetter(this, "ProfileAge", ChromeUtils.defineModuleGetter(this, "ProfileAge",
"resource://gre/modules/ProfileAge.jsm"); "resource://gre/modules/ProfileAge.jsm");
ChromeUtils.defineModuleGetter(this, "UpdateUtils",
"resource://gre/modules/UpdateUtils.jsm");
ChromeUtils.defineModuleGetter(this, "WindowsRegistry", ChromeUtils.defineModuleGetter(this, "WindowsRegistry",
"resource://gre/modules/WindowsRegistry.jsm"); "resource://gre/modules/WindowsRegistry.jsm");
@ -1411,7 +1409,7 @@ EnvironmentCache.prototype = {
_updateSettings() { _updateSettings() {
let updateChannel = null; let updateChannel = null;
try { try {
updateChannel = UpdateUtils.getUpdateChannel(false); updateChannel = Utils.getUpdateChannel();
} catch (e) {} } catch (e) {}
this._currentEnvironment.settings = { this._currentEnvironment.settings = {

Просмотреть файл

@ -17,8 +17,6 @@ ChromeUtils.import("resource://gre/modules/TelemetryUtils.jsm", this);
ChromeUtils.defineModuleGetter(this, "TelemetrySend", ChromeUtils.defineModuleGetter(this, "TelemetrySend",
"resource://gre/modules/TelemetrySend.jsm"); "resource://gre/modules/TelemetrySend.jsm");
ChromeUtils.defineModuleGetter(this, "UpdateUtils",
"resource://gre/modules/UpdateUtils.jsm");
const LOGGER_NAME = "Toolkit.Telemetry"; const LOGGER_NAME = "Toolkit.Telemetry";
const LOGGER_PREFIX = "TelemetryReportingPolicy::"; const LOGGER_PREFIX = "TelemetryReportingPolicy::";
@ -250,7 +248,7 @@ var TelemetryReportingPolicyImpl = {
// use the general minimum policy version. // use the general minimum policy version.
let channel = ""; let channel = "";
try { try {
channel = UpdateUtils.getUpdateChannel(false); channel = TelemetryUtils.getUpdateChannel();
} catch (e) { } catch (e) {
this._log.error("minimumPolicyVersion - Unable to retrieve the current channel."); this._log.error("minimumPolicyVersion - Unable to retrieve the current channel.");
return minPolicyVersion; return minPolicyVersion;

Просмотреть файл

@ -11,6 +11,8 @@ var EXPORTED_SYMBOLS = [
ChromeUtils.import("resource://gre/modules/Services.jsm", this); ChromeUtils.import("resource://gre/modules/Services.jsm", this);
ChromeUtils.defineModuleGetter(this, "AppConstants", ChromeUtils.defineModuleGetter(this, "AppConstants",
"resource://gre/modules/AppConstants.jsm"); "resource://gre/modules/AppConstants.jsm");
ChromeUtils.defineModuleGetter(this, "UpdateUtils",
"resource://gre/modules/UpdateUtils.jsm");
const MILLISECONDS_PER_DAY = 24 * 60 * 60 * 1000; const MILLISECONDS_PER_DAY = 24 * 60 * 60 * 1000;
@ -86,6 +88,7 @@ var TelemetryUtils = {
HybridContentEnabled: "toolkit.telemetry.hybridContent.enabled", HybridContentEnabled: "toolkit.telemetry.hybridContent.enabled",
OverrideOfficialCheck: "toolkit.telemetry.send.overrideOfficialCheck", OverrideOfficialCheck: "toolkit.telemetry.send.overrideOfficialCheck",
OverridePreRelease: "toolkit.telemetry.testing.overridePreRelease", OverridePreRelease: "toolkit.telemetry.testing.overridePreRelease",
OverrideUpdateChannel: "toolkit.telemetry.overrideUpdateChannel",
Server: "toolkit.telemetry.server", Server: "toolkit.telemetry.server",
ShutdownPingSender: "toolkit.telemetry.shutdownPingSender.enabled", ShutdownPingSender: "toolkit.telemetry.shutdownPingSender.enabled",
ShutdownPingSenderFirstSession: "toolkit.telemetry.shutdownPingSender.enabledFirstSession", ShutdownPingSenderFirstSession: "toolkit.telemetry.shutdownPingSender.enabledFirstSession",
@ -371,4 +374,21 @@ var TelemetryUtils = {
return ret; return ret;
}, },
/**
* @returns {string} The name of the update channel to report
* in telemetry.
* By default, this is the same as the name of the channel that
* the browser uses to download its updates. However in certain
* situations, a single update channel provides multiple (distinct)
* build types, that need to be distinguishable on Telemetry.
*/
getUpdateChannel() {
let overrideChannel = Services.prefs.getCharPref(this.Preferences.OverrideUpdateChannel, undefined);
if (overrideChannel) {
return overrideChannel;
}
return UpdateUtils.getUpdateChannel(false);
},
}; };

Просмотреть файл

@ -162,6 +162,11 @@ Preferences
The maximum frequency at which an :doc:`../data/event-ping` will be sent. The maximum frequency at which an :doc:`../data/event-ping` will be sent.
Default is 10 (minutes). Default is 10 (minutes).
``toolkit.telemetry.overrideUpdateChannel``
Override the ``channel`` value that is reported via Telemetry.
This is useful for distinguishing different types of builds that otherwise still report as the same update channel.
Data-choices notification Data-choices notification
------------------------- -------------------------

Просмотреть файл

@ -2,7 +2,9 @@
* http://creativecommons.org/publicdomain/zero/1.0/ */ * http://creativecommons.org/publicdomain/zero/1.0/ */
ChromeUtils.import("resource://gre/modules/ObjectUtils.jsm", this); ChromeUtils.import("resource://gre/modules/ObjectUtils.jsm", this);
ChromeUtils.import("resource://gre/modules/Preferences.jsm", this);
ChromeUtils.import("resource://gre/modules/TelemetryUtils.jsm", this); ChromeUtils.import("resource://gre/modules/TelemetryUtils.jsm", this);
ChromeUtils.import("resource://gre/modules/UpdateUtils.jsm", this);
add_task(async function testHistogramPacking() { add_task(async function testHistogramPacking() {
const HISTOGRAM_SNAPSHOT = { const HISTOGRAM_SNAPSHOT = {
@ -171,3 +173,21 @@ add_task(async function testKeyedHistogramPacking() {
Assert.ok(ObjectUtils.deepEqual(EXPECTED_DATA_TEST, packedKeyedHistogramsTest), Assert.ok(ObjectUtils.deepEqual(EXPECTED_DATA_TEST, packedKeyedHistogramsTest),
"Packed data must be correct."); "Packed data must be correct.");
}); });
add_task(async function testUpdateChannelOverride() {
if (Preferences.has(TelemetryUtils.Preferences.OverrideUpdateChannel)) {
// If the pref is already set at this point, the test is running in a build
// that makes use of the override pref. For testing purposes, unset the pref.
Preferences.set(TelemetryUtils.Preferences.OverrideUpdateChannel, "");
}
// Check that we return the same channel as UpdateUtils, by default
Assert.equal(TelemetryUtils.getUpdateChannel(), UpdateUtils.getUpdateChannel(false),
"The telemetry reported channel must match the one from UpdateChannel, by default.");
// Now set the override pref and check that we return the correct channel
const OVERRIDE_TEST_CHANNEL = "nightly-test";
Preferences.set(TelemetryUtils.Preferences.OverrideUpdateChannel, OVERRIDE_TEST_CHANNEL);
Assert.equal(TelemetryUtils.getUpdateChannel(), OVERRIDE_TEST_CHANNEL,
"The telemetry reported channel must match the override pref when pref is set.");
});