mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1140263: Enable Adobe EME on Windows Vista+ and add a pref to force-enable it on other platforms. r=mossop
This commit is contained in:
parent
e1715abf63
commit
998edc7708
@ -4585,9 +4585,6 @@ pref("media.gmp-manager.certs.1.issuerName", "CN=DigiCert Secure Server CA,O=Dig
|
||||
pref("media.gmp-manager.certs.1.commonName", "aus4.mozilla.org");
|
||||
pref("media.gmp-manager.certs.2.issuerName", "CN=Thawte SSL CA,O=\"Thawte, Inc.\",C=US");
|
||||
pref("media.gmp-manager.certs.2.commonName", "aus4.mozilla.org");
|
||||
|
||||
// Adobe EME is currently pref'd off by default and hidden in the addon manager.
|
||||
pref("media.gmp-eme-adobe.hidden", true);
|
||||
#endif
|
||||
|
||||
// Whether or not to perform reader mode article parsing on page load.
|
||||
|
@ -15,15 +15,6 @@ const DOWNLOAD_INTERVAL = 0;
|
||||
// 1 day default
|
||||
const DEFAULT_SECONDS_BETWEEN_CHECKS = 60 * 60 * 24;
|
||||
|
||||
// Global pref to enable/disable all EME plugins
|
||||
const EME_ENABLED = "media.eme.enabled";
|
||||
|
||||
|
||||
// GMP IDs
|
||||
const OPEN_H264_ID = "gmp-gmpopenh264";
|
||||
const EME_ADOBE_ID = "gmp-eme-adobe";
|
||||
const GMP_ADDONS = [ OPEN_H264_ID, EME_ADOBE_ID ];
|
||||
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
Cu.import("resource://gre/modules/FileUtils.jsm");
|
||||
@ -33,9 +24,10 @@ Cu.import("resource://gre/modules/Log.jsm");
|
||||
Cu.import("resource://gre/modules/osfile.jsm");
|
||||
Cu.import("resource://gre/modules/Task.jsm");
|
||||
Cu.import("resource://gre/modules/ctypes.jsm");
|
||||
Cu.import("resource://gre/modules/GMPUtils.jsm");
|
||||
|
||||
this.EXPORTED_SYMBOLS = ["GMPInstallManager", "GMPExtractor", "GMPDownloader",
|
||||
"GMPAddon", "GMPPrefs", "OPEN_H264_ID"];
|
||||
"GMPAddon"];
|
||||
|
||||
var gLocale = null;
|
||||
|
||||
@ -65,68 +57,6 @@ function getScopedLogger(prefix) {
|
||||
return Log.repository.getLoggerWithMessagePrefix("Toolkit.GMP", prefix + " ");
|
||||
}
|
||||
|
||||
/**
|
||||
* Manages preferences for GMP addons
|
||||
*/
|
||||
let GMPPrefs = {
|
||||
/**
|
||||
* Obtains the specified preference in relation to the specified addon
|
||||
* @param key The GMPPrefs key value to use
|
||||
* @param defaultValue The default value if no preference exists
|
||||
* @param addon The addon to scope the preference to
|
||||
* @return The obtained preference value, or the defaultValue if none exists
|
||||
*/
|
||||
get: function(key, defaultValue, addon) {
|
||||
if (key === GMPPrefs.KEY_APP_DISTRIBUTION ||
|
||||
key === GMPPrefs.KEY_APP_DISTRIBUTION_VERSION) {
|
||||
let prefValue = "default";
|
||||
try {
|
||||
prefValue = Services.prefs.getDefaultBranch(null).getCharPref(key);
|
||||
} catch (e) {
|
||||
// use default when pref not found
|
||||
}
|
||||
return prefValue;
|
||||
}
|
||||
|
||||
return Preferences.get(this._getPrefKey(key, addon), defaultValue);
|
||||
},
|
||||
/**
|
||||
* Sets the specified preference in relation to the specified addon
|
||||
* @param key The GMPPrefs key value to use
|
||||
* @param val The value to set
|
||||
* @param addon The addon to scope the preference to
|
||||
*/
|
||||
set: function(key, val, addon) {
|
||||
let log = getScopedLogger("GMPInstallManager.jsm GMPPrefs.set");
|
||||
log.info("Setting pref: " + this._getPrefKey(key, addon) +
|
||||
" to value: " + val);
|
||||
return Preferences.set(this._getPrefKey(key, addon), val);
|
||||
},
|
||||
_getPrefKey: function(key, addon) {
|
||||
return key.replace("{0}", addon || "");
|
||||
},
|
||||
|
||||
/**
|
||||
* List of keys which can be used in get and set
|
||||
*/
|
||||
KEY_ADDON_ENABLED: "media.{0}.enabled",
|
||||
KEY_ADDON_LAST_UPDATE: "media.{0}.lastUpdate",
|
||||
KEY_ADDON_VERSION: "media.{0}.version",
|
||||
KEY_ADDON_AUTOUPDATE: "media.{0}.autoupdate",
|
||||
KEY_ADDON_HIDDEN: "media.{0}.hidden",
|
||||
KEY_URL: "media.gmp-manager.url",
|
||||
KEY_URL_OVERRIDE: "media.gmp-manager.url.override",
|
||||
KEY_CERT_CHECKATTRS: "media.gmp-manager.cert.checkAttributes",
|
||||
KEY_CERT_REQUIREBUILTIN: "media.gmp-manager.cert.requireBuiltIn",
|
||||
KEY_UPDATE_LAST_CHECK: "media.gmp-manager.lastCheck",
|
||||
KEY_UPDATE_SECONDS_BETWEEN_CHECKS: "media.gmp-manager.secondsBetweenChecks",
|
||||
KEY_APP_DISTRIBUTION: "distribution.id",
|
||||
KEY_APP_DISTRIBUTION_VERSION: "distribution.version",
|
||||
KEY_BUILDID: "media.gmp-manager.buildID",
|
||||
|
||||
CERTS_BRANCH: "media.gmp-manager.certs."
|
||||
};
|
||||
|
||||
// This is copied directly from nsUpdateService.js
|
||||
// It is used for calculating the URL string w/ var replacement.
|
||||
// TODO: refactor this out somewhere else
|
||||
@ -417,11 +347,11 @@ GMPInstallManager.prototype = {
|
||||
return now - lastCheck;
|
||||
},
|
||||
get _isEMEEnabled() {
|
||||
return Preferences.get(EME_ENABLED, true);
|
||||
return GMPPrefs.get(GMPPrefs.KEY_EME_ENABLED, true);
|
||||
},
|
||||
_isAddonUpdateEnabled: function(aAddon) {
|
||||
return GMPPrefs.get(GMPPrefs.KEY_ADDON_ENABLED, true, aAddon) &&
|
||||
GMPPrefs.get(GMPPrefs.KEY_ADDON_AUTOUPDATE, true, aAddon);
|
||||
return GMPPrefs.get(GMPPrefs.KEY_PLUGIN_ENABLED, true, aAddon) &&
|
||||
GMPPrefs.get(GMPPrefs.KEY_PLUGIN_AUTOUPDATE, true, aAddon);
|
||||
},
|
||||
_updateLastCheck: function() {
|
||||
let now = Math.round(Date.now() / 1000);
|
||||
@ -452,7 +382,7 @@ GMPInstallManager.prototype = {
|
||||
"new or updated GMPs.");
|
||||
} else {
|
||||
let secondsBetweenChecks =
|
||||
GMPPrefs.get(GMPPrefs.KEY_UPDATE_SECONDS_BETWEEN_CHECKS,
|
||||
GMPPrefs.get(GMPPrefs.KEY_SECONDS_BETWEEN_CHECKS,
|
||||
DEFAULT_SECONDS_BETWEEN_CHECKS)
|
||||
let secondsSinceLast = this._getTimeSinceLastCheck();
|
||||
log.info("Last check was: " + secondsSinceLast +
|
||||
@ -470,19 +400,14 @@ GMPInstallManager.prototype = {
|
||||
let addonsToInstall = gmpAddons.filter(function(gmpAddon) {
|
||||
log.info("Found addon: " + gmpAddon.toString());
|
||||
|
||||
if (gmpAddon.isHidden || !gmpAddon.isValid || gmpAddon.isInstalled) {
|
||||
log.info("Addon hidden, invalid or already installed.");
|
||||
return false;
|
||||
}
|
||||
|
||||
// We're dealing with an EME GMP if the id starts with "gmp-eme-".
|
||||
if (gmpAddon.id.indexOf("gmp-eme-") == 0 && !this._isEMEEnabled) {
|
||||
log.info("Auto-update is off for all EME plugins, skipping check.");
|
||||
if (!gmpAddon.isValid || GMPUtils.isPluginHidden(gmpAddon) ||
|
||||
gmpAddon.isInstalled) {
|
||||
log.info("Addon invalid, hidden or already installed.");
|
||||
return false;
|
||||
}
|
||||
|
||||
let addonUpdateEnabled = false;
|
||||
if (GMP_ADDONS.indexOf(gmpAddon.id) >= 0) {
|
||||
if (GMP_PLUGIN_IDS.indexOf(gmpAddon.id) >= 0) {
|
||||
addonUpdateEnabled = this._isAddonUpdateEnabled(gmpAddon.id);
|
||||
if (!addonUpdateEnabled) {
|
||||
log.info("Auto-update is off for " + gmpAddon.id +
|
||||
@ -564,7 +489,7 @@ GMPInstallManager.prototype = {
|
||||
let certs = null;
|
||||
if (!Services.prefs.prefHasUserValue(GMPPrefs.KEY_URL_OVERRIDE) &&
|
||||
GMPPrefs.get(GMPPrefs.KEY_CERT_CHECKATTRS, true)) {
|
||||
certs = gCertUtils.readCertPrefs(GMPPrefs.CERTS_BRANCH);
|
||||
certs = gCertUtils.readCertPrefs(GMPPrefs.KEY_CERTS_BRANCH);
|
||||
}
|
||||
|
||||
let allowNonBuiltIn = !GMPPrefs.get(GMPPrefs.KEY_CERT_REQUIREBUILTIN,
|
||||
@ -751,11 +676,11 @@ GMPAddon.prototype = {
|
||||
},
|
||||
get isInstalled() {
|
||||
return this.version &&
|
||||
GMPPrefs.get(GMPPrefs.KEY_ADDON_VERSION, "", this.id) === this.version;
|
||||
GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION, "", this.id) === this.version;
|
||||
},
|
||||
get isEME() {
|
||||
return this.id.indexOf("gmp-eme-") == 0;
|
||||
},
|
||||
get isHidden() {
|
||||
return GMPPrefs.get(GMPPrefs.KEY_ADDON_HIDDEN, false, this.id);
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Constructs a GMPExtractor object which is used to extract a GMP zip
|
||||
@ -959,10 +884,10 @@ GMPDownloader.prototype = {
|
||||
installPromise.then(extractedPaths => {
|
||||
// Success, set the prefs
|
||||
let now = Math.round(Date.now() / 1000);
|
||||
GMPPrefs.set(GMPPrefs.KEY_ADDON_LAST_UPDATE, now, gmpAddon.id);
|
||||
GMPPrefs.set(GMPPrefs.KEY_PLUGIN_LAST_UPDATE, now, gmpAddon.id);
|
||||
// Setting the version pref signals installation completion to consumers,
|
||||
// if you need to set other prefs etc. do it before this.
|
||||
GMPPrefs.set(GMPPrefs.KEY_ADDON_VERSION, gmpAddon.version,
|
||||
GMPPrefs.set(GMPPrefs.KEY_PLUGIN_VERSION, gmpAddon.version,
|
||||
gmpAddon.id);
|
||||
this._deferred.resolve(extractedPaths);
|
||||
}, err => {
|
||||
|
157
toolkit/modules/GMPUtils.jsm
Normal file
157
toolkit/modules/GMPUtils.jsm
Normal file
@ -0,0 +1,157 @@
|
||||
/* 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, results: Cr, utils: Cu, manager: Cm} =
|
||||
Components;
|
||||
|
||||
this.EXPORTED_SYMBOLS = [ "EME_ADOBE_ID",
|
||||
"GMP_PLUGIN_IDS",
|
||||
"GMPPrefs",
|
||||
"GMPUtils",
|
||||
"OPEN_H264_ID" ];
|
||||
|
||||
Cu.import("resource://gre/modules/Preferences.jsm");
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
|
||||
// GMP IDs
|
||||
const OPEN_H264_ID = "gmp-gmpopenh264";
|
||||
const EME_ADOBE_ID = "gmp-eme-adobe";
|
||||
const GMP_PLUGIN_IDS = [ OPEN_H264_ID, EME_ADOBE_ID ];
|
||||
|
||||
this.GMPUtils = {
|
||||
/**
|
||||
* Checks whether or not a given plugin is hidden. Hidden plugins are neither
|
||||
* downloaded nor displayed in the addons manager.
|
||||
* @param aPlugin
|
||||
* The plugin to check.
|
||||
*/
|
||||
isPluginHidden: function(aPlugin) {
|
||||
if (aPlugin.isEME) {
|
||||
if (this._isPluginSupported(aPlugin) ||
|
||||
this._isPluginForcedVisible(aPlugin)) {
|
||||
return !GMPPrefs.get(GMPPrefs.KEY_EME_ENABLED, true);
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
},
|
||||
|
||||
/**
|
||||
* Checks whether or not a given plugin is supported by the current OS.
|
||||
* @param aPlugin
|
||||
* The plugin to check.
|
||||
*/
|
||||
_isPluginSupported: function(aPlugin) {
|
||||
if (aPlugin.id == EME_ADOBE_ID) {
|
||||
if (Services.appinfo.OS == "WINNT") {
|
||||
return Services.sysinfo.getPropertyAsInt32("version") >= 6;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
},
|
||||
|
||||
/**
|
||||
* Checks whether or not a given plugin is forced visible. This can be used
|
||||
* to test plugins that aren't yet supported by default on a particular OS.
|
||||
* @param aPlugin
|
||||
* The plugin to check.
|
||||
*/
|
||||
_isPluginForcedVisible: function(aPlugin) {
|
||||
return GMPPrefs.get(GMPPrefs.KEY_PLUGIN_FORCEVISIBLE, false, aPlugin.id);
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
* Manages preferences for GMP addons
|
||||
*/
|
||||
this.GMPPrefs = {
|
||||
KEY_EME_ENABLED: "media.eme.enabled",
|
||||
KEY_PLUGIN_ENABLED: "media.{0}.enabled",
|
||||
KEY_PLUGIN_LAST_UPDATE: "media.{0}.lastUpdate",
|
||||
KEY_PLUGIN_VERSION: "media.{0}.version",
|
||||
KEY_PLUGIN_AUTOUPDATE: "media.{0}.autoupdate",
|
||||
KEY_PLUGIN_FORCEVISIBLE: "media.{0}.forcevisible",
|
||||
KEY_URL: "media.gmp-manager.url",
|
||||
KEY_URL_OVERRIDE: "media.gmp-manager.url.override",
|
||||
KEY_CERT_CHECKATTRS: "media.gmp-manager.cert.checkAttributes",
|
||||
KEY_CERT_REQUIREBUILTIN: "media.gmp-manager.cert.requireBuiltIn",
|
||||
KEY_UPDATE_LAST_CHECK: "media.gmp-manager.lastCheck",
|
||||
KEY_SECONDS_BETWEEN_CHECKS: "media.gmp-manager.secondsBetweenChecks",
|
||||
KEY_APP_DISTRIBUTION: "distribution.id",
|
||||
KEY_APP_DISTRIBUTION_VERSION: "distribution.version",
|
||||
KEY_BUILDID: "media.gmp-manager.buildID",
|
||||
KEY_CERTS_BRANCH: "media.gmp-manager.certs.",
|
||||
KEY_PROVIDER_ENABLED: "media.gmp-provider.enabled",
|
||||
KEY_PROVIDER_LASTCHECK: "media.gmp-manager.lastCheck",
|
||||
KEY_LOG_BASE: "media.gmp.log.",
|
||||
KEY_LOGGING_LEVEL: this.KEY_LOG_BASE + "level",
|
||||
KEY_LOGGING_DUMP: this.KEY_LOG_BASE + "dump",
|
||||
|
||||
/**
|
||||
* Obtains the specified preference in relation to the specified plugin.
|
||||
* @param aKey The preference key value to use.
|
||||
* @param aDefaultValue The default value if no preference exists.
|
||||
* @param aPlugin The plugin to scope the preference to.
|
||||
* @return The obtained preference value, or the defaultValue if none exists.
|
||||
*/
|
||||
get: function(aKey, aDefaultValue, aPlugin) {
|
||||
if (aKey === this.KEY_APP_DISTRIBUTION ||
|
||||
aKey === this.KEY_APP_DISTRIBUTION_VERSION) {
|
||||
let prefValue = "default";
|
||||
try {
|
||||
prefValue = Services.prefs.getDefaultBranch(null).getCharPref(aKey);
|
||||
} catch (e) {
|
||||
// use default when pref not found
|
||||
}
|
||||
return prefValue;
|
||||
}
|
||||
return Preferences.get(this.getPrefKey(aKey, aPlugin), aDefaultValue);
|
||||
},
|
||||
|
||||
/**
|
||||
* Sets the specified preference in relation to the specified plugin.
|
||||
* @param aKey The preference key value to use.
|
||||
* @param aVal The value to set.
|
||||
* @param aPlugin The plugin to scope the preference to.
|
||||
*/
|
||||
set: function(aKey, aVal, aPlugin) {
|
||||
Preferences.set(this.getPrefKey(aKey, aPlugin), aVal);
|
||||
},
|
||||
|
||||
/**
|
||||
* Checks whether or not the specified preference is set in relation to the
|
||||
* specified plugin.
|
||||
* @param aKey The preference key value to use.
|
||||
* @param aPlugin The plugin to scope the preference to.
|
||||
* @return true if the preference is set, false otherwise.
|
||||
*/
|
||||
isSet: function(aKey, aPlugin) {
|
||||
return Preferences.isSet(this.getPrefKey(aKey, aPlugin));
|
||||
},
|
||||
|
||||
/**
|
||||
* Resets the specified preference in relation to the specified plugin to its
|
||||
* default.
|
||||
* @param aKey The preference key value to use.
|
||||
* @param aPlugin The plugin to scope the preference to.
|
||||
*/
|
||||
reset: function(aKey, aPlugin) {
|
||||
Preferences.reset(this.getPrefKey(aKey, aPlugin));
|
||||
},
|
||||
|
||||
/**
|
||||
* Scopes the specified preference key to the specified plugin.
|
||||
* @param aKey The preference key value to use.
|
||||
* @param aPlugin The plugin to scope the preference to.
|
||||
* @return A preference key scoped to the specified plugin.
|
||||
*/
|
||||
getPrefKey: function(aKey, aPlugin) {
|
||||
return aKey.replace("{0}", aPlugin || "");
|
||||
},
|
||||
};
|
@ -67,6 +67,7 @@ EXTRA_JS_MODULES += [
|
||||
EXTRA_PP_JS_MODULES += [
|
||||
'CertUtils.jsm',
|
||||
'GMPInstallManager.jsm',
|
||||
'GMPUtils.jsm',
|
||||
'ResetProfile.jsm',
|
||||
'secondscreen/RokuApp.jsm',
|
||||
'Services.jsm',
|
||||
|
@ -17,6 +17,7 @@ Cu.import("resource://gre/modules/Preferences.jsm");
|
||||
Cu.import("resource://gre/modules/osfile.jsm");
|
||||
Cu.import("resource://gre/modules/Log.jsm");
|
||||
Cu.import("resource://gre/modules/Task.jsm");
|
||||
Cu.import("resource://gre/modules/GMPUtils.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(
|
||||
this, "GMPInstallManager", "resource://gre/modules/GMPInstallManager.jsm");
|
||||
@ -30,27 +31,12 @@ const NS_GRE_DIR = "GreD";
|
||||
const CLEARKEY_PLUGIN_ID = "gmp-clearkey";
|
||||
const CLEARKEY_VERSION = "0.1";
|
||||
|
||||
/**
|
||||
* Keys which can be used via GMPPrefs.
|
||||
*/
|
||||
const KEY_PROVIDER_ENABLED = "media.gmp-provider.enabled";
|
||||
const KEY_PROVIDER_LASTCHECK = "media.gmp-manager.lastCheck";
|
||||
const KEY_LOG_BASE = "media.gmp.log.";
|
||||
const KEY_LOGGING_LEVEL = KEY_LOG_BASE + "level";
|
||||
const KEY_LOGGING_DUMP = KEY_LOG_BASE + "dump";
|
||||
const KEY_EME_ENABLED = "media.eme.enabled"; // Global pref to enable/disable all EME plugins
|
||||
const KEY_PLUGIN_ENABLED = "media.{0}.enabled";
|
||||
const KEY_PLUGIN_LAST_UPDATE = "media.{0}.lastUpdate";
|
||||
const KEY_PLUGIN_VERSION = "media.{0}.version";
|
||||
const KEY_PLUGIN_AUTOUPDATE = "media.{0}.autoupdate";
|
||||
const KEY_PLUGIN_HIDDEN = "media.{0}.hidden";
|
||||
|
||||
const GMP_LICENSE_INFO = "gmp_license_info";
|
||||
const GMP_LEARN_MORE = "learn_more_label";
|
||||
|
||||
const GMP_PLUGINS = [
|
||||
{
|
||||
id: "gmp-gmpopenh264",
|
||||
id: OPEN_H264_ID,
|
||||
name: "openH264_name",
|
||||
description: "openH264_description2",
|
||||
// The following licenseURL is part of an awful hack to include the OpenH264
|
||||
@ -61,7 +47,7 @@ const GMP_PLUGINS = [
|
||||
optionsURL: "chrome://mozapps/content/extensions/gmpPrefs.xul"
|
||||
},
|
||||
{
|
||||
id: "gmp-eme-adobe",
|
||||
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
|
||||
@ -88,9 +74,9 @@ function configureLogging() {
|
||||
gLogger = Log.repository.getLogger("Toolkit.GMP");
|
||||
gLogger.addAppender(new Log.ConsoleAppender(new Log.BasicFormatter()));
|
||||
}
|
||||
gLogger.level = GMPPrefs.get(KEY_LOGGING_LEVEL, Log.Level.Warn);
|
||||
gLogger.level = GMPPrefs.get(GMPPrefs.KEY_LOGGING_LEVEL, Log.Level.Warn);
|
||||
|
||||
let logDumping = GMPPrefs.get(KEY_LOGGING_DUMP, false);
|
||||
let logDumping = GMPPrefs.get(GMPPrefs.KEY_LOGGING_DUMP, false);
|
||||
if (logDumping != !!gLogAppenderDump) {
|
||||
if (logDumping) {
|
||||
gLogAppenderDump = new Log.DumpAppender(new Log.BasicFormatter());
|
||||
@ -102,64 +88,7 @@ function configureLogging() {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Manages preferences for GMP addons
|
||||
*/
|
||||
let GMPPrefs = {
|
||||
/**
|
||||
* Obtains the specified preference in relation to the specified plugin.
|
||||
* @param aKey The preference key value to use.
|
||||
* @param aDefaultValue The default value if no preference exists.
|
||||
* @param aPlugin The plugin to scope the preference to.
|
||||
* @return The obtained preference value, or the defaultValue if none exists.
|
||||
*/
|
||||
get: function(aKey, aDefaultValue, aPlugin) {
|
||||
return Preferences.get(this.getPrefKey(aKey, aPlugin), aDefaultValue);
|
||||
},
|
||||
/**
|
||||
* Sets the specified preference in relation to the specified plugin.
|
||||
* @param aKey The preference key value to use.
|
||||
* @param aVal The value to set.
|
||||
* @param aPlugin The plugin to scope the preference to.
|
||||
*/
|
||||
set: function(aKey, aVal, aPlugin) {
|
||||
let log =
|
||||
Log.repository.getLoggerWithMessagePrefix("Toolkit.GMP",
|
||||
"GMPProvider.jsm " +
|
||||
"GMPPrefs.set ");
|
||||
log.trace("Setting pref: " + this.getPrefKey(aKey, aPlugin) +
|
||||
" to value: " + aVal);
|
||||
Preferences.set(this.getPrefKey(aKey, aPlugin), aVal);
|
||||
},
|
||||
/**
|
||||
* Checks whether or not the specified preference is set in relation to the
|
||||
* specified plugin.
|
||||
* @param aKey The preference key value to use.
|
||||
* @param aPlugin The plugin to scope the preference to.
|
||||
* @return true if the preference is set, false otherwise.
|
||||
*/
|
||||
isSet: function(aKey, aPlugin) {
|
||||
return Preferences.isSet(GMPPrefs.getPrefKey(aKey, aPlugin));
|
||||
},
|
||||
/**
|
||||
* Resets the specified preference in relation to the specified plugin to its
|
||||
* default.
|
||||
* @param aKey The preference key value to use.
|
||||
* @param aPlugin The plugin to scope the preference to.
|
||||
*/
|
||||
reset: function(aKey, aPlugin) {
|
||||
Preferences.reset(this.getPrefKey(aKey, aPlugin));
|
||||
},
|
||||
/**
|
||||
* Scopes the specified preference key to the specified plugin.
|
||||
* @param aKey The preference key value to use.
|
||||
* @param aPlugin The plugin to scope the preference to.
|
||||
* @return A preference key scoped to the specified plugin.
|
||||
*/
|
||||
getPrefKey: function(aKey, aPlugin) {
|
||||
return aKey.replace("{0}", aPlugin || "");
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* The GMPWrapper provides the info for the various GMP plugins to public
|
||||
@ -171,13 +100,15 @@ function GMPWrapper(aPluginInfo) {
|
||||
Log.repository.getLoggerWithMessagePrefix("Toolkit.GMP",
|
||||
"GMPWrapper(" +
|
||||
this._plugin.id + ") ");
|
||||
Preferences.observe(GMPPrefs.getPrefKey(KEY_PLUGIN_ENABLED, this._plugin.id),
|
||||
Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_ENABLED,
|
||||
this._plugin.id),
|
||||
this.onPrefEnabledChanged, this);
|
||||
Preferences.observe(GMPPrefs.getPrefKey(KEY_PLUGIN_VERSION, this._plugin.id),
|
||||
Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_VERSION,
|
||||
this._plugin.id),
|
||||
this.onPrefVersionChanged, this);
|
||||
if (this._plugin.isEME) {
|
||||
Preferences.observe(KEY_EME_ENABLED, this.onPrefEMEGlobalEnabledChanged,
|
||||
this);
|
||||
Preferences.observe(GMPPrefs.KEY_EME_ENABLED,
|
||||
this.onPrefEMEGlobalEnabledChanged, this);
|
||||
}
|
||||
}
|
||||
|
||||
@ -194,8 +125,8 @@ GMPWrapper.prototype = {
|
||||
if (!this._gmpPath && this.isInstalled) {
|
||||
this._gmpPath = OS.Path.join(OS.Constants.Path.profileDir,
|
||||
this._plugin.id,
|
||||
GMPPrefs.get(KEY_PLUGIN_VERSION, null,
|
||||
this._plugin.id));
|
||||
GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION,
|
||||
null, this._plugin.id));
|
||||
}
|
||||
return this._gmpPath;
|
||||
},
|
||||
@ -210,12 +141,12 @@ GMPWrapper.prototype = {
|
||||
get description() { return this._plugin.description; },
|
||||
get fullDescription() { return this._plugin.fullDescription; },
|
||||
|
||||
get version() { return GMPPrefs.get(KEY_PLUGIN_VERSION, null,
|
||||
get version() { return GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION, null,
|
||||
this._plugin.id); },
|
||||
|
||||
get isActive() { return !this.appDisabled && !this.userDisabled; },
|
||||
get appDisabled() {
|
||||
if (this._plugin.isEME && !GMPPrefs.get(KEY_EME_ENABLED, true)) {
|
||||
if (this._plugin.isEME && !GMPPrefs.get(GMPPrefs.KEY_EME_ENABLED, true)) {
|
||||
// If "media.eme.enabled" is false, all EME plugins are disabled.
|
||||
return true;
|
||||
}
|
||||
@ -223,9 +154,10 @@ GMPWrapper.prototype = {
|
||||
},
|
||||
|
||||
get userDisabled() {
|
||||
return !GMPPrefs.get(KEY_PLUGIN_ENABLED, true, this._plugin.id);
|
||||
return !GMPPrefs.get(GMPPrefs.KEY_PLUGIN_ENABLED, true, this._plugin.id);
|
||||
},
|
||||
set userDisabled(aVal) { GMPPrefs.set(KEY_PLUGIN_ENABLED, aVal === false,
|
||||
set userDisabled(aVal) { GMPPrefs.set(GMPPrefs.KEY_PLUGIN_ENABLED,
|
||||
aVal === false,
|
||||
this._plugin.id); },
|
||||
|
||||
get blocklistState() { return Ci.nsIBlocklistService.STATE_NOT_BLOCKED; },
|
||||
@ -246,7 +178,7 @@ GMPWrapper.prototype = {
|
||||
},
|
||||
|
||||
get updateDate() {
|
||||
let time = Number(GMPPrefs.get(KEY_PLUGIN_LAST_UPDATE, null,
|
||||
let time = Number(GMPPrefs.get(GMPPrefs.KEY_PLUGIN_LAST_UPDATE, null,
|
||||
this._plugin.id));
|
||||
if (time !== NaN && this.isInstalled) {
|
||||
return new Date(time * 1000)
|
||||
@ -275,21 +207,21 @@ GMPWrapper.prototype = {
|
||||
},
|
||||
|
||||
get applyBackgroundUpdates() {
|
||||
if (!GMPPrefs.isSet(KEY_PLUGIN_AUTOUPDATE, this._plugin.id)) {
|
||||
if (!GMPPrefs.isSet(GMPPrefs.KEY_PLUGIN_AUTOUPDATE, this._plugin.id)) {
|
||||
return AddonManager.AUTOUPDATE_DEFAULT;
|
||||
}
|
||||
|
||||
return GMPPrefs.get(KEY_PLUGIN_AUTOUPDATE, true, this._plugin.id) ?
|
||||
return GMPPrefs.get(GMPPrefs.KEY_PLUGIN_AUTOUPDATE, true, this._plugin.id) ?
|
||||
AddonManager.AUTOUPDATE_ENABLE : AddonManager.AUTOUPDATE_DISABLE;
|
||||
},
|
||||
|
||||
set applyBackgroundUpdates(aVal) {
|
||||
if (aVal == AddonManager.AUTOUPDATE_DEFAULT) {
|
||||
GMPPrefs.reset(KEY_PLUGIN_AUTOUPDATE, this._plugin.id);
|
||||
GMPPrefs.reset(GMPPrefs.KEY_PLUGIN_AUTOUPDATE, this._plugin.id);
|
||||
} else if (aVal == AddonManager.AUTOUPDATE_ENABLE) {
|
||||
GMPPrefs.set(KEY_PLUGIN_AUTOUPDATE, true, this._plugin.id);
|
||||
GMPPrefs.set(GMPPrefs.KEY_PLUGIN_AUTOUPDATE, true, this._plugin.id);
|
||||
} else if (aVal == AddonManager.AUTOUPDATE_DISABLE) {
|
||||
GMPPrefs.set(KEY_PLUGIN_AUTOUPDATE, false, this._plugin.id);
|
||||
GMPPrefs.set(GMPPrefs.KEY_PLUGIN_AUTOUPDATE, false, this._plugin.id);
|
||||
}
|
||||
},
|
||||
|
||||
@ -307,7 +239,7 @@ GMPWrapper.prototype = {
|
||||
}
|
||||
|
||||
let secSinceLastCheck =
|
||||
Date.now() / 1000 - Preferences.get(KEY_PROVIDER_LASTCHECK, 0);
|
||||
Date.now() / 1000 - Preferences.get(GMPPrefs.KEY_PROVIDER_LASTCHECK, 0);
|
||||
if (secSinceLastCheck <= SEC_IN_A_DAY) {
|
||||
this._log.trace("findUpdates() - " + this._plugin.id +
|
||||
" - last check was less then a day ago");
|
||||
@ -400,6 +332,25 @@ GMPWrapper.prototype = {
|
||||
onPrefEMEGlobalEnabledChanged: function() {
|
||||
AddonManagerPrivate.callAddonListeners("onPropertyChanged", this,
|
||||
["appDisabled"]);
|
||||
if (this.appDisabled) {
|
||||
AddonManagerPrivate.callAddonListeners("onUninstalling", this, false);
|
||||
if (this._gmpPath) {
|
||||
this._log.info("onPrefEMEGlobalEnabledChanged() - unregistering gmp " +
|
||||
"directory " + this._gmpPath);
|
||||
gmpService.removePluginDirectory(this._gmpPath);
|
||||
}
|
||||
AddonManagerPrivate.callAddonListeners("onUninstalled", this);
|
||||
} else {
|
||||
AddonManagerPrivate.callInstallListeners("onExternalInstall", null, this,
|
||||
null, false);
|
||||
AddonManagerPrivate.callAddonListeners("onInstalling", this, false);
|
||||
if (this._gmpPath && this.isActive) {
|
||||
this._log.info("onPrefEMEGlobalEnabledChanged() - registering gmp " +
|
||||
"directory " + this._gmpPath);
|
||||
gmpService.addPluginDirectory(this._gmpPath);
|
||||
}
|
||||
AddonManagerPrivate.callAddonListeners("onInstalled", this);
|
||||
}
|
||||
if (!this.userDisabled) {
|
||||
this._handleEnabledChanged();
|
||||
}
|
||||
@ -422,12 +373,13 @@ GMPWrapper.prototype = {
|
||||
|
||||
AddonManagerPrivate.callInstallListeners("onExternalInstall", null, this,
|
||||
null, false);
|
||||
AddonManagerPrivate.callAddonListeners("onInstalling", this, false);
|
||||
this._gmpPath = null;
|
||||
if (this.isInstalled) {
|
||||
this._gmpPath = OS.Path.join(OS.Constants.Path.profileDir,
|
||||
this._plugin.id,
|
||||
GMPPrefs.get(KEY_PLUGIN_VERSION, null,
|
||||
this._plugin.id));
|
||||
GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION,
|
||||
null, this._plugin.id));
|
||||
}
|
||||
if (this._gmpPath && this.isActive) {
|
||||
this._log.info("onPrefVersionChanged() - registering gmp directory " +
|
||||
@ -438,13 +390,15 @@ GMPWrapper.prototype = {
|
||||
},
|
||||
|
||||
shutdown: function() {
|
||||
Preferences.ignore(GMPPrefs.getPrefKey(KEY_PLUGIN_ENABLED, this._plugin.id),
|
||||
Preferences.ignore(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_ENABLED,
|
||||
this._plugin.id),
|
||||
this.onPrefEnabledChanged, this);
|
||||
Preferences.ignore(GMPPrefs.getPrefKey(KEY_PLUGIN_VERSION, this._plugin.id),
|
||||
Preferences.ignore(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_VERSION,
|
||||
this._plugin.id),
|
||||
this.onPrefVersionChanged, this);
|
||||
if (this._plugin.isEME) {
|
||||
Preferences.ignore(KEY_EME_ENABLED, this.onPrefEMEGlobalEnabledChanged,
|
||||
this);
|
||||
Preferences.ignore(GMPPrefs.KEY_EME_ENABLED,
|
||||
this.onPrefEMEGlobalEnabledChanged, this);
|
||||
}
|
||||
return this._updateTask;
|
||||
},
|
||||
@ -462,7 +416,7 @@ let GMPProvider = {
|
||||
let telemetry = {};
|
||||
this.buildPluginList();
|
||||
|
||||
Preferences.observe(KEY_LOG_BASE, configureLogging);
|
||||
Preferences.observe(GMPPrefs.KEY_LOG_BASE, configureLogging);
|
||||
|
||||
for (let [id, plugin] of this._plugins) {
|
||||
let wrapper = plugin.wrapper;
|
||||
@ -490,7 +444,7 @@ let GMPProvider = {
|
||||
}
|
||||
}
|
||||
|
||||
if (Preferences.get(KEY_EME_ENABLED, false)) {
|
||||
if (Preferences.get(GMPPrefs.KEY_EME_ENABLED, false)) {
|
||||
try {
|
||||
let greDir = Services.dirsvc.get(NS_GRE_DIR,
|
||||
Ci.nsILocalFile);
|
||||
@ -510,7 +464,7 @@ let GMPProvider = {
|
||||
|
||||
shutdown: function() {
|
||||
this._log.trace("shutdown");
|
||||
Preferences.ignore(KEY_LOG_BASE, configureLogging);
|
||||
Preferences.ignore(GMPPrefs.KEY_LOG_BASE, configureLogging);
|
||||
|
||||
let shutdownTask = Task.spawn(function* GMPProvider_shutdownTask() {
|
||||
this._log.trace("shutdown - shutdownTask");
|
||||
@ -541,7 +495,7 @@ let GMPProvider = {
|
||||
}
|
||||
|
||||
let plugin = this._plugins.get(aId);
|
||||
if (plugin) {
|
||||
if (plugin && !GMPUtils.isPluginHidden(plugin)) {
|
||||
aCallback(plugin.wrapper);
|
||||
} else {
|
||||
aCallback(null);
|
||||
@ -555,12 +509,13 @@ let GMPProvider = {
|
||||
return;
|
||||
}
|
||||
|
||||
let results = [p.wrapper for ([id, p] of this._plugins)];
|
||||
let results = [p.wrapper for ([id, p] of this._plugins)
|
||||
if (!GMPUtils.isPluginHidden(p))];
|
||||
aCallback(results);
|
||||
},
|
||||
|
||||
get isEnabled() {
|
||||
return GMPPrefs.get(KEY_PROVIDER_ENABLED, false);
|
||||
return GMPPrefs.get(GMPPrefs.KEY_PROVIDER_ENABLED, false);
|
||||
},
|
||||
|
||||
generateFullDescription: function(aPlugin) {
|
||||
@ -576,26 +531,21 @@ let GMPProvider = {
|
||||
},
|
||||
|
||||
buildPluginList: function() {
|
||||
|
||||
let map = new Map();
|
||||
GMP_PLUGINS.forEach(aPlugin => {
|
||||
// Only show GMPs in addon manager that aren't hidden.
|
||||
if (!GMPPrefs.get(KEY_PLUGIN_HIDDEN, false, aPlugin.id)) {
|
||||
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
|
||||
};
|
||||
plugin.fullDescription = this.generateFullDescription(aPlugin);
|
||||
plugin.wrapper = new GMPWrapper(plugin);
|
||||
map.set(plugin.id, plugin);
|
||||
}
|
||||
}, this);
|
||||
this._plugins = map;
|
||||
this._plugins = new Map();
|
||||
for (let aPlugin of GMP_PLUGINS) {
|
||||
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,
|
||||
};
|
||||
plugin.fullDescription = this.generateFullDescription(aPlugin);
|
||||
plugin.wrapper = new GMPWrapper(plugin);
|
||||
this._plugins.set(plugin.id, plugin);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user