summaryrefslogtreecommitdiffstats
path: root/toolkit/modules
diff options
context:
space:
mode:
authorMoonchild <mcwerewolf@wolfbeast.com>2019-03-13 07:49:07 +0100
committerGitHub <noreply@github.com>2019-03-13 07:49:07 +0100
commitbf0413359245579e9509146d42cd5547e35da695 (patch)
tree8218d4f60d9eccacbf42df8cb88094a082d401b4 /toolkit/modules
parent51b821b3fdc5a7eab2369cb6a6680598a6264b08 (diff)
parent709bc24e9110eba12f94cfcb8db00a8338ac4098 (diff)
downloadUXP-bf0413359245579e9509146d42cd5547e35da695.tar
UXP-bf0413359245579e9509146d42cd5547e35da695.tar.gz
UXP-bf0413359245579e9509146d42cd5547e35da695.tar.lz
UXP-bf0413359245579e9509146d42cd5547e35da695.tar.xz
UXP-bf0413359245579e9509146d42cd5547e35da695.zip
Merge pull request #998 from MoonchildProductions/master
Merge master into Sync-weave
Diffstat (limited to 'toolkit/modules')
-rw-r--r--toolkit/modules/AppConstants.jsm7
-rw-r--r--toolkit/modules/Deprecated.jsm49
-rw-r--r--toolkit/modules/GMPInstallManager.jsm523
-rw-r--r--toolkit/modules/GMPUtils.jsm208
-rw-r--r--toolkit/modules/moz.build6
5 files changed, 46 insertions, 747 deletions
diff --git a/toolkit/modules/AppConstants.jsm b/toolkit/modules/AppConstants.jsm
index 7c8a046e9..1e2204f7e 100644
--- a/toolkit/modules/AppConstants.jsm
+++ b/toolkit/modules/AppConstants.jsm
@@ -180,13 +180,6 @@ MOZ_SAFE_BROWSING:
false,
#endif
- MOZ_MAINTENANCE_SERVICE:
-#ifdef MOZ_MAINTENANCE_SERVICE
- true,
-#else
- false,
-#endif
-
DEBUG:
#ifdef DEBUG
true,
diff --git a/toolkit/modules/Deprecated.jsm b/toolkit/modules/Deprecated.jsm
index 7491a4938..981cd13ab 100644
--- a/toolkit/modules/Deprecated.jsm
+++ b/toolkit/modules/Deprecated.jsm
@@ -9,15 +9,21 @@ this.EXPORTED_SYMBOLS = [ "Deprecated" ];
const Cu = Components.utils;
const Ci = Components.interfaces;
const PREF_DEPRECATION_WARNINGS = "devtools.errorconsole.deprecation_warnings";
+const PREF_PERFORMANCE_WARNINGS = "devtools.errorconsole.performance_warnings";
Cu.import("resource://gre/modules/Services.jsm");
// A flag that indicates whether deprecation warnings should be logged.
-var logWarnings = Services.prefs.getBoolPref(PREF_DEPRECATION_WARNINGS);
+var logDepWarnings = Services.prefs.getBoolPref(PREF_DEPRECATION_WARNINGS);
+var logPerfWarnings = Services.prefs.getBoolPref(PREF_PERFORMANCE_WARNINGS);
Services.prefs.addObserver(PREF_DEPRECATION_WARNINGS,
function (aSubject, aTopic, aData) {
- logWarnings = Services.prefs.getBoolPref(PREF_DEPRECATION_WARNINGS);
+ logDepWarnings = Services.prefs.getBoolPref(PREF_DEPRECATION_WARNINGS);
+ }, false);
+Services.prefs.addObserver(PREF_PERFORMANCE_WARNINGS,
+ function (aSubject, aTopic, aData) {
+ logPerfWarnings = Services.prefs.getBoolPref(PREF_PERFORMANCE_WARNINGS);
}, false);
/**
@@ -58,7 +64,7 @@ this.Deprecated = {
* logged.
*/
warning: function (aText, aUrl, aStack) {
- if (!logWarnings) {
+ if (!logDepWarnings) {
return;
}
@@ -71,7 +77,42 @@ this.Deprecated = {
let textMessage = "DEPRECATION WARNING: " + aText +
"\nYou may find more details about this deprecation at: " +
- aUrl + "\n" +
+ aUrl + "\nCallstack:\n" +
+ // Append a callstack part to the deprecation message.
+ stringifyCallstack(aStack);
+
+ // Report deprecation warning.
+ Cu.reportError(textMessage);
+ },
+
+ /**
+ * Log a performance warning.
+ *
+ * @param string aText
+ * Performance issue warning text.
+ * @param string aUrl
+ * A URL pointing to documentation describing performance
+ * issue and the way to address it.
+ * @param nsIStackFrame aStack
+ * An optional callstack. If it is not provided a
+ * snapshot of the current JavaScript callstack will be
+ * logged.
+ */
+ perfWarning: function (aText, aUrl, aStack) {
+ if (!logPerfWarnings) {
+ return;
+ }
+
+ // If URL is not provided, report an error.
+ if (!aUrl) {
+ Cu.reportError("Error in Deprecated.perfWarning: warnings must " +
+ "provide a URL documenting this performance issue.");
+ return;
+ }
+
+ let textMessage = "PERFORMANCE WARNING: " + aText +
+ "\nYou may find more details about this problem at: " +
+ aUrl + "\nCallstack:\n" +
// Append a callstack part to the deprecation message.
stringifyCallstack(aStack);
diff --git a/toolkit/modules/GMPInstallManager.jsm b/toolkit/modules/GMPInstallManager.jsm
deleted file mode 100644
index b5987ca55..000000000
--- a/toolkit/modules/GMPInstallManager.jsm
+++ /dev/null
@@ -1,523 +0,0 @@
-/* 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";
-
-this.EXPORTED_SYMBOLS = [];
-
-const {classes: Cc, interfaces: Ci, results: Cr, utils: Cu, manager: Cm} =
- Components;
-// 1 day default
-const DEFAULT_SECONDS_BETWEEN_CHECKS = 60 * 60 * 24;
-
-var GMPInstallFailureReason = {
- GMP_INVALID: 1,
- GMP_HIDDEN: 2,
- GMP_DISABLED: 3,
- GMP_UPDATE_DISABLED: 4,
-};
-
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-Cu.import("resource://gre/modules/Services.jsm");
-Cu.import("resource://gre/modules/FileUtils.jsm");
-Cu.import("resource://gre/modules/Promise.jsm");
-Cu.import("resource://gre/modules/Preferences.jsm");
-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/GMPUtils.jsm");
-Cu.import("resource://gre/modules/addons/ProductAddonChecker.jsm");
-
-this.EXPORTED_SYMBOLS = ["GMPInstallManager", "GMPExtractor", "GMPDownloader",
- "GMPAddon"];
-
-// Shared code for suppressing bad cert dialogs
-XPCOMUtils.defineLazyGetter(this, "gCertUtils", function() {
- let temp = { };
- Cu.import("resource://gre/modules/CertUtils.jsm", temp);
- return temp;
-});
-
-XPCOMUtils.defineLazyModuleGetter(this, "UpdateUtils",
- "resource://gre/modules/UpdateUtils.jsm");
-
-function getScopedLogger(prefix) {
- // `PARENT_LOGGER_ID.` being passed here effectively links this logger
- // to the parentLogger.
- return Log.repository.getLoggerWithMessagePrefix("Toolkit.GMP", prefix + " ");
-}
-
-/**
- * Provides an easy API for downloading and installing GMP Addons
- */
-function GMPInstallManager() {
-}
-/**
- * Temp file name used for downloading
- */
-GMPInstallManager.prototype = {
- /**
- * Obtains a URL with replacement of vars
- */
- _getURL: function() {
- let log = getScopedLogger("GMPInstallManager._getURL");
- // Use the override URL if it is specified. The override URL is just like
- // the normal URL but it does not check the cert.
- let url = GMPPrefs.get(GMPPrefs.KEY_URL_OVERRIDE);
- if (url) {
- log.info("Using override url: " + url);
- } else {
- url = GMPPrefs.get(GMPPrefs.KEY_URL);
- log.info("Using url: " + url);
- }
-
- url = UpdateUtils.formatUpdateURL(url);
-
- log.info("Using url (with replacement): " + url);
- return url;
- },
- /**
- * Performs an addon check.
- * @return a promise which will be resolved or rejected.
- * The promise is resolved with an object with properties:
- * gmpAddons: array of GMPAddons
- * usedFallback: whether the data was collected from online or
- * from fallback data within the build
- * The promise is rejected with an object with properties:
- * target: The XHR request object
- * status: The HTTP status code
- * type: Sometimes specifies type of rejection
- */
- checkForAddons: function() {
- let log = getScopedLogger("GMPInstallManager.checkForAddons");
- if (this._deferred) {
- log.error("checkForAddons already called");
- return Promise.reject({type: "alreadycalled"});
- }
- this._deferred = Promise.defer();
- let url = this._getURL();
-
- let allowNonBuiltIn = true;
- let certs = null;
- if (!Services.prefs.prefHasUserValue(GMPPrefs.KEY_URL_OVERRIDE)) {
- allowNonBuiltIn = !GMPPrefs.get(GMPPrefs.KEY_CERT_REQUIREBUILTIN, true);
- if (GMPPrefs.get(GMPPrefs.KEY_CERT_CHECKATTRS, true)) {
- certs = gCertUtils.readCertPrefs(GMPPrefs.KEY_CERTS_BRANCH);
- }
- }
-
- let addonPromise = ProductAddonChecker
- .getProductAddonList(url, allowNonBuiltIn, certs);
-
- addonPromise.then(res => {
- if (!res || !res.gmpAddons) {
- this._deferred.resolve({gmpAddons: []});
- }
- else {
- res.gmpAddons = res.gmpAddons.map(a => new GMPAddon(a));
- this._deferred.resolve(res);
- }
- delete this._deferred;
- }, (ex) => {
- this._deferred.reject(ex);
- delete this._deferred;
- });
-
- return this._deferred.promise;
- },
- /**
- * Installs the specified addon and calls a callback when done.
- * @param gmpAddon The GMPAddon object to install
- * @return a promise which will be resolved or rejected
- * The promise will resolve with an array of paths that were extracted
- * The promise will reject with an error object:
- * target: The XHR request object
- * status: The HTTP status code
- * type: A string to represent the type of error
- * downloaderr, verifyerr or previouserrorencountered
- */
- installAddon: function(gmpAddon) {
- if (this._deferred) {
- log.error("previous error encountered");
- return Promise.reject({type: "previouserrorencountered"});
- }
- this.gmpDownloader = new GMPDownloader(gmpAddon);
- return this.gmpDownloader.start();
- },
- _getTimeSinceLastCheck: function() {
- let now = Math.round(Date.now() / 1000);
- // Default to 0 here because `now - 0` will be returned later if that case
- // is hit. We want a large value so a check will occur.
- let lastCheck = GMPPrefs.get(GMPPrefs.KEY_UPDATE_LAST_CHECK, 0);
- // Handle clock jumps, return now since we want it to represent
- // a lot of time has passed since the last check.
- if (now < lastCheck) {
- return now;
- }
- return now - lastCheck;
- },
- get _isEMEEnabled() {
- return GMPPrefs.get(GMPPrefs.KEY_EME_ENABLED, true);
- },
- _isAddonEnabled: function(aAddon) {
- return GMPPrefs.get(GMPPrefs.KEY_PLUGIN_ENABLED, true, aAddon);
- },
- _isAddonUpdateEnabled: function(aAddon) {
- return this._isAddonEnabled(aAddon) &&
- GMPPrefs.get(GMPPrefs.KEY_PLUGIN_AUTOUPDATE, true, aAddon);
- },
- _updateLastCheck: function() {
- let now = Math.round(Date.now() / 1000);
- GMPPrefs.set(GMPPrefs.KEY_UPDATE_LAST_CHECK, now);
- },
- _versionchangeOccurred: function() {
- let savedBuildID = GMPPrefs.get(GMPPrefs.KEY_BUILDID, null);
- let buildID = Services.appinfo.platformBuildID;
- if (savedBuildID == buildID) {
- return false;
- }
- GMPPrefs.set(GMPPrefs.KEY_BUILDID, buildID);
- return true;
- },
- /**
- * Wrapper for checkForAddons and installAddon.
- * Will only install if not already installed and will log the results.
- * This will only install/update the OpenH264 and EME plugins
- * @return a promise which will be resolved if all addons could be installed
- * successfully, rejected otherwise.
- */
- simpleCheckAndInstall: Task.async(function*() {
- let log = getScopedLogger("GMPInstallManager.simpleCheckAndInstall");
-
- if (this._versionchangeOccurred()) {
- log.info("A version change occurred. Ignoring " +
- "media.gmp-manager.lastCheck to check immediately for " +
- "new or updated GMPs.");
- } else {
- let secondsBetweenChecks =
- GMPPrefs.get(GMPPrefs.KEY_SECONDS_BETWEEN_CHECKS,
- DEFAULT_SECONDS_BETWEEN_CHECKS)
- let secondsSinceLast = this._getTimeSinceLastCheck();
- log.info("Last check was: " + secondsSinceLast +
- " seconds ago, minimum seconds: " + secondsBetweenChecks);
- if (secondsBetweenChecks > secondsSinceLast) {
- log.info("Will not check for updates.");
- return {status: "too-frequent-no-check"};
- }
- }
-
- try {
- let {usedFallback, 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) {
- log.info("Addon |" + gmpAddon.id + "| is invalid.");
- return false;
- }
-
- if (GMPUtils.isPluginHidden(gmpAddon)) {
- log.info("Addon |" + gmpAddon.id + "| has been hidden.");
- return false;
- }
-
- if (gmpAddon.isInstalled) {
- log.info("Addon |" + gmpAddon.id + "| already installed.");
- return false;
- }
-
- // Do not install from fallback if already installed as it
- // may be a downgrade
- if (usedFallback && gmpAddon.isUpdate) {
- log.info("Addon |" + gmpAddon.id + "| not installing updates based " +
- "on fallback.");
- return false;
- }
-
- let addonUpdateEnabled = false;
- if (GMP_PLUGIN_IDS.indexOf(gmpAddon.id) >= 0) {
- if (!this._isAddonEnabled(gmpAddon.id)) {
- log.info("GMP |" + gmpAddon.id + "| has been disabled; skipping check.");
- } else if (!this._isAddonUpdateEnabled(gmpAddon.id)) {
- 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 +
- "', skipping check.");
- }
-
- return addonUpdateEnabled;
- }, this);
-
- if (!addonsToInstall.length) {
- log.info("No new addons to install, returning");
- return {status: "nothing-new-to-install"};
- }
-
- let installResults = [];
- let failureEncountered = false;
- for (let addon of addonsToInstall) {
- try {
- yield this.installAddon(addon);
- installResults.push({
- id: addon.id,
- result: "succeeded",
- });
- } catch (e) {
- failureEncountered = true;
- installResults.push({
- id: addon.id,
- result: "failed",
- });
- }
- }
- if (failureEncountered) {
- throw {status: "failed",
- results: installResults};
- }
- return {status: "succeeded",
- results: installResults};
- } catch (e) {
- log.error("Could not check for addons", e);
- throw e;
- }
- }),
-
- /**
- * Makes sure everything is cleaned up
- */
- uninit: function() {
- let log = getScopedLogger("GMPInstallManager.uninit");
- if (this._request) {
- log.info("Aborting request");
- this._request.abort();
- }
- if (this._deferred) {
- log.info("Rejecting deferred");
- this._deferred.reject({type: "uninitialized"});
- }
- log.info("Done cleanup");
- },
-
- /**
- * If set to true, specifies to leave the temporary downloaded zip file.
- * This is useful for tests.
- */
- overrideLeaveDownloadedZip: false,
-};
-
-/**
- * Used to construct a single GMP addon
- * GMPAddon objects are returns from GMPInstallManager.checkForAddons
- * GMPAddon objects can also be used in calls to GMPInstallManager.installAddon
- *
- * @param addon The ProductAddonChecker `addon` object
- */
-function GMPAddon(addon) {
- let log = getScopedLogger("GMPAddon.constructor");
- for (let name of Object.keys(addon)) {
- this[name] = addon[name];
- }
- log.info ("Created new addon: " + this.toString());
-}
-
-GMPAddon.prototype = {
- /**
- * Returns a string representation of the addon
- */
- toString: function() {
- return this.id + " (" +
- "isValid: " + this.isValid +
- ", isInstalled: " + this.isInstalled +
- ", hashFunction: " + this.hashFunction+
- ", hashValue: " + this.hashValue +
- (this.size !== undefined ? ", size: " + this.size : "" ) +
- ")";
- },
- /**
- * If all the fields aren't specified don't consider this addon valid
- * @return true if the addon is parsed and valid
- */
- get isValid() {
- return this.id && this.URL && this.version &&
- this.hashFunction && !!this.hashValue;
- },
- get isInstalled() {
- return this.version &&
- GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION, "", this.id) === this.version;
- },
- get isEME() {
- return this.id == "gmp-widevinecdm" || this.id.indexOf("gmp-eme-") == 0;
- },
- /**
- * @return true if the addon has been previously installed and this is
- * a new version, if this is a fresh install return false
- */
- get isUpdate() {
- return this.version &&
- GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION, false, this.id);
- },
-};
-/**
- * Constructs a GMPExtractor object which is used to extract a GMP zip
- * into the specified location. (Which typically leties per platform)
- * @param zipPath The path on disk of the zip file to extract
- */
-function GMPExtractor(zipPath, installToDirPath) {
- this.zipPath = zipPath;
- this.installToDirPath = installToDirPath;
-}
-GMPExtractor.prototype = {
- /**
- * Obtains a list of all the entries in a zipfile in the format of *.*.
- * This also includes files inside directories.
- *
- * @param zipReader the nsIZipReader to check
- * @return An array of string name entries which can be used
- * in nsIZipReader.extract
- */
- _getZipEntries: function(zipReader) {
- let entries = [];
- let enumerator = zipReader.findEntries("*.*");
- while (enumerator.hasMore()) {
- entries.push(enumerator.getNext());
- }
- return entries;
- },
- /**
- * Installs the this.zipPath contents into the directory used to store GMP
- * addons for the current platform.
- *
- * @return a promise which will be resolved or rejected
- * See GMPInstallManager.installAddon for resolve/rejected info
- */
- install: function() {
- try {
- let log = getScopedLogger("GMPExtractor.install");
- this._deferred = Promise.defer();
- log.info("Installing " + this.zipPath + "...");
- // Get the input zip file
- let zipFile = Cc["@mozilla.org/file/local;1"].
- createInstance(Ci.nsIFile);
- zipFile.initWithPath(this.zipPath);
-
- // Initialize a zipReader and obtain the entries
- var zipReader = Cc["@mozilla.org/libjar/zip-reader;1"].
- createInstance(Ci.nsIZipReader);
- zipReader.open(zipFile)
- let entries = this._getZipEntries(zipReader);
- let extractedPaths = [];
-
- let destDir = Cc["@mozilla.org/file/local;1"].
- createInstance(Ci.nsILocalFile);
- destDir.initWithPath(this.installToDirPath);
- // Make sure the destination exists
- if (!destDir.exists()) {
- destDir.create(Ci.nsIFile.DIRECTORY_TYPE, parseInt("0755", 8));
- }
-
- // Extract each of the entries
- entries.forEach(entry => {
- // We don't need these types of files
- if (entry.includes("__MACOSX") ||
- entry == "_metadata/verified_contents.json" ||
- entry == "imgs/icon-128x128.png") {
- return;
- }
- let outFile = destDir.clone();
- // Do not extract into directories. Extract all files to the same
- // directory. DO NOT use |OS.Path.basename()| here, as in Windows it
- // does not work properly with forward slashes (which we must use here).
- let outBaseName = entry.slice(entry.lastIndexOf("/") + 1);
- outFile.appendRelativePath(outBaseName);
-
- zipReader.extract(entry, outFile);
- extractedPaths.push(outFile.path);
- // Ensure files are writable and executable. Otherwise we may be unable to
- // execute or uninstall them.
- outFile.permissions |= parseInt("0700", 8);
- log.info(entry + " was successfully extracted to: " +
- outFile.path);
- });
- zipReader.close();
- if (!GMPInstallManager.overrideLeaveDownloadedZip) {
- zipFile.remove(false);
- }
-
- log.info(this.zipPath + " was installed successfully");
- this._deferred.resolve(extractedPaths);
- } catch (e) {
- if (zipReader) {
- zipReader.close();
- }
- this._deferred.reject({
- target: this,
- status: e,
- type: "exception"
- });
- }
- return this._deferred.promise;
- }
-};
-
-
-/**
- * Constructs an object which downloads and initiates an install of
- * the specified GMPAddon object.
- * @param gmpAddon The addon to install.
- */
-function GMPDownloader(gmpAddon)
-{
- this._gmpAddon = gmpAddon;
-}
-
-GMPDownloader.prototype = {
- /**
- * Starts the download process for an addon.
- * @return a promise which will be resolved or rejected
- * See GMPInstallManager.installAddon for resolve/rejected info
- */
- start: function() {
- let log = getScopedLogger("GMPDownloader");
- let gmpAddon = this._gmpAddon;
-
- if (!gmpAddon.isValid) {
- log.info("gmpAddon is not valid, will not continue");
- return Promise.reject({
- target: this,
- status: status,
- type: "downloaderr"
- });
- }
-
- return ProductAddonChecker.downloadAddon(gmpAddon).then((zipPath) => {
- let path = OS.Path.join(OS.Constants.Path.profileDir,
- gmpAddon.id,
- gmpAddon.version);
- log.info("install to directory path: " + path);
- let gmpInstaller = new GMPExtractor(zipPath, path);
- let installPromise = gmpInstaller.install();
- return installPromise.then(extractedPaths => {
- // Success, set the prefs
- let now = Math.round(Date.now() / 1000);
- GMPPrefs.set(GMPPrefs.KEY_PLUGIN_LAST_UPDATE, now, gmpAddon.id);
- // Remember our ABI, so that if the profile is migrated to another
- // platform or from 32 -> 64 bit, we notice and don't try to load the
- // unexecutable plugin library.
- GMPPrefs.set(GMPPrefs.KEY_PLUGIN_ABI, UpdateUtils.ABI, 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_PLUGIN_VERSION, gmpAddon.version,
- gmpAddon.id);
- return extractedPaths;
- });
- });
- },
-};
diff --git a/toolkit/modules/GMPUtils.jsm b/toolkit/modules/GMPUtils.jsm
deleted file mode 100644
index 9e41a7a61..000000000
--- a/toolkit/modules/GMPUtils.jsm
+++ /dev/null
@@ -1,208 +0,0 @@
-/* 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",
- "WIDEVINE_ID" ];
-
-Cu.import("resource://gre/modules/Preferences.jsm");
-Cu.import("resource://gre/modules/Services.jsm");
-Cu.import("resource://gre/modules/AppConstants.jsm");
-
-// GMP IDs
-const OPEN_H264_ID = "gmp-gmpopenh264";
-const EME_ADOBE_ID = "gmp-eme-adobe";
-const WIDEVINE_ID = "gmp-widevinecdm";
-const GMP_PLUGIN_IDS = [ OPEN_H264_ID, EME_ADOBE_ID, WIDEVINE_ID ];
-
-var GMPPluginUnsupportedReason = {
- NOT_WINDOWS: 1,
- WINDOWS_VERSION: 2,
-};
-
-var GMPPluginHiddenReason = {
- UNSUPPORTED: 1,
- EME_DISABLED: 2,
-};
-
-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 (this._is32bitModeMacOS()) {
- // GMPs are hidden on MacOS when running in 32 bit mode.
- // See bug 1291537.
- return true;
- }
- if (!aPlugin.isEME) {
- return false;
- }
-
- if (!this._isPluginSupported(aPlugin) ||
- !this._isPluginVisible(aPlugin)) {
- return true;
- }
-
- if (!GMPPrefs.get(GMPPrefs.KEY_EME_ENABLED, true)) {
- 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 (this._isPluginForceSupported(aPlugin)) {
- return true;
- }
- if (aPlugin.id == EME_ADOBE_ID) {
- // 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" ||
- AppConstants.platform == "linux";
- }
-
- return true;
- },
-
- _is32bitModeMacOS: function() {
- if (AppConstants.platform != "macosx") {
- return false;
- }
- return Services.appinfo.XPCOMABI.split("-")[0] == "x86";
- },
-
- /**
- * Checks whether or not a given plugin is visible in the addons manager
- * UI and the "enable DRM" notification box. This can be used to test
- * plugins that aren't yet turned on in the mozconfig.
- * @param aPlugin
- * The plugin to check.
- */
- _isPluginVisible: function(aPlugin) {
- return GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VISIBLE, false, aPlugin.id);
- },
-
- /**
- * Checks whether or not a given plugin is forced-supported. This is used
- * 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);
- },
-};
-
-/**
- * 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_VISIBLE: "media.{0}.visible",
- KEY_PLUGIN_ABI: "media.{0}.abi",
- KEY_PLUGIN_FORCE_SUPPORTED: "media.{0}.forceSupported",
- 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_UPDATE_ENABLED: "media.gmp-manager.updateEnabled",
- 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_LOG_BASE: "media.gmp.log.",
- KEY_LOGGING_LEVEL: "media.gmp.log.level",
- KEY_LOGGING_DUMP: "media.gmp.log.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 || "");
- },
-};
diff --git a/toolkit/modules/moz.build b/toolkit/modules/moz.build
index e288d11c8..e0acdb19e 100644
--- a/toolkit/modules/moz.build
+++ b/toolkit/modules/moz.build
@@ -46,8 +46,6 @@ EXTRA_JS_MODULES += [
'FinderIterator.jsm',
'FormLikeFactory.jsm',
'Geometry.jsm',
- 'GMPInstallManager.jsm',
- 'GMPUtils.jsm',
'Http.jsm',
'InlineSpellChecker.jsm',
'InlineSpellCheckerContent.jsm',
@@ -105,11 +103,9 @@ EXTRA_JS_MODULES.sessionstore += ['sessionstore/Utils.jsm']
EXTRA_PP_JS_MODULES += [
'NewTabUtils.jsm',
'Troubleshoot.jsm',
+ 'UpdateChannel.jsm',
]
-if not CONFIG['MOZ_WEBEXTENSIONS']:
- EXTRA_PP_JS_MODULES += ['UpdateChannel.jsm']
-
if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'cocoa'):
DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1