deleted file mode 100644
--- a/toolkit/mozapps/extensions/internal/E10SAddonsRollout.jsm
+++ /dev/null
@@ -1,65 +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 = [ "isAddonPartOfE10SRollout" ];
-
-const Cu = Components.utils;
-Cu.import("resource://gre/modules/Services.jsm");
-
-const PREF_E10S_ADDON_BLOCKLIST = "extensions.e10s.rollout.blocklist";
-const PREF_E10S_ADDON_POLICY = "extensions.e10s.rollout.policy";
-
-// NOTE: Do not modify policies after they have already been
-// published to users. They must remain unchanged to provide valid data.
-
-// We use these named policies to correlate the telemetry
-// data with them, in order to understand how each set
-// is behaving in the wild.
-const RolloutPolicy = {
- // Beta testing on 50
- "50allmpc": { webextensions: true, mpc: true },
-
- // ESR
- "esrA": { mpc: true, webextensions: true },
- "esrB": { mpc: true, webextensions: false },
- "esrC": { mpc: false, webextensions: true },
-
- "xpcshell-test": { mpc: true, webextensions: false },
-};
-
-Object.defineProperty(this, "isAddonPartOfE10SRollout", {
- configurable: false,
- enumerable: false,
- writable: false,
- value: function isAddonPartOfE10SRollout(aAddon) {
- let blocklist = Services.prefs.getStringPref(PREF_E10S_ADDON_BLOCKLIST, "");
- let policyId = Services.prefs.getStringPref(PREF_E10S_ADDON_POLICY, "");
-
- if (!policyId || !RolloutPolicy.hasOwnProperty(policyId)) {
- return false;
- }
-
- if (blocklist && blocklist.indexOf(aAddon.id) > -1) {
- return false;
- }
-
- let policy = RolloutPolicy[policyId];
-
- if (aAddon.mpcOptedOut == true) {
- return false;
- }
-
- if (policy.webextensions && (aAddon.type == "webextension" || aAddon.type == "webextension-theme")) {
- return true;
- }
-
- if (policy.mpc && aAddon.multiprocessCompatible) {
- return true;
- }
-
- return false;
- },
-});
--- a/toolkit/mozapps/extensions/internal/XPIProvider.jsm
+++ b/toolkit/mozapps/extensions/internal/XPIProvider.jsm
@@ -28,17 +28,16 @@ XPCOMUtils.defineLazyModuleGetters(this,
FileUtils: "resource://gre/modules/FileUtils.jsm",
ZipUtils: "resource://gre/modules/ZipUtils.jsm",
NetUtil: "resource://gre/modules/NetUtil.jsm",
PermissionsUtils: "resource://gre/modules/PermissionsUtils.jsm",
OS: "resource://gre/modules/osfile.jsm",
ConsoleAPI: "resource://gre/modules/Console.jsm",
ProductAddonChecker: "resource://gre/modules/addons/ProductAddonChecker.jsm",
UpdateUtils: "resource://gre/modules/UpdateUtils.jsm",
- isAddonPartOfE10SRollout: "resource://gre/modules/addons/E10SAddonsRollout.jsm",
JSONFile: "resource://gre/modules/JSONFile.jsm",
LegacyExtensionsUtils: "resource://gre/modules/LegacyExtensionsUtils.jsm",
setTimeout: "resource://gre/modules/Timer.jsm",
clearTimeout: "resource://gre/modules/Timer.jsm",
DownloadAddonInstall: "resource://gre/modules/addons/XPIInstall.jsm",
LocalAddonInstall: "resource://gre/modules/addons/XPIInstall.jsm",
StagedAddonInstall: "resource://gre/modules/addons/XPIInstall.jsm",
@@ -84,20 +83,16 @@ const PREF_XPI_SIGNATURES_REQUIRED =
const PREF_XPI_SIGNATURES_DEV_ROOT = "xpinstall.signatures.dev-root";
const PREF_XPI_PERMISSIONS_BRANCH = "xpinstall.";
const PREF_INSTALL_REQUIRESECUREORIGIN = "extensions.install.requireSecureOrigin";
const PREF_INSTALL_DISTRO_ADDONS = "extensions.installDistroAddons";
const PREF_BRANCH_INSTALLED_ADDON = "extensions.installedDistroAddon.";
const PREF_INTERPOSITION_ENABLED = "extensions.interposition.enabled";
const PREF_SYSTEM_ADDON_SET = "extensions.systemAddonSet";
const PREF_SYSTEM_ADDON_UPDATE_URL = "extensions.systemAddon.update.url";
-const PREF_E10S_BLOCK_ENABLE = "extensions.e10sBlocksEnabling";
-const PREF_E10S_ADDON_BLOCKLIST = "extensions.e10s.rollout.blocklist";
-const PREF_E10S_ADDON_POLICY = "extensions.e10s.rollout.policy";
-const PREF_E10S_HAS_NONEXEMPT_ADDON = "extensions.e10s.rollout.hasAddon";
const PREF_ALLOW_LEGACY = "extensions.legacy.enabled";
const PREF_ALLOW_NON_MPC = "extensions.allow-non-mpc-extensions";
const PREF_EM_MIN_COMPAT_APP_VERSION = "extensions.minCompatibleAppVersion";
const PREF_EM_MIN_COMPAT_PLATFORM_VERSION = "extensions.minCompatiblePlatformVersion";
const PREF_EM_HOTFIX_ID = "extensions.hotfix.id";
const PREF_EM_LAST_APP_BUILD_ID = "extensions.lastAppBuildId";
@@ -2170,18 +2165,16 @@ this.XPIProvider = {
this.minCompatibleAppVersion = Services.prefs.getStringPref(PREF_EM_MIN_COMPAT_APP_VERSION,
null);
this.minCompatiblePlatformVersion = Services.prefs.getStringPref(PREF_EM_MIN_COMPAT_PLATFORM_VERSION,
null);
Services.prefs.addObserver(PREF_EM_MIN_COMPAT_APP_VERSION, this);
Services.prefs.addObserver(PREF_EM_MIN_COMPAT_PLATFORM_VERSION, this);
- Services.prefs.addObserver(PREF_E10S_ADDON_BLOCKLIST, this);
- Services.prefs.addObserver(PREF_E10S_ADDON_POLICY, this);
if (!AppConstants.MOZ_REQUIRE_SIGNING || Cu.isInAutomation)
Services.prefs.addObserver(PREF_XPI_SIGNATURES_REQUIRED, this);
Services.prefs.addObserver(PREF_ALLOW_LEGACY, this);
Services.prefs.addObserver(PREF_ALLOW_NON_MPC, this);
Services.obs.addObserver(this, NOTIFICATION_FLUSH_PERMISSIONS);
Services.obs.addObserver(this, NOTIFICATION_TOOLBOX_CONNECTION_CHANGE);
@@ -4018,108 +4011,18 @@ this.XPIProvider = {
null);
this.updateAddonAppDisabledStates();
break;
case PREF_XPI_SIGNATURES_REQUIRED:
case PREF_ALLOW_LEGACY:
case PREF_ALLOW_NON_MPC:
this.updateAddonAppDisabledStates();
break;
-
- case PREF_E10S_ADDON_BLOCKLIST:
- case PREF_E10S_ADDON_POLICY:
- XPIDatabase.updateAddonsBlockingE10s();
- break;
- }
- }
- },
-
- /**
- * Determine if an add-on should be blocking e10s if enabled.
- *
- * @param aAddon
- * The add-on to test
- * @return true if enabling the add-on should block e10s
- */
- isBlockingE10s(aAddon) {
- if (aAddon.type != "extension" &&
- aAddon.type != "theme" &&
- aAddon.type != "webextension" &&
- aAddon.type != "webextension-theme")
- return false;
-
- // The hotfix is exempt
- let hotfixID = Services.prefs.getStringPref(PREF_EM_HOTFIX_ID, undefined);
- if (hotfixID && hotfixID == aAddon.id)
- return false;
-
- // The default theme is exempt
- if (aAddon.type == "theme" &&
- aAddon.internalName == XPIProvider.defaultSkin)
- return false;
-
- // System add-ons are exempt
- let loc = aAddon._installLocation;
- if (loc && loc.isSystem)
- return false;
-
- if (isAddonPartOfE10SRollout(aAddon)) {
- Services.prefs.setBoolPref(PREF_E10S_HAS_NONEXEMPT_ADDON, true);
- return false;
- }
-
- logger.debug("Add-on " + aAddon.id + " blocks e10s rollout.");
- return true;
- },
-
- /**
- * Determine if an add-on should be blocking multiple content processes.
- *
- * @param aAddon
- * The add-on to test
- * @return true if enabling the add-on should block multiple content processes.
- */
- isBlockingE10sMulti(aAddon) {
- // WebExtensions have type = "webextension" or type="webextension-theme",
- // so they won't block multi.
- if (aAddon.type != "extension")
- return false;
-
- // The hotfix is exempt
- let hotfixID = Services.prefs.getStringPref(PREF_EM_HOTFIX_ID, undefined);
- if (hotfixID && hotfixID == aAddon.id)
- return false;
-
- // System add-ons are exempt
- let loc = aAddon._installLocation;
- if (loc && loc.isSystem)
- return false;
-
- return true;
- },
-
- /**
- * In some cases having add-ons active blocks e10s but turning off e10s
- * requires a restart so some add-ons that are normally restartless will
- * require a restart to install or enable.
- *
- * @param aAddon
- * The add-on to test
- * @return true if enabling the add-on requires a restart
- */
- e10sBlocksEnabling(aAddon) {
- // If the preference isn't set then don't block anything
- if (!Services.prefs.getBoolPref(PREF_E10S_BLOCK_ENABLE, false))
- return false;
-
- // If e10s isn't active then don't block anything
- if (!Services.appinfo.browserTabsRemoteAutostart)
- return false;
-
- return this.isBlockingE10s(aAddon);
+ }
+ }
},
/**
* Tests whether enabling an add-on will require a restart.
*
* @param aAddon
* The add-on to test
* @return true if the operation requires a restart
@@ -4148,19 +4051,16 @@ this.XPIProvider = {
}
// If the theme is already the theme in use then no restart is necessary.
// This covers the case where the default theme is in use but a
// lightweight theme is considered active.
return aAddon.internalName != this.currentSkin;
}
- if (this.e10sBlocksEnabling(aAddon))
- return true;
-
return !aAddon.bootstrap;
},
/**
* Tests whether disabling an add-on will require a restart.
*
* @param aAddon
* The add-on to test
@@ -4236,19 +4136,16 @@ this.XPIProvider = {
return true;
}
// If the add-on is not going to be active after installation then it
// doesn't require a restart to install.
if (aAddon.disabled)
return false;
- if (this.e10sBlocksEnabling(aAddon))
- return true;
-
// Themes will require a restart (even if dynamic switching is enabled due
// to some caching issues) and non-bootstrapped add-ons will require a
// restart
return aAddon.type == "theme" || !aAddon.bootstrap;
},
/**
* Tests whether uninstalling an add-on will require a restart.
--- a/toolkit/mozapps/extensions/internal/XPIProviderUtils.js
+++ b/toolkit/mozapps/extensions/internal/XPIProviderUtils.js
@@ -45,19 +45,16 @@ var logger = Log.repository.getLogger(LO
const KEY_PROFILEDIR = "ProfD";
const FILE_JSON_DB = "extensions.json";
// The last version of DB_SCHEMA implemented in SQLITE
const LAST_SQLITE_DB_SCHEMA = 14;
const PREF_DB_SCHEMA = "extensions.databaseSchema";
const PREF_PENDING_OPERATIONS = "extensions.pendingOperations";
const PREF_EM_AUTO_DISABLED_SCOPES = "extensions.autoDisableScopes";
-const PREF_E10S_BLOCKED_BY_ADDONS = "extensions.e10sBlockedByAddons";
-const PREF_E10S_MULTI_BLOCKED_BY_ADDONS = "extensions.e10sMultiBlockedByAddons";
-const PREF_E10S_HAS_NONEXEMPT_ADDON = "extensions.e10s.rollout.hasAddon";
const KEY_APP_SYSTEM_ADDONS = "app-system-addons";
const KEY_APP_SYSTEM_DEFAULTS = "app-system-defaults";
const KEY_APP_GLOBAL = "app-global";
const KEY_APP_TEMPORARY = "app-temporary";
// Properties to save in JSON file
const PROP_JSON_FIELDS = ["id", "syncGUID", "location", "version", "type",
@@ -311,18 +308,16 @@ this.XPIDatabase = {
}
if (!this._deferredSave) {
this._deferredSave = new DeferredSave(this.jsonFile.path,
() => JSON.stringify(this),
ASYNC_SAVE_DELAY_MS);
}
- this.updateAddonsBlockingE10s();
- this.updateAddonsBlockingE10sMulti();
let promise = this._deferredSave.saveChanges();
if (!this._schemaVersionSet) {
this._schemaVersionSet = true;
promise = promise.then(
count => {
// Update the XPIDB schema version preference the first time we successfully
// save the database.
logger.debug("XPI Database saved, setting schema version preference to " + DB_SCHEMA);
@@ -1072,54 +1067,16 @@ this.XPIDatabase = {
*/
updateAddonActive(aAddon, aActive) {
logger.debug("Updating active state for add-on " + aAddon.id + " to " + aActive);
aAddon.active = aActive;
this.saveChanges();
},
- updateAddonsBlockingE10s() {
- if (!this.addonDB) {
- // jank-tastic! Must synchronously load DB if the theme switches from
- // an XPI theme to a lightweight theme before the DB has loaded,
- // because we're called from sync XPIProvider.addonChanged
- logger.warn("Synchronous load of XPI database due to updateAddonsBlockingE10s()");
- AddonManagerPrivate.recordSimpleMeasure("XPIDB_lateOpen_byType", XPIProvider.runPhase);
- this.syncLoadDB(true);
- }
-
- let blockE10s = false;
-
- Services.prefs.setBoolPref(PREF_E10S_HAS_NONEXEMPT_ADDON, false);
- for (let [, addon] of this.addonDB) {
- let active = (addon.visible && !addon.disabled && !addon.pendingUninstall);
-
- if (active && XPIProvider.isBlockingE10s(addon)) {
- blockE10s = true;
- break;
- }
- }
- Services.prefs.setBoolPref(PREF_E10S_BLOCKED_BY_ADDONS, blockE10s);
- },
-
- updateAddonsBlockingE10sMulti() {
- let blockMulti = false;
-
- for (let [, addon] of this.addonDB) {
- let active = (addon.visible && !addon.disabled && !addon.pendingUninstall);
-
- if (active && XPIProvider.isBlockingE10sMulti(addon)) {
- blockMulti = true;
- break;
- }
- }
- Services.prefs.setBoolPref(PREF_E10S_MULTI_BLOCKED_BY_ADDONS, blockMulti);
- },
-
/**
* Synchronously calculates and updates all the active flags in the database.
*/
updateActiveAddons() {
if (!this.addonDB) {
logger.warn("updateActiveAddons called when DB isn't loaded");
// force the DB to load
AddonManagerPrivate.recordSimpleMeasure("XPIDB_lateOpen_updateActive",
--- a/toolkit/mozapps/extensions/internal/moz.build
+++ b/toolkit/mozapps/extensions/internal/moz.build
@@ -6,17 +6,16 @@
EXTRA_JS_MODULES.addons += [
'AddonRepository.jsm',
'AddonRepository_SQLiteMigrator.jsm',
'AddonSettings.jsm',
'AddonUpdateChecker.jsm',
'APIExtensionBootstrap.js',
'Content.js',
- 'E10SAddonsRollout.jsm',
'GMPProvider.jsm',
'LightweightThemeImageOptimizer.jsm',
'ProductAddonChecker.jsm',
'SpellCheckDictionaryBootstrap.js',
'XPIInstall.jsm',
'XPIProvider.jsm',
'XPIProviderUtils.js',
]
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/xpcshell/test_e10s_restartless.js
+++ /dev/null
@@ -1,552 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-const ID = "bootstrap1@tests.mozilla.org";
-const ID2 = "bootstrap2@tests.mozilla.org";
-const ID3 = "bootstrap3@tests.mozilla.org";
-
-const APP_STARTUP = 1;
-const ADDON_INSTALL = 5;
-
-function getStartupReason(id) {
- let info = BootstrapMonitor.started.get(id);
- return info ? info.reason : undefined;
-}
-
-BootstrapMonitor.init();
-
-createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
-
-startupManager();
-
-function check_multi_disabled() {
- return Services.prefs.getBoolPref("extensions.e10sMultiBlockedByAddons", false);
-}
-
-async function check_normal(checkMultiDisabled) {
- let install = await promiseInstallFile(do_get_addon("test_bootstrap1_1"));
- do_check_eq(install.state, AddonManager.STATE_INSTALLED);
- do_check_false(hasFlag(install.addon.pendingOperations, AddonManager.PENDING_INSTALL));
-
- BootstrapMonitor.checkAddonInstalled(ID);
- BootstrapMonitor.checkAddonStarted(ID);
-
- let addon = await promiseAddonByID(ID);
- do_check_eq(addon, install.addon);
-
- if (checkMultiDisabled) {
- do_check_false(check_multi_disabled());
- }
-
- do_check_false(hasFlag(addon.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_DISABLE));
- addon.userDisabled = true;
- BootstrapMonitor.checkAddonNotStarted(ID);
- do_check_false(addon.isActive);
- do_check_false(hasFlag(addon.pendingOperations, AddonManager.PENDING_DISABLE));
-
- do_check_false(hasFlag(addon.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_ENABLE));
- addon.userDisabled = false;
- BootstrapMonitor.checkAddonStarted(ID);
- do_check_true(addon.isActive);
- do_check_false(hasFlag(addon.pendingOperations, AddonManager.PENDING_ENABLE));
-
- do_check_false(hasFlag(addon.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_UNINSTALL));
- addon.uninstall();
- BootstrapMonitor.checkAddonNotStarted(ID);
- BootstrapMonitor.checkAddonNotInstalled(ID);
-
- await promiseRestartManager();
-}
-
-// Installing the add-on normally doesn't require a restart
-add_task(async function() {
- gAppInfo.browserTabsRemoteAutostart = false;
- Services.prefs.setBoolPref("extensions.e10sBlocksEnabling", false);
-
- await check_normal();
-});
-
-// Enabling the pref doesn't change anything
-add_task(async function() {
- gAppInfo.browserTabsRemoteAutostart = false;
- Services.prefs.setBoolPref("extensions.e10sBlocksEnabling", true);
-
- await check_normal();
-});
-
-// Default e10s doesn't change anything
-add_task(async function() {
- gAppInfo.browserTabsRemoteAutostart = true;
- Services.prefs.setBoolPref("extensions.e10sBlocksEnabling", false);
-
- await check_normal();
-});
-
-// Pref and e10s blocks install
-add_task(async function() {
- gAppInfo.browserTabsRemoteAutostart = true;
- Services.prefs.setBoolPref("extensions.e10sBlocksEnabling", true);
-
- let install = await promiseInstallFile(do_get_addon("test_bootstrap1_1"));
- do_check_eq(install.state, AddonManager.STATE_INSTALLED);
- do_check_true(hasFlag(install.addon.pendingOperations, AddonManager.PENDING_INSTALL));
- do_check_false(check_multi_disabled());
-
- let addon = await promiseAddonByID(ID);
- do_check_eq(addon, null);
-
- await promiseRestartManager();
-
- BootstrapMonitor.checkAddonInstalled(ID);
- BootstrapMonitor.checkAddonStarted(ID);
- do_check_eq(getStartupReason(ID), ADDON_INSTALL);
-
- addon = await promiseAddonByID(ID);
- do_check_neq(addon, null);
- do_check_true(check_multi_disabled());
-
- do_check_false(hasFlag(addon.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_DISABLE));
- addon.userDisabled = true;
- BootstrapMonitor.checkAddonNotStarted(ID);
- do_check_false(addon.isActive);
- do_check_false(hasFlag(addon.pendingOperations, AddonManager.PENDING_DISABLE));
- do_check_false(check_multi_disabled());
-
- do_check_true(hasFlag(addon.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_ENABLE));
- addon.userDisabled = false;
- BootstrapMonitor.checkAddonNotStarted(ID);
- do_check_false(addon.isActive);
- do_check_true(hasFlag(addon.pendingOperations, AddonManager.PENDING_ENABLE));
-
- await promiseRestartManager();
-
- addon = await promiseAddonByID(ID);
- do_check_neq(addon, null);
-
- do_check_true(addon.isActive);
- BootstrapMonitor.checkAddonStarted(ID);
-
- do_check_false(hasFlag(addon.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_UNINSTALL));
- do_check_true(check_multi_disabled());
- addon.uninstall();
- BootstrapMonitor.checkAddonNotStarted(ID);
- BootstrapMonitor.checkAddonNotInstalled(ID);
-
- await promiseRestartManager();
-});
-
-add_task(async function() {
- gAppInfo.browserTabsRemoteAutostart = true;
- Services.prefs.setBoolPref("extensions.e10sBlocksEnabling", true);
-
- let install = await promiseInstallFile(do_get_addon("test_bootstrap1_1"));
- do_check_eq(install.state, AddonManager.STATE_INSTALLED);
- do_check_true(hasFlag(install.addon.pendingOperations, AddonManager.PENDING_INSTALL));
- do_check_false(check_multi_disabled());
-
- let addon = await promiseAddonByID(ID);
- do_check_eq(addon, null);
-
- await promiseRestartManager();
-
- // After install and restart we should block.
- let blocked = Services.prefs.getBoolPref("extensions.e10sBlockedByAddons");
- do_check_true(blocked);
- do_check_true(check_multi_disabled());
-
- BootstrapMonitor.checkAddonInstalled(ID);
- BootstrapMonitor.checkAddonStarted(ID);
- do_check_eq(getStartupReason(ID), ADDON_INSTALL);
-
- addon = await promiseAddonByID(ID);
- do_check_neq(addon, null);
-
- do_check_false(hasFlag(addon.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_DISABLE));
- addon.userDisabled = true;
- BootstrapMonitor.checkAddonNotStarted(ID);
- do_check_false(addon.isActive);
- do_check_false(hasFlag(addon.pendingOperations, AddonManager.PENDING_DISABLE));
- do_check_true(hasFlag(addon.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_ENABLE));
-
- await promiseRestartManager();
-
- // After disable and restart we should not block.
- blocked = Services.prefs.getBoolPref("extensions.e10sBlockedByAddons");
- do_check_false(blocked);
- do_check_false(check_multi_disabled());
-
- addon = await promiseAddonByID(ID);
- addon.userDisabled = false;
- BootstrapMonitor.checkAddonNotStarted(ID);
- do_check_false(addon.isActive);
- do_check_true(hasFlag(addon.pendingOperations, AddonManager.PENDING_ENABLE));
-
- await promiseRestartManager();
-
- // After re-enable and restart we should block.
- blocked = Services.prefs.getBoolPref("extensions.e10sBlockedByAddons");
- do_check_true(blocked);
- do_check_true(check_multi_disabled());
-
- addon = await promiseAddonByID(ID);
- do_check_neq(addon, null);
-
- do_check_true(addon.isActive);
- BootstrapMonitor.checkAddonStarted(ID);
- // This should probably be ADDON_ENABLE, but its not easy to make
- // that happen. See bug 1304392 for discussion.
- do_check_eq(getStartupReason(ID), APP_STARTUP);
-
- do_check_false(hasFlag(addon.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_UNINSTALL));
- addon.uninstall();
- BootstrapMonitor.checkAddonNotStarted(ID);
- BootstrapMonitor.checkAddonNotInstalled(ID);
-
- await promiseRestartManager();
-
- // After uninstall and restart we should not block.
- blocked = Services.prefs.getBoolPref("extensions.e10sBlockedByAddons");
- do_check_false(blocked);
- do_check_false(check_multi_disabled());
-
- restartManager();
-});
-
-add_task(async function() {
- gAppInfo.browserTabsRemoteAutostart = true;
- Services.prefs.setBoolPref("extensions.e10sBlocksEnabling", true);
-
- let [install1, install2] = await Promise.all([
- promiseInstallFile(do_get_addon("test_bootstrap1_1")),
- promiseInstallFile(do_get_addon("test_bootstrap2_1")),
- ]);
-
- do_check_eq(install1.state, AddonManager.STATE_INSTALLED);
- do_check_eq(install2.state, AddonManager.STATE_INSTALLED);
- do_check_true(hasFlag(install1.addon.pendingOperations, AddonManager.PENDING_INSTALL));
- do_check_true(hasFlag(install2.addon.pendingOperations, AddonManager.PENDING_INSTALL));
-
- let addon = await promiseAddonByID(ID);
- let addon2 = await promiseAddonByID(ID2);
-
- do_check_eq(addon, null);
- do_check_eq(addon2, null);
-
- await promiseRestartManager();
-
- // After install and restart we should block.
- let blocked = Services.prefs.getBoolPref("extensions.e10sBlockedByAddons");
- do_check_true(blocked);
-
- BootstrapMonitor.checkAddonInstalled(ID);
- BootstrapMonitor.checkAddonStarted(ID);
- do_check_eq(getStartupReason(ID), ADDON_INSTALL);
-
- BootstrapMonitor.checkAddonInstalled(ID2);
- BootstrapMonitor.checkAddonStarted(ID2);
- do_check_eq(getStartupReason(ID2), ADDON_INSTALL);
-
- addon = await promiseAddonByID(ID);
- do_check_neq(addon, null);
- addon2 = await promiseAddonByID(ID2);
- do_check_neq(addon2, null);
-
- do_check_false(hasFlag(addon.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_DISABLE));
- addon.userDisabled = true;
- BootstrapMonitor.checkAddonNotStarted(ID);
- do_check_false(addon.isActive);
- do_check_false(hasFlag(addon.pendingOperations, AddonManager.PENDING_DISABLE));
- do_check_true(hasFlag(addon.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_ENABLE));
-
- await promiseRestartManager();
-
- // After disable one addon and restart we should block.
- blocked = Services.prefs.getBoolPref("extensions.e10sBlockedByAddons");
- do_check_true(blocked);
- do_check_true(check_multi_disabled());
-
- addon2 = await promiseAddonByID(ID2);
-
- do_check_false(hasFlag(addon2.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_DISABLE));
- addon2.userDisabled = true;
- BootstrapMonitor.checkAddonNotStarted(ID2);
- do_check_false(addon2.isActive);
- do_check_false(hasFlag(addon2.pendingOperations, AddonManager.PENDING_DISABLE));
- do_check_true(hasFlag(addon2.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_ENABLE));
-
- await promiseRestartManager();
-
- // After disable both addons and restart we should not block.
- blocked = Services.prefs.getBoolPref("extensions.e10sBlockedByAddons");
- do_check_false(blocked);
- do_check_false(check_multi_disabled());
-
- addon = await promiseAddonByID(ID);
- addon.userDisabled = false;
- BootstrapMonitor.checkAddonNotStarted(ID);
- do_check_false(addon.isActive);
- do_check_true(hasFlag(addon.pendingOperations, AddonManager.PENDING_ENABLE));
-
- await promiseRestartManager();
-
- // After re-enable one addon and restart we should block.
- blocked = Services.prefs.getBoolPref("extensions.e10sBlockedByAddons");
- do_check_true(blocked);
- do_check_true(check_multi_disabled());
-
- addon = await promiseAddonByID(ID);
- do_check_neq(addon, null);
-
- do_check_true(addon.isActive);
- BootstrapMonitor.checkAddonStarted(ID);
- // Bug 1304392 again (see comment above)
- do_check_eq(getStartupReason(ID), APP_STARTUP);
-
- do_check_false(hasFlag(addon.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_UNINSTALL));
- addon.uninstall();
- BootstrapMonitor.checkAddonNotStarted(ID);
- BootstrapMonitor.checkAddonNotInstalled(ID);
-
- await promiseRestartManager();
-
- // After uninstall the only enabled addon and restart we should not block.
- blocked = Services.prefs.getBoolPref("extensions.e10sBlockedByAddons");
- do_check_false(blocked);
- do_check_false(check_multi_disabled());
-
- addon2 = await promiseAddonByID(ID2);
- addon2.uninstall();
-
- restartManager();
-});
-
-// Check that the rollout policy sets work as expected
-add_task(async function() {
- gAppInfo.browserTabsRemoteAutostart = true;
- Services.prefs.setBoolPref("extensions.e10sBlocksEnabling", true);
- Services.prefs.setCharPref("extensions.e10s.rollout.policy", "xpcshell-test");
-
- // Both 'bootstrap1' and 'bootstrap2' addons are part of the allowed policy
- // set, because they are marked as mpc=true.
- await check_normal();
-
- // Check that the two add-ons can be installed together correctly as
- // check_normal() only perform checks on bootstrap1.
- let [install1, install2] = await Promise.all([
- promiseInstallFile(do_get_addon("test_bootstrap1_1")),
- promiseInstallFile(do_get_addon("test_bootstrap2_1")),
- ]);
-
- do_check_eq(install1.state, AddonManager.STATE_INSTALLED);
- do_check_eq(install2.state, AddonManager.STATE_INSTALLED);
- do_check_false(hasFlag(install1.addon.pendingOperations, AddonManager.PENDING_INSTALL));
- do_check_false(hasFlag(install2.addon.pendingOperations, AddonManager.PENDING_INSTALL));
-
- let addon = await promiseAddonByID(ID);
- let addon2 = await promiseAddonByID(ID2);
-
- do_check_neq(addon, null);
- do_check_neq(addon2, null);
-
- BootstrapMonitor.checkAddonInstalled(ID);
- BootstrapMonitor.checkAddonStarted(ID);
-
- BootstrapMonitor.checkAddonInstalled(ID2);
- BootstrapMonitor.checkAddonStarted(ID2);
-
- await promiseRestartManager();
-
- // After install and restart e10s should not be blocked.
- let blocked = Services.prefs.getBoolPref("extensions.e10sBlockedByAddons");
- do_check_false(blocked);
-
- // Check that adding bootstrap2 to the blocklist will trigger a disable of e10s.
- Services.prefs.setCharPref("extensions.e10s.rollout.blocklist", ID2);
- blocked = Services.prefs.getBoolPref("extensions.e10sBlockedByAddons");
- do_check_true(blocked);
-
- await promiseRestartManager();
-
- // Check that after restarting, e10s continues to be blocked.
- blocked = Services.prefs.getBoolPref("extensions.e10sBlockedByAddons");
- do_check_true(blocked);
-
- // Check that uninstalling bootstrap2 (which is in the blocklist) will
- // cause e10s to be re-enabled.
- addon2 = await promiseAddonByID(ID2);
- do_check_false(hasFlag(addon2.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_UNINSTALL));
- addon2.uninstall();
- BootstrapMonitor.checkAddonNotStarted(ID2);
- BootstrapMonitor.checkAddonNotInstalled(ID2);
-
- await promiseRestartManager();
-
- // After uninstall the blocklisted addon and restart we should not block.
- blocked = Services.prefs.getBoolPref("extensions.e10sBlockedByAddons");
- do_check_false(blocked);
-
-
- // Let's perform similar checks again, now that bootstrap2 is in the blocklist.
- // The bootstrap1 add-on should install and start correctly, but bootstrap2 should not.
- addon = await promiseAddonByID(ID);
- addon.uninstall();
- BootstrapMonitor.checkAddonNotStarted(ID);
- BootstrapMonitor.checkAddonNotInstalled(ID);
-
- await promiseRestartManager();
-
- [install1, install2] = await Promise.all([
- promiseInstallFile(do_get_addon("test_bootstrap1_1")),
- promiseInstallFile(do_get_addon("test_bootstrap2_1")),
- ]);
-
- do_check_eq(install1.state, AddonManager.STATE_INSTALLED);
- do_check_eq(install2.state, AddonManager.STATE_INSTALLED);
- do_check_false(hasFlag(install1.addon.pendingOperations, AddonManager.PENDING_INSTALL));
- do_check_true(hasFlag(install2.addon.pendingOperations, AddonManager.PENDING_INSTALL));
-
- addon = await promiseAddonByID(ID);
- addon2 = await promiseAddonByID(ID2);
-
- do_check_neq(addon, null);
- do_check_eq(addon2, null);
-
- BootstrapMonitor.checkAddonInstalled(ID);
- BootstrapMonitor.checkAddonStarted(ID);
-
- BootstrapMonitor.checkAddonNotInstalled(ID2);
- BootstrapMonitor.checkAddonNotStarted(ID2);
-
- await promiseRestartManager();
-
- blocked = Services.prefs.getBoolPref("extensions.e10sBlockedByAddons");
- do_check_true(blocked);
-
- // Now let's test that an add-on that is not mpc=true doesn't get installed,
- // since the rollout policy is restricted to only mpc=true addons.
- let install3 = await promiseInstallFile(do_get_addon("test_bootstrap3_1"));
-
- do_check_eq(install3.state, AddonManager.STATE_INSTALLED);
- do_check_true(hasFlag(install3.addon.pendingOperations, AddonManager.PENDING_INSTALL));
-
- let addon3 = await promiseAddonByID(ID3);
-
- do_check_eq(addon3, null);
-
- BootstrapMonitor.checkAddonNotInstalled(ID3);
- BootstrapMonitor.checkAddonNotStarted(ID3);
-
- await promiseRestartManager();
-
- blocked = Services.prefs.getBoolPref("extensions.e10sBlockedByAddons");
- do_check_true(blocked);
-
- // Clean-up
- addon = await promiseAddonByID(ID);
- addon2 = await promiseAddonByID(ID2);
- addon3 = await promiseAddonByID(ID3);
-
- addon.uninstall();
- BootstrapMonitor.checkAddonNotStarted(ID);
- BootstrapMonitor.checkAddonNotInstalled(ID);
-
- addon2.uninstall();
- BootstrapMonitor.checkAddonNotStarted(ID2);
- BootstrapMonitor.checkAddonNotInstalled(ID2);
-
- addon3.uninstall();
- BootstrapMonitor.checkAddonNotStarted(ID3);
- BootstrapMonitor.checkAddonNotInstalled(ID3);
-
- Services.prefs.clearUserPref("extensions.e10s.rollout.policy");
- Services.prefs.clearUserPref("extensions.e10s.rollout.blocklist");
-
- await promiseRestartManager();
-});
-
-// The hotfix is unaffected
-add_task(async function() {
- gAppInfo.browserTabsRemoteAutostart = true;
- Services.prefs.setBoolPref("extensions.e10sBlocksEnabling", true);
- Services.prefs.setCharPref("extensions.hotfix.id", ID);
- Services.prefs.setBoolPref("extensions.hotfix.cert.checkAttributes", false);
-
- await check_normal(true);
-});
-
-// Test non-restarless add-on should block multi
-add_task(async function() {
- await promiseInstallAllFiles([do_get_addon("test_install1")], true);
-
- let non_restartless_ID = "addon1@tests.mozilla.org";
- let addon = await promiseAddonByID(non_restartless_ID);
-
- // non-restartless add-on is installed and started
- do_check_eq(addon, null);
-
- await promiseRestartManager();
-
- do_check_true(check_multi_disabled());
-
- addon = await promiseAddonByID(non_restartless_ID);
- addon.uninstall();
-
- BootstrapMonitor.checkAddonNotInstalled(non_restartless_ID);
- BootstrapMonitor.checkAddonNotStarted(non_restartless_ID);
-
- await promiseRestartManager();
-});
-
-// Test experiment add-on should not block multi
-add_task(async function() {
- await promiseInstallAllFiles([do_get_addon("test_experiment1")], true);
-
- let experiment_ID = "experiment1@tests.mozilla.org";
-
- BootstrapMonitor.checkAddonInstalled(experiment_ID, "1.0");
- BootstrapMonitor.checkAddonNotStarted(experiment_ID);
-
- let addon = await promiseAddonByID(experiment_ID);
-
- // non-restartless add-on is installed and started
- do_check_neq(addon, null);
-
- do_check_false(check_multi_disabled());
-
- addon.uninstall();
-
- BootstrapMonitor.checkAddonNotInstalled(experiment_ID);
- BootstrapMonitor.checkAddonNotStarted(experiment_ID);
-
- await promiseRestartManager();
-});
-
-const { GlobalManager } = Components.utils.import("resource://gre/modules/Extension.jsm", {});
-
-// Test web extension add-on's should not block multi
-add_task(async function() {
-
- await promiseInstallAllFiles([do_get_addon("webextension_1")], true),
-
- restartManager();
-
- await promiseWebExtensionStartup();
-
- let we_ID = "webextension1@tests.mozilla.org";
-
- do_check_eq(GlobalManager.extensionMap.size, 1);
-
- let addon = await promiseAddonByID(we_ID);
-
- do_check_neq(addon, null);
-
- do_check_false(check_multi_disabled());
-
- addon.uninstall();
-
- BootstrapMonitor.checkAddonNotInstalled(we_ID);
- BootstrapMonitor.checkAddonNotStarted(we_ID);
-
- await promiseRestartManager();
-});
--- a/toolkit/mozapps/extensions/test/xpcshell/xpcshell-shared.ini
+++ b/toolkit/mozapps/extensions/test/xpcshell/xpcshell-shared.ini
@@ -334,17 +334,16 @@ tags = webextensions
[test_webextension_install_syntax_error.js]
skip-if = appname == "thunderbird"
tags = webextensions
[test_bootstrap_globals.js]
[test_bug1180901_2.js]
skip-if = os != "win"
[test_bug1180901.js]
skip-if = os != "win"
-[test_e10s_restartless.js]
[test_switch_os.js]
# Bug 1246231
skip-if = os == "mac" && debug
[test_softblocked.js]
tags = blocklist
[test_ext_management.js]
skip-if = appname == "thunderbird"
tags = webextensions
--- a/tools/lint/eslint/modules.json
+++ b/tools/lint/eslint/modules.json
@@ -50,17 +50,16 @@
"dispatcher.js": ["dispatcher"],
"distribution.js": ["DistributionCustomizer"],
"DNSTypes.jsm": ["DNS_QUERY_RESPONSE_CODES", "DNS_AUTHORITATIVE_ANSWER_CODES", "DNS_CLASS_CODES", "DNS_RECORD_TYPES"],
"doctor.js": ["Doctor"],
"dom.js": ["getAttributes"],
"DOMRequestHelper.jsm": ["DOMRequestIpcHelper"],
"DownloadCore.jsm": ["Download", "DownloadSource", "DownloadTarget", "DownloadError", "DownloadSaver", "DownloadCopySaver", "DownloadLegacySaver", "DownloadPDFSaver"],
"DownloadList.jsm": ["DownloadList", "DownloadCombinedList", "DownloadSummary"],
- "E10SAddonsRollout.jsm": ["isAddonPartOfE10SRollout"],
"elementslib.js": ["ID", "Link", "XPath", "Selector", "Name", "Anon", "AnonXPath", "Lookup", "_byID", "_byName", "_byAttrib", "_byAnonAttrib"],
"engines.js": ["EngineManager", "Engine", "SyncEngine", "Tracker", "Store", "Changeset"],
"enginesync.js": ["EngineSynchronizer"],
"errors.js": ["BaseError", "ApplicationQuitError", "AssertionError", "TimeoutError"],
"evaluate.js": ["evaluate", "sandbox", "Sandboxes"],
"event-emitter.js": ["EventEmitter"],
"EventUtils.js": ["disableNonTestMouseEvents", "sendMouseEvent", "sendChar", "sendString", "sendKey", "synthesizeMouse", "synthesizeTouch", "synthesizeMouseAtPoint", "synthesizeTouchAtPoint", "synthesizeMouseAtCenter", "synthesizeTouchAtCenter", "synthesizeWheel", "synthesizeKey", "synthesizeMouseExpectEvent", "synthesizeKeyExpectEvent", "synthesizeText", "synthesizeComposition", "synthesizeQuerySelectedText"],
"Extension.jsm": ["Extension", "ExtensionData"],