Bug 1288311 - Remove GMP install failed/unsupported telemetry reporting code. r=spohl
The telemetry result indicate that unexplained install failures are very rare,
so we don't need to bother keeping this probe.
We should still need to check whether the GMP files disappear from disk, as
telemetry indicates this does happen, though quite rarely.
MozReview-Commit-ID: K64tlRajACJ
--- a/toolkit/modules/GMPInstallManager.jsm
+++ b/toolkit/modules/GMPInstallManager.jsm
@@ -203,47 +203,35 @@ GMPInstallManager.prototype = {
try {
let gmpAddons = yield this.checkForAddons();
this._updateLastCheck();
log.info("Found " + gmpAddons.length + " addons advertised.");
let addonsToInstall = gmpAddons.filter(function(gmpAddon) {
log.info("Found addon: " + gmpAddon.toString());
if (!gmpAddon.isValid) {
- GMPUtils.maybeReportTelemetry(gmpAddon.id,
- "VIDEO_EME_ADOBE_INSTALL_FAILED_REASON",
- GMPInstallFailureReason.GMP_INVALID);
log.info("Addon |" + gmpAddon.id + "| is invalid.");
return false;
}
if (GMPUtils.isPluginHidden(gmpAddon)) {
- GMPUtils.maybeReportTelemetry(gmpAddon.id,
- "VIDEO_EME_ADOBE_INSTALL_FAILED_REASON",
- GMPInstallFailureReason.GMP_HIDDEN);
log.info("Addon |" + gmpAddon.id + "| has been hidden.");
return false;
}
if (gmpAddon.isInstalled) {
log.info("Addon |" + gmpAddon.id + "| already installed.");
return false;
}
let addonUpdateEnabled = false;
if (GMP_PLUGIN_IDS.indexOf(gmpAddon.id) >= 0) {
if (!this._isAddonEnabled(gmpAddon.id)) {
- GMPUtils.maybeReportTelemetry(gmpAddon.id,
- "VIDEO_EME_ADOBE_INSTALL_FAILED_REASON",
- GMPInstallFailureReason.GMP_DISABLED);
log.info("GMP |" + gmpAddon.id + "| has been disabled; skipping check.");
} else if (!this._isAddonUpdateEnabled(gmpAddon.id)) {
- GMPUtils.maybeReportTelemetry(gmpAddon.id,
- "VIDEO_EME_ADOBE_INSTALL_FAILED_REASON",
- GMPInstallFailureReason.GMP_UPDATE_DISABLED);
log.info("Auto-update is off for " + gmpAddon.id +
", skipping check.");
} else {
addonUpdateEnabled = true;
}
} else {
// Currently, we only support installs of OpenH264 and EME plugins.
log.info("Auto-update is off for unknown plugin '" + gmpAddon.id +
--- a/toolkit/modules/GMPUtils.jsm
+++ b/toolkit/modules/GMPUtils.jsm
@@ -43,26 +43,20 @@ this.GMPUtils = {
*/
isPluginHidden: function(aPlugin) {
if (!aPlugin.isEME) {
return false;
}
if (!this._isPluginSupported(aPlugin) ||
!this._isPluginVisible(aPlugin)) {
- this.maybeReportTelemetry(aPlugin.id,
- "VIDEO_EME_ADOBE_HIDDEN_REASON",
- GMPPluginHiddenReason.UNSUPPORTED);
return true;
}
if (!GMPPrefs.get(GMPPrefs.KEY_EME_ENABLED, true)) {
- this.maybeReportTelemetry(aPlugin.id,
- "VIDEO_EME_ADOBE_HIDDEN_REASON",
- GMPPluginHiddenReason.EME_DISABLED);
return true;
}
return false;
},
/**
* Checks whether or not a given plugin is supported by the current OS.
@@ -70,20 +64,16 @@ this.GMPUtils = {
* The plugin to check.
*/
_isPluginSupported: function(aPlugin) {
if (this._isPluginForceSupported(aPlugin)) {
return true;
}
if (aPlugin.id == EME_ADOBE_ID) {
if (Services.appinfo.OS != "WINNT") {
- // Non-Windows OSes currently unsupported by Adobe EME
- this.maybeReportTelemetry(aPlugin.id,
- "VIDEO_EME_ADOBE_UNSUPPORTED_REASON",
- GMPPluginUnsupportedReason.NOT_WINDOWS);
}
// Windows Vista and later only supported by Adobe EME.
return AppConstants.isPlatformAndVersionAtLeast("win", "6");
} else if (aPlugin.id == WIDEVINE_ID) {
// The Widevine plugin is available for Windows versions Vista and later,
// Mac OSX, and Linux.
return AppConstants.isPlatformAndVersionAtLeast("win", "6") ||
AppConstants.platform == "macosx" ||
@@ -109,41 +99,16 @@ this.GMPUtils = {
* in automated tests to override the checks that prevent GMPs running on an
* unsupported platform.
* @param aPlugin
* The plugin to check.
*/
_isPluginForceSupported: function(aPlugin) {
return GMPPrefs.get(GMPPrefs.KEY_PLUGIN_FORCE_SUPPORTED, false, aPlugin.id);
},
-
- /**
- * Report telemetry value, but only for Adobe CDM and only once per key
- * per session.
- */
- maybeReportTelemetry: function(aPluginId, key, value) {
- if (aPluginId != EME_ADOBE_ID) {
- // Only report for Adobe CDM.
- return;
- }
-
- if (!this.reportedKeys) {
- this.reportedKeys = [];
- }
- if (this.reportedKeys.indexOf(key) >= 0) {
- // Only report each key once per session.
- return;
- }
- this.reportedKeys.push(key);
-
- let hist = Services.telemetry.getHistogramById(key);
- if (hist) {
- hist.add(value);
- }
- },
};
/**
* Manages preferences for GMP addons
*/
this.GMPPrefs = {
KEY_EME_ENABLED: "media.eme.enabled",
KEY_PLUGIN_ENABLED: "media.{0}.enabled",
--- a/toolkit/mozapps/extensions/internal/GMPProvider.jsm
+++ b/toolkit/mozapps/extensions/internal/GMPProvider.jsm
@@ -50,34 +50,30 @@ const GMP_PLUGINS = [
name: "openH264_name",
description: "openH264_description2",
// The following licenseURL is part of an awful hack to include the OpenH264
// license without having bug 624602 fixed yet, and intentionally ignores
// localisation.
licenseURL: "chrome://mozapps/content/extensions/OpenH264-license.txt",
homepageURL: "http://www.openh264.org/",
optionsURL: "chrome://mozapps/content/extensions/gmpPrefs.xul",
- missingKey: "VIDEO_OPENH264_GMP_DISAPPEARED",
- missingFilesKey: "VIDEO_OPENH264_GMP_MISSING_FILES",
},
{
id: EME_ADOBE_ID,
name: "eme-adobe_name",
description: "eme-adobe_description",
// The following learnMoreURL is another hack to be able to support a SUMO page for this
// feature.
get learnMoreURL() {
return Services.urlFormatter.formatURLPref("app.support.baseURL") + "drm-content";
},
licenseURL: "http://help.adobe.com/en_US/primetime/drm/HTML5_CDM_EULA/index.html",
homepageURL: "http://help.adobe.com/en_US/primetime/drm/HTML5_CDM",
optionsURL: "chrome://mozapps/content/extensions/gmpPrefs.xul",
isEME: true,
- missingKey: "VIDEO_ADOBE_GMP_DISAPPEARED",
- missingFilesKey: "VIDEO_ADOBE_GMP_MISSING_FILES",
},
{
id: WIDEVINE_ID,
name: "widevine_description",
// Describe the purpose of both CDMs in the same way.
description: "eme-adobe_description",
licenseURL: "https://www.google.com/policies/privacy/",
homepageURL: "https://www.widevine.com/",
@@ -86,18 +82,16 @@ const GMP_PLUGINS = [
}];
XPCOMUtils.defineConstant(this, "GMP_PLUGINS", GMP_PLUGINS);
XPCOMUtils.defineLazyGetter(this, "pluginsBundle",
() => Services.strings.createBundle("chrome://global/locale/plugins.properties"));
XPCOMUtils.defineLazyGetter(this, "gmpService",
() => Cc["@mozilla.org/gecko-media-plugin-service;1"].getService(Ci.mozIGeckoMediaPluginChromeService));
-XPCOMUtils.defineLazyGetter(this, "telemetryService", () => Services.telemetry);
-
var messageManager = Cc["@mozilla.org/globalmessagemanager;1"]
.getService(Ci.nsIMessageListenerManager);
var gLogger;
var gLogAppenderDump = null;
function configureLogging() {
if (!gLogger) {
@@ -158,23 +152,16 @@ GMPWrapper.prototype = {
this._gmpPath = OS.Path.join(OS.Constants.Path.profileDir,
this._plugin.id,
GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION,
null, this._plugin.id));
}
return this._gmpPath;
},
- get missingKey() {
- return this._plugin.missingKey;
- },
- get missingFilesKey() {
- return this._plugin.missingFilesKey;
- },
-
get id() { return this._plugin.id; },
get type() { return "plugin"; },
get isGMPlugin() { return true; },
get name() { return this._plugin.name; },
get creator() { return null; },
get homepageURL() { return this._plugin.homepageURL; },
get description() { return this._plugin.description; },
@@ -490,66 +477,47 @@ GMPWrapper.prototype = {
let libName = AppConstants.DLL_PREFIX + id + AppConstants.DLL_SUFFIX;
let infoName;
if (this._plugin.id == WIDEVINE_ID) {
infoName = "manifest.json";
} else {
infoName = id + ".info";
}
- return {
- libraryMissing: !fileExists(this.gmpPath, libName),
- infoMissing: !fileExists(this.gmpPath, infoName),
- voucherMissing: this._plugin.id == EME_ADOBE_ID
- && !fileExists(this.gmpPath, id + ".voucher"),
- };
+ return fileExists(this.gmpPath, libName) &&
+ fileExists(this.gmpPath, infoName) &&
+ (this._plugin.id != EME_ADOBE_ID || fileExists(this.gmpPath, id + ".voucher"));
},
validate: function() {
if (!this.isInstalled) {
// Not installed -> Valid.
- return { installed: false, valid: true };
+ return {
+ installed: false,
+ valid: true
+ };
}
let abi = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_ABI, UpdateUtils.ABI, this._plugin.id);
if (abi != UpdateUtils.ABI) {
// ABI doesn't match. Possibly this is a profile migrated across platforms
// or from 32 -> 64 bit.
return {
installed: true,
mismatchedABI: true,
valid: false
};
}
// Installed -> Check if files are missing.
- let status = this._arePluginFilesOnDisk();
- status.installed = true;
- status.mismatchedABI = false;
- status.valid = true;
- status.missing = [];
- status.telemetry = 0;
-
- if (status.libraryMissing) {
- status.valid = false;
- status.missing.push('library');
- status.telemetry += 1;
- }
- if (status.infoMissing) {
- status.valid = false;
- status.missing.push('info');
- status.telemetry += 2;
- }
- if (status.voucherMissing) {
- status.valid = false;
- status.missing.push('voucher');
- status.telemetry += 4;
- }
-
- return status;
+ let filesOnDisk = this._arePluginFilesOnDisk();
+ return {
+ installed: true,
+ valid: filesOnDisk
+ };
},
};
var GMPProvider = {
get name() { return "GMPProvider"; },
_plugins: null,
@@ -572,25 +540,19 @@ var GMPProvider = {
if (gmpPath && isEnabled) {
let validation = wrapper.validate();
if (validation.mismatchedABI) {
this._log.info("startup - gmp " + plugin.id +
" mismatched ABI, uninstalling");
wrapper.uninstallPlugin();
continue;
}
- if (validation.installed && wrapper.missingFilesKey) {
- telemetryService.getHistogramById(wrapper.missingFilesKey).add(validation.telemetry);
- }
if (!validation.valid) {
this._log.info("startup - gmp " + plugin.id +
- " missing [" + validation.missing + "], uninstalling");
- if (wrapper.missingKey) {
- telemetryService.getHistogramById(wrapper.missingKey).add(true);
- }
+ " invalid, uninstalling");
wrapper.uninstallPlugin();
continue;
}
this._log.info("startup - adding gmp directory " + gmpPath);
try {
gmpService.addPluginDirectory(gmpPath);
} catch (e) {
if (e.name != 'NS_ERROR_NOT_AVAILABLE')
@@ -692,18 +654,16 @@ var GMPProvider = {
let plugin = {
id: aPlugin.id,
name: pluginsBundle.GetStringFromName(aPlugin.name),
description: pluginsBundle.GetStringFromName(aPlugin.description),
homepageURL: aPlugin.homepageURL,
optionsURL: aPlugin.optionsURL,
wrapper: null,
isEME: aPlugin.isEME,
- missingKey: aPlugin.missingKey,
- missingFilesKey: aPlugin.missingFilesKey,
};
plugin.fullDescription = this.generateFullDescription(aPlugin);
plugin.wrapper = new GMPWrapper(plugin);
this._plugins.set(plugin.id, plugin);
}
},
ensureProperCDMInstallState: function() {
--- a/toolkit/mozapps/extensions/test/xpcshell/test_gmpProvider.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_gmpProvider.js
@@ -281,71 +281,40 @@ add_task(function* test_pluginRegistrati
}
},
removeAndDeletePluginDirectory: path => {
if (!removedPaths.includes(path)) {
removedPaths.push(path);
}
},
};
-
- let reportedKeys = {};
+ GMPScope.gmpService = MockGMPService;
- let MockTelemetry = {
- getHistogramById: key => {
- return {
- add: value => {
- reportedKeys[key] = value;
- }
- }
- }
- };
-
- GMPScope.gmpService = MockGMPService;
- GMPScope.telemetryService = MockTelemetry;
gPrefs.setBoolPref(gGetKey(GMPScope.GMPPrefs.KEY_PLUGIN_ENABLED, addon.id), true);
// Test that plugin registration fails if the plugin dynamic library and
// info files are not present.
gPrefs.setCharPref(gGetKey(GMPScope.GMPPrefs.KEY_PLUGIN_VERSION, addon.id),
TEST_VERSION);
clearPaths();
yield promiseRestartManager();
Assert.equal(addedPaths.indexOf(file.path), -1);
Assert.deepEqual(removedPaths, [file.path]);
- // Test that the GMPProvider tried to report via telemetry that the
- // addon's lib files are missing.
- if (addon.missingKey) {
- Assert.strictEqual(reportedKeys[addon.missingKey], true);
- }
- if (addon.missingFilesKey) {
- Assert.strictEqual(reportedKeys[addon.missingFilesKey],
- addon.missingFilesKey != "VIDEO_ADOBE_GMP_MISSING_FILES"
- ? (1+2) : (1+2+4));
- }
- reportedKeys = {};
-
// Create dummy GMP library/info files, and test that plugin registration
// succeeds during startup, now that we've added GMP info/lib files.
createMockPluginFilesIfNeeded(file, addon.id);
gPrefs.setCharPref(gGetKey(GMPScope.GMPPrefs.KEY_PLUGIN_VERSION, addon.id),
TEST_VERSION);
clearPaths();
yield promiseRestartManager();
Assert.notEqual(addedPaths.indexOf(file.path), -1);
Assert.deepEqual(removedPaths, []);
- // Test that the GMPProvider tried to report via telemetry that the
- // addon's lib files are NOT missing.
- if (addon.missingFilesKey) {
- Assert.strictEqual(reportedKeys[addon.missingFilesKey], 0);
- }
-
// Setting the ABI to something invalid should cause plugin to be removed at startup.
clearPaths();
gPrefs.setCharPref(gGetKey(GMPScope.GMPPrefs.KEY_PLUGIN_ABI, addon.id), "invalid-ABI");
yield promiseRestartManager();
Assert.equal(addedPaths.indexOf(file.path), -1);
Assert.deepEqual(removedPaths, [file.path]);
// Setting the ABI to expected ABI should cause registration at startup.