author | Kris Maglione <maglione.k@gmail.com> |
Sat, 15 Apr 2017 16:23:54 -0700 | |
changeset 354576 | 8f80e3456bfdfa1d4633478d52e288f85c3b71cf |
parent 354575 | 3a370d9f84a53cfe1afec44b21f6a1c920e7d420 |
child 354577 | f27ad6a2fa53898d78342518dccfec1dca95b410 |
push id | 31707 |
push user | kwierso@gmail.com |
push date | Mon, 24 Apr 2017 22:53:41 +0000 |
treeherder | mozilla-central@abdcc8dfc283 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | rhelmer |
bugs | 1356828 |
milestone | 55.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/browser/extensions/pocket/bootstrap.js +++ b/browser/extensions/pocket/bootstrap.js @@ -11,17 +11,17 @@ Cu.import("resource://gre/modules/XPCOMU Cu.import("resource://services-common/utils.js"); Cu.import("resource://gre/modules/Preferences.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "Services", "resource://gre/modules/Services.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "RecentWindow", "resource:///modules/RecentWindow.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "CustomizableUI", "resource:///modules/CustomizableUI.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "AddonManager", +XPCOMUtils.defineLazyModuleGetter(this, "AddonManagerPrivate", "resource://gre/modules/AddonManager.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "ReaderMode", "resource://gre/modules/ReaderMode.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "Pocket", "chrome://pocket/content/Pocket.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "AboutPocket", "chrome://pocket/content/AboutPocket.jsm"); XPCOMUtils.defineLazyGetter(this, "gPocketBundle", function() { @@ -472,31 +472,30 @@ function prefObserver(aSubject, aTopic, let enabled = Services.prefs.getBoolPref("extensions.pocket.enabled"); if (enabled) PocketOverlay.startup(ADDON_ENABLE); else PocketOverlay.shutdown(ADDON_DISABLE); } function startup(data, reason) { - AddonManager.getAddonByID("isreaditlater@ideashower.com", addon => { - if (addon && addon.isActive) - return; - setDefaultPrefs(); - // migrate enabled pref - if (Services.prefs.prefHasUserValue("browser.pocket.enabled")) { - Services.prefs.setBoolPref("extensions.pocket.enabled", Services.prefs.getBoolPref("browser.pocket.enabled")); - Services.prefs.clearUserPref("browser.pocket.enabled"); - } - // watch pref change and enable/disable if necessary - Services.prefs.addObserver("extensions.pocket.enabled", prefObserver); - if (!Services.prefs.getBoolPref("extensions.pocket.enabled")) - return; - PocketOverlay.startup(reason); - }); + if (AddonManagerPrivate.addonIsActive("isreaditlater@ideashower.com")) + return; + + setDefaultPrefs(); + // migrate enabled pref + if (Services.prefs.prefHasUserValue("browser.pocket.enabled")) { + Services.prefs.setBoolPref("extensions.pocket.enabled", Services.prefs.getBoolPref("browser.pocket.enabled")); + Services.prefs.clearUserPref("browser.pocket.enabled"); + } + // watch pref change and enable/disable if necessary + Services.prefs.addObserver("extensions.pocket.enabled", prefObserver); + if (!Services.prefs.getBoolPref("extensions.pocket.enabled")) + return; + PocketOverlay.startup(reason); } function shutdown(data, reason) { // For speed sake, we should only do a shutdown if we're being disabled. // On an app shutdown, just let it fade away... if (reason != APP_SHUTDOWN) { Services.prefs.removeObserver("extensions.pocket.enabled", prefObserver); PocketOverlay.shutdown(reason);
--- a/toolkit/mozapps/extensions/AddonManager.jsm +++ b/toolkit/mozapps/extensions/AddonManager.jsm @@ -3076,16 +3076,21 @@ var AddonManagerInternal = { * AddonManagerInternal for documentation however note that these methods are * subject to change at any time. */ this.AddonManagerPrivate = { startup() { AddonManagerInternal.startup(); }, + addonIsActive(addonId) { + return AddonManagerInternal._getProviderByName("XPIProvider") + .addonIsActive(addonId); + }, + get browserUpdated() { return gBrowserUpdated; }, registerProvider(aProvider, aTypes) { AddonManagerInternal.registerProvider(aProvider, aTypes); },
--- a/toolkit/mozapps/extensions/internal/XPIProvider.jsm +++ b/toolkit/mozapps/extensions/internal/XPIProvider.jsm @@ -2462,16 +2462,18 @@ this.XPIStates = { location.delete(aId); if (location.size == 0) { this.db.delete(aLocation); } this.save(); }, }; +const hasOwnProperty = Function.call.bind({}.hasOwnProperty); + this.XPIProvider = { get name() { return "XPIProvider"; }, // An array of known install locations installLocations: null, // A dictionary of known install locations by name @@ -2511,16 +2513,33 @@ this.XPIProvider = { // A Map from an add-on install to its ID _addonFileMap: new Map(), // Flag to know if ToolboxProcess.jsm has already been loaded by someone or not _toolboxProcessLoaded: false, // Have we started shutting down bootstrap add-ons? _closing: false, /** + * Returns true if the add-on with the given ID is currently active, + * without forcing the add-ons database to load. + * + * @param {string} addonId + * The ID of the add-on to check. + * @returns {boolean} + */ + addonIsActive(addonId) { + if (hasOwnProperty(this.bootstrappedAddons, addonId)) { + return true; + } + + let [, state] = XPIStates.findAddon(addonId); + return state && state.enabled; + }, + + /** * Returns an array of the add-on values in `bootstrappedAddons`, * sorted so that all of an add-on's dependencies appear in the array * before itself. * * @returns {Array<object>} * A sorted array of add-on objects. Each value is a copy of the * corresponding value in the `bootstrappedAddons` object, with an * additional `id` property, which corresponds to the key in that
--- a/toolkit/mozapps/extensions/test/xpcshell/test_shutdown.js +++ b/toolkit/mozapps/extensions/test/xpcshell/test_shutdown.js @@ -11,17 +11,17 @@ const IGNORE = ["getPreferredIconURL", " "addInstallListener", "removeInstallListener", "addManagerListener", "removeManagerListener", "mapURIToAddonID", "shutdown", "init", "stateToString", "errorToString", "getUpgradeListener", "addUpgradeListener", "removeUpgradeListener"]; const IGNORE_PRIVATE = ["AddonAuthor", "AddonCompatibilityOverride", "AddonScreenshot", "AddonType", "startup", "shutdown", - "registerProvider", "unregisterProvider", + "addonIsActive", "registerProvider", "unregisterProvider", "addStartupChange", "removeStartupChange", "recordTimestamp", "recordSimpleMeasure", "recordException", "getSimpleMeasures", "simpleTimer", "setTelemetryDetails", "getTelemetryDetails", "callNoUpdateListeners", "backgroundUpdateTimerHandler", "hasUpgradeListener", "getUpgradeListener"]; function test_functions() {