mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-12 10:40:12 +00:00
Bug 1753308 fix extension startup in tests, remove delayed startup pref r=rpl,robwu
Differential Revision: https://phabricator.services.mozilla.com/D137699
This commit is contained in:
parent
6b45096b10
commit
028c447051
@ -64,7 +64,6 @@ pref("extensions.geckoProfiler.acceptedExtensionIds", "geckoprofiler@mozilla.com
|
||||
|
||||
|
||||
pref("extensions.webextensions.remote", true);
|
||||
pref("extensions.webextensions.background-delayed-startup", true);
|
||||
|
||||
// Require signed add-ons by default
|
||||
pref("extensions.langpacks.signatures.required", true);
|
||||
|
@ -4,12 +4,7 @@
|
||||
|
||||
add_task(async function testTabSwitchActionContext() {
|
||||
await SpecialPowers.pushPrefEnv({
|
||||
set: [
|
||||
["extensions.manifestV3.enabled", true],
|
||||
// Since we're not using AOM, and MV3 forces event pages, bypass
|
||||
// delayed-startup for MV3 test. These tests do not rely on startup events.
|
||||
["extensions.webextensions.background-delayed-startup", false],
|
||||
],
|
||||
set: [["extensions.manifestV3.enabled", true]],
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -5,12 +5,6 @@
|
||||
/* globals chrome */
|
||||
|
||||
Services.prefs.setBoolPref("extensions.manifestV3.enabled", true);
|
||||
// Since we're not using AOM, and MV3 forces event pages, bypass
|
||||
// delayed-startup for MV3 test. These tests do not rely on startup events.
|
||||
Services.prefs.setBoolPref(
|
||||
"extensions.webextensions.background-delayed-startup",
|
||||
false
|
||||
);
|
||||
|
||||
async function testPermission(options) {
|
||||
function background(bgOptions) {
|
||||
|
@ -196,8 +196,6 @@ pref("extensions.installDistroAddons", false);
|
||||
|
||||
pref("extensions.webextOptionalPermissionPrompts", true);
|
||||
|
||||
pref("extensions.webextensions.background-delayed-startup", true);
|
||||
|
||||
pref("extensions.experiments.enabled", false);
|
||||
|
||||
/* block popups by default, and notify the user about blocked popups */
|
||||
|
@ -3784,8 +3784,6 @@ pref("extensions.webextensions.protocol.remote", true);
|
||||
// Enable userScripts API by default.
|
||||
pref("extensions.webextensions.userScripts.enabled", true);
|
||||
|
||||
pref("extensions.webextensions.background-delayed-startup", false);
|
||||
|
||||
// Whether or not the installed extensions should be migrated to the storage.local IndexedDB backend.
|
||||
pref("extensions.webextensions.ExtensionStorageIDB.enabled", true);
|
||||
|
||||
|
@ -1097,6 +1097,13 @@ class SpecialPowersParent extends JSWindowActorParent {
|
||||
ext.useAddonManager = "android-only";
|
||||
}
|
||||
}
|
||||
// delayedStartup is only supported in xpcshell
|
||||
if (ext.delayedStartup !== undefined) {
|
||||
throw new Error(
|
||||
`delayedStartup is only supported in xpcshell, use "useAddonManager".`
|
||||
);
|
||||
}
|
||||
|
||||
let extension = ExtensionTestCommon.generate(ext);
|
||||
|
||||
let resultListener = (...args) => {
|
||||
|
@ -961,11 +961,7 @@ class ExtensionData {
|
||||
}
|
||||
// V2 addons can only use event pages if the pref is also flipped and
|
||||
// persistent is explicilty set to false.
|
||||
let { persistent } = manifest.background;
|
||||
if (!this.eventPagesEnabled && !persistent) {
|
||||
this.logWarning("Event pages are not currently supported.");
|
||||
}
|
||||
return !this.eventPagesEnabled || persistent;
|
||||
return !this.eventPagesEnabled || manifest.background.persistent;
|
||||
}
|
||||
|
||||
async getExtensionVersionWithoutValidation() {
|
||||
@ -1091,6 +1087,15 @@ class ExtensionData {
|
||||
manifest.applications = manifest.browser_specific_settings;
|
||||
}
|
||||
|
||||
if (
|
||||
this.manifestVersion < 3 &&
|
||||
manifest.background &&
|
||||
!this.eventPagesEnabled &&
|
||||
!manifest.background.persistent
|
||||
) {
|
||||
this.logWarning("Event pages are not currently supported.");
|
||||
}
|
||||
|
||||
this.id ??= manifest.applications?.gecko?.id;
|
||||
|
||||
let apiNames = new Set();
|
||||
@ -2119,6 +2124,9 @@ class Extension extends ExtensionData {
|
||||
if (addonData.TEST_NO_ADDON_MANAGER) {
|
||||
this.dontSaveStartupData = true;
|
||||
}
|
||||
if (addonData.TEST_NO_DELAYED_STARTUP) {
|
||||
this.testNoDelayedStartup = true;
|
||||
}
|
||||
|
||||
this.addonData = addonData;
|
||||
this.startupData = addonData.startupData || {};
|
||||
|
@ -2482,8 +2482,6 @@ class EventManager {
|
||||
if (listener) {
|
||||
// During startup only a subset of persisted listeners are primed. As
|
||||
// well, each API determines whether to prime a specific listener.
|
||||
// Additionally, if extensions.webextensions.background-delayed-startup
|
||||
// is disabled we may not have primed listeners.
|
||||
let { primed } = listener;
|
||||
if (primed) {
|
||||
listener.primed = null;
|
||||
|
@ -236,6 +236,29 @@ function provide(obj, keys, value, override = false) {
|
||||
}
|
||||
|
||||
ExtensionTestCommon = class ExtensionTestCommon {
|
||||
// Called by AddonTestUtils.promiseShutdownManager to reset startup promises
|
||||
static resetStartupPromises() {
|
||||
ExtensionParent._resetStartupPromises();
|
||||
}
|
||||
|
||||
// Called to notify "browser-delayed-startup-finished", which resolves
|
||||
// ExtensionParent.browserPaintedPromise. Thus must be resolved for
|
||||
// primed listeners to be able to wake the extension.
|
||||
static notifyEarlyStartup() {
|
||||
Services.obs.notifyObservers(null, "browser-delayed-startup-finished");
|
||||
return ExtensionParent.browserPaintedPromise;
|
||||
}
|
||||
|
||||
// Called to notify "extensions-late-startup", which resolves
|
||||
// ExtensionParent.browserStartupPromise. Normally, in Firefox, the
|
||||
// notification would be "sessionstore-windows-restored", however
|
||||
// mobile listens for "extensions-late-startup" so that is more useful
|
||||
// in testing.
|
||||
static notifyLateStartup() {
|
||||
Services.obs.notifyObservers(null, "extensions-late-startup");
|
||||
return ExtensionParent.browserStartupPromise;
|
||||
}
|
||||
|
||||
/**
|
||||
* Shortcut to more easily access WebExtensionPolicy.backgroundServiceWorkerEnabled
|
||||
* from mochitest-plain tests.
|
||||
@ -561,6 +584,8 @@ ExtensionTestCommon = class ExtensionTestCommon {
|
||||
incognitoOverride: data.incognitoOverride,
|
||||
temporarilyInstalled: !!data.temporarilyInstalled,
|
||||
TEST_NO_ADDON_MANAGER: true,
|
||||
// By default we set TEST_NO_DELAYED_STARTUP to true
|
||||
TEST_NO_DELAYED_STARTUP: !data.delayedStartup,
|
||||
},
|
||||
data.startupReason
|
||||
);
|
||||
|
@ -202,6 +202,16 @@ class ExtensionWrapper {
|
||||
return this.startupPromise;
|
||||
}
|
||||
|
||||
awaitBackgroundStarted() {
|
||||
if (!this.extension.manifest.background) {
|
||||
throw new Error("Extension has no background");
|
||||
}
|
||||
return Promise.all([
|
||||
this.startupPromise,
|
||||
this.extension.promiseBackgroundStarted(),
|
||||
]);
|
||||
}
|
||||
|
||||
async startup() {
|
||||
if (this.state != "uninitialized") {
|
||||
throw new Error("Extension already started");
|
||||
|
@ -24,12 +24,6 @@ ChromeUtils.defineModuleGetter(
|
||||
"resource://gre/modules/PrivateBrowsingUtils.jsm"
|
||||
);
|
||||
|
||||
XPCOMUtils.defineLazyPreferenceGetter(
|
||||
this,
|
||||
"DELAYED_STARTUP",
|
||||
"extensions.webextensions.background-delayed-startup"
|
||||
);
|
||||
|
||||
XPCOMUtils.defineLazyGetter(this, "serviceWorkerManager", () => {
|
||||
return Cc["@mozilla.org/serviceworkers/manager;1"].getService(
|
||||
Ci.nsIServiceWorkerManager
|
||||
@ -298,6 +292,10 @@ this.backgroundPage = class extends ExtensionAPI {
|
||||
extension.on("shutdown", done);
|
||||
});
|
||||
|
||||
extension.promiseBackgroundStarted = () => {
|
||||
return bgStartupPromise;
|
||||
};
|
||||
|
||||
extension.wakeupBackground = () => {
|
||||
extension.emit("background-script-event");
|
||||
extension.wakeupBackground = () => bgStartupPromise;
|
||||
@ -325,10 +323,8 @@ this.backgroundPage = class extends ExtensionAPI {
|
||||
// to initialize the addon and create the persisted listeners.
|
||||
if (
|
||||
isInStartup &&
|
||||
(!DELAYED_STARTUP ||
|
||||
(extension.persistentBackground &&
|
||||
extension.startupReason !== "APP_STARTUP") ||
|
||||
["ADDON_INSTALL", "ADDON_ENABLE"].includes(extension.startupReason))
|
||||
(extension.testNoDelayedStartup ||
|
||||
extension.startupReason !== "APP_STARTUP")
|
||||
) {
|
||||
return this.build();
|
||||
}
|
||||
|
@ -9,12 +9,6 @@ Services.scriptloader.loadSubScript(
|
||||
this
|
||||
);
|
||||
|
||||
// Bug 1748665 remove when events will start serviceworker
|
||||
Services.prefs.setBoolPref(
|
||||
"extensions.webextensions.background-delayed-startup",
|
||||
false
|
||||
);
|
||||
|
||||
add_task(assert_background_serviceworker_pref_enabled);
|
||||
|
||||
add_task(async function test_serviceWorker_register_guarded_by_pref() {
|
||||
|
@ -261,14 +261,11 @@ add_task(
|
||||
skip_if: () => ExtensionTestUtils.isInBackgroundServiceWorkerTests(),
|
||||
pref_set: [
|
||||
["privacy.resistFingerprinting.reduceTimerPrecision.jitter", false],
|
||||
["extensions.webextensions.background-delayed-startup", true],
|
||||
["extensions.eventPages.enabled", true],
|
||||
],
|
||||
},
|
||||
async function test_alarm_persists() {
|
||||
await AddonTestUtils.promiseStartupManager();
|
||||
// ensure normal delayed startup notification had already happened at some point
|
||||
Services.obs.notifyObservers(null, "browser-delayed-startup-finished");
|
||||
|
||||
let extension = getAlarmExtension(
|
||||
{ periodInMinutes: 0.01 },
|
||||
|
@ -21,11 +21,6 @@ let {
|
||||
promiseStartupManager,
|
||||
} = AddonTestUtils;
|
||||
|
||||
Services.prefs.setBoolPref(
|
||||
"extensions.webextensions.background-delayed-startup",
|
||||
true
|
||||
);
|
||||
|
||||
const { Management } = ChromeUtils.import(
|
||||
"resource://gre/modules/Extension.jsm"
|
||||
);
|
||||
@ -67,8 +62,7 @@ add_task(async function test_unload_extension_before_background_page_startup() {
|
||||
// Now the actual test: Unloading an extension before the startup has
|
||||
// finished should interrupt the start-up and abort pending delayed loads.
|
||||
info("Starting extension whose startup will be interrupted");
|
||||
ExtensionParent._resetStartupPromises();
|
||||
await promiseRestartManager();
|
||||
await promiseRestartManager({ earlyStartup: false });
|
||||
await extension.awaitStartup();
|
||||
|
||||
let extensionBrowserInsertions = 0;
|
||||
@ -85,14 +79,13 @@ add_task(async function test_unload_extension_before_background_page_startup() {
|
||||
|
||||
// Trigger the notification that would load a background page.
|
||||
info("Forcing pending delayed background page to load");
|
||||
Services.obs.notifyObservers(null, "sessionstore-windows-restored");
|
||||
AddonTestUtils.notifyLateStartup();
|
||||
|
||||
// This is the expected message from the re-enabled add-on.
|
||||
await extension.awaitMessage("background_startup_observed");
|
||||
await extension.unload();
|
||||
|
||||
await promiseShutdownManager();
|
||||
ExtensionParent._resetStartupPromises();
|
||||
|
||||
Management.off("extension-browser-inserted", onExtensionBrowserInserted);
|
||||
Assert.equal(
|
||||
@ -119,8 +112,7 @@ add_task(async function test_unload_extension_during_background_page_startup() {
|
||||
await extension.startup();
|
||||
await extension.awaitMessage("background_starting");
|
||||
|
||||
ExtensionParent._resetStartupPromises();
|
||||
await promiseRestartManager();
|
||||
await promiseRestartManager({ lateStartup: false });
|
||||
await extension.awaitStartup();
|
||||
|
||||
let bgStartupPromise = new Promise(resolve => {
|
||||
@ -183,7 +175,7 @@ add_task(async function test_unload_extension_during_background_page_startup() {
|
||||
});
|
||||
|
||||
// Force background page to initialize.
|
||||
Services.obs.notifyObservers(null, "sessionstore-windows-restored");
|
||||
AddonTestUtils.notifyLateStartup();
|
||||
await bgStartingPromise;
|
||||
|
||||
await extension.unload();
|
||||
@ -195,6 +187,4 @@ add_task(async function test_unload_extension_during_background_page_startup() {
|
||||
info("Waiting for background builder to finish");
|
||||
let bgLoadState = await bgStartupPromise;
|
||||
Assert.equal(bgLoadState, "bg_aborted", "Startup should be interrupted");
|
||||
|
||||
ExtensionParent._resetStartupPromises();
|
||||
});
|
||||
|
@ -33,24 +33,9 @@ add_task(async function setup() {
|
||||
|
||||
await AddonTestUtils.promiseStartupManager();
|
||||
|
||||
// Make sure background-delayed-startup is set to true (in some builds,
|
||||
// in particular Thunderbird, it is set to false) otherwise the extension
|
||||
// service worker will be started before the test cases can properly
|
||||
// mock the behavior expected on browser startup by calling the
|
||||
// nsIServiceWorkerManager.reloadRegistrationsForTest (and then the test task
|
||||
// test_serviceworker_lifecycle_events will fail because the worker will
|
||||
// refuse to be spawned while the extension is still disabled).
|
||||
Services.prefs.setBoolPref(
|
||||
"extensions.webextensions.background-delayed-startup",
|
||||
true
|
||||
);
|
||||
|
||||
Services.prefs.setBoolPref("dom.serviceWorkers.testing.enabled", true);
|
||||
|
||||
registerCleanupFunction(() => {
|
||||
Services.prefs.clearUserPref(
|
||||
"extensions.webextensions.background-delayed-startup"
|
||||
);
|
||||
Services.prefs.clearUserPref("dom.serviceWorkers.testing.enabled");
|
||||
Services.prefs.clearUserPref("dom.serviceWorkers.idle_timeout");
|
||||
});
|
||||
@ -267,8 +252,18 @@ add_task(async function test_serviceworker_lifecycle_events() {
|
||||
);
|
||||
|
||||
info("Restart AddonManager (mocking Browser instance restart)");
|
||||
ExtensionParent._resetStartupPromises();
|
||||
await AddonTestUtils.promiseStartupManager();
|
||||
// Start the addon manager with `earlyStartup: false` to keep the background service worker
|
||||
// from being started right away:
|
||||
//
|
||||
// - the call to `swm.reloadRegistrationForTest()` that follows is making sure that
|
||||
// the previously registered service worker is in the same state it would be when
|
||||
// the entire browser is restarted.
|
||||
//
|
||||
// - if the background service worker is being spawned again by the time we call
|
||||
// `swm.reloadRegistrationForTest()`, ServiceWorkerUpdateJob would fail and trigger
|
||||
// an `mState == State::Started` diagnostic assertion from ServiceWorkerJob::Finish
|
||||
// and the xpcshell test will fail for the crash triggered by the assertion.
|
||||
await AddonTestUtils.promiseStartupManager({ lateStartup: false });
|
||||
await extension.awaitStartup();
|
||||
|
||||
info(
|
||||
@ -279,6 +274,8 @@ add_task(async function test_serviceworker_lifecycle_events() {
|
||||
info(
|
||||
"trigger delayed call to nsIServiceWorkerManager.registerForAddonPrincipal"
|
||||
);
|
||||
// complete the startup notifications, then start the background
|
||||
AddonTestUtils.notifyLateStartup();
|
||||
extension.extension.emit("start-background-script");
|
||||
|
||||
info("Force activate the extension worker");
|
||||
|
@ -3,6 +3,8 @@
|
||||
|
||||
"use strict";
|
||||
|
||||
Services.prefs.setBoolPref("extensions.blocklist.enabled", false);
|
||||
|
||||
AddonTestUtils.init(this);
|
||||
AddonTestUtils.overrideCertDB();
|
||||
AddonTestUtils.createAppInfo(
|
||||
@ -292,16 +294,6 @@ add_task(
|
||||
files,
|
||||
});
|
||||
|
||||
Services.prefs.setBoolPref(
|
||||
"extensions.webextensions.background-delayed-startup",
|
||||
false
|
||||
);
|
||||
registerCleanupFunction(() =>
|
||||
Services.prefs.clearUserPref(
|
||||
"extensions.webextensions.background-delayed-startup"
|
||||
)
|
||||
);
|
||||
|
||||
// This temporary directory is going to be removed from the
|
||||
// cleanup function, but also make it unique as we do for the
|
||||
// other temporary files (e.g. like getTemporaryFile as defined
|
||||
|
@ -1,12 +1,6 @@
|
||||
"use strict";
|
||||
|
||||
Services.prefs.setBoolPref("extensions.manifestV3.enabled", true);
|
||||
// Since we're not using AOM, and MV3 forces event pages, bypass
|
||||
// delayed-startup for MV3 test. These tests do not rely on startup events.
|
||||
Services.prefs.setBoolPref(
|
||||
"extensions.webextensions.background-delayed-startup",
|
||||
false
|
||||
);
|
||||
|
||||
const server = createHttpServer({ hosts: ["example.com"] });
|
||||
|
||||
|
@ -7,12 +7,6 @@ const { TestUtils } = ChromeUtils.import(
|
||||
);
|
||||
|
||||
Services.prefs.setBoolPref("extensions.manifestV3.enabled", true);
|
||||
// Since we're not using AOM, and MV3 forces event pages, bypass
|
||||
// delayed-startup for MV3 test. These tests do not rely on startup events.
|
||||
Services.prefs.setBoolPref(
|
||||
"extensions.webextensions.background-delayed-startup",
|
||||
false
|
||||
);
|
||||
|
||||
const server = createHttpServer({
|
||||
hosts: ["example.com", "csplog.example.net"],
|
||||
|
@ -16,10 +16,6 @@ AddonTestUtils.createAppInfo(
|
||||
"42"
|
||||
);
|
||||
|
||||
Services.prefs.setBoolPref(
|
||||
"extensions.webextensions.background-delayed-startup",
|
||||
true
|
||||
);
|
||||
Services.prefs.setBoolPref("extensions.eventPages.enabled", true);
|
||||
|
||||
ChromeUtils.defineModuleGetter(
|
||||
@ -30,9 +26,6 @@ ChromeUtils.defineModuleGetter(
|
||||
|
||||
add_task(async function setup() {
|
||||
await AddonTestUtils.promiseStartupManager();
|
||||
// resolve startup promises, we'll test waking a background
|
||||
Services.obs.notifyObservers(null, "browser-delayed-startup-finished");
|
||||
Services.obs.notifyObservers(null, "sessionstore-windows-restored");
|
||||
|
||||
// Create an object to hold the values to which we will initialize the prefs.
|
||||
const PREFS = {
|
||||
|
@ -18,11 +18,6 @@ let {
|
||||
promiseStartupManager,
|
||||
} = AddonTestUtils;
|
||||
|
||||
Services.prefs.setBoolPref(
|
||||
"extensions.webextensions.background-delayed-startup",
|
||||
true
|
||||
);
|
||||
|
||||
const PAGE_HTML = `<!DOCTYPE html><meta charset="utf-8"><script src="script.js"></script>`;
|
||||
|
||||
function trackEvents(wrapper) {
|
||||
@ -62,7 +57,7 @@ async function test(what, background, script) {
|
||||
await extension.awaitMessage("bg-ran");
|
||||
|
||||
info(`Test wakeup for ${what} from an extension page`);
|
||||
await promiseRestartManager();
|
||||
await promiseRestartManager({ earlyStartup: false });
|
||||
await extension.awaitStartup();
|
||||
|
||||
function awaitBgEvent() {
|
||||
@ -94,7 +89,7 @@ async function test(what, background, script) {
|
||||
equal(extension.messageQueue.size, 0, "Have not yet received bg-ran message");
|
||||
|
||||
let promise = extension.awaitMessage("bg-ran");
|
||||
Services.obs.notifyObservers(null, "browser-delayed-startup-finished");
|
||||
AddonTestUtils.notifyEarlyStartup();
|
||||
await promise;
|
||||
|
||||
equal(
|
||||
@ -109,8 +104,7 @@ async function test(what, background, script) {
|
||||
await page.close();
|
||||
|
||||
info(`Test wakeup for ${what} from a content script`);
|
||||
ExtensionParent._resetStartupPromises();
|
||||
await promiseRestartManager();
|
||||
await promiseRestartManager({ earlyStartup: false });
|
||||
await extension.awaitStartup();
|
||||
|
||||
events = trackEvents(extension);
|
||||
@ -136,7 +130,7 @@ async function test(what, background, script) {
|
||||
equal(extension.messageQueue.size, 0, "Have not yet received bg-ran message");
|
||||
|
||||
promise = extension.awaitMessage("bg-ran");
|
||||
Services.obs.notifyObservers(null, "browser-delayed-startup-finished");
|
||||
AddonTestUtils.notifyEarlyStartup();
|
||||
await promise;
|
||||
|
||||
equal(
|
||||
@ -152,7 +146,6 @@ async function test(what, background, script) {
|
||||
await extension.unload();
|
||||
|
||||
await promiseShutdownManager();
|
||||
ExtensionParent._resetStartupPromises();
|
||||
}
|
||||
|
||||
add_task(function test_onMessage() {
|
||||
@ -248,11 +241,29 @@ add_task(async function test_other_startup() {
|
||||
await extension.startup();
|
||||
await extension.awaitMessage("bg-ran");
|
||||
|
||||
await promiseRestartManager();
|
||||
await promiseRestartManager({ lateStartup: false });
|
||||
await extension.awaitStartup();
|
||||
let events = trackEvents(extension);
|
||||
|
||||
equal(
|
||||
events.get("background-script-event"),
|
||||
false,
|
||||
"Should not have gotten a background page event"
|
||||
);
|
||||
equal(
|
||||
events.get("start-background-script"),
|
||||
false,
|
||||
"Background page should not be started"
|
||||
);
|
||||
|
||||
// Start the background page. No message have been sent at this point.
|
||||
Services.obs.notifyObservers(null, "sessionstore-windows-restored");
|
||||
await AddonTestUtils.notifyLateStartup();
|
||||
equal(
|
||||
events.get("start-background-script"),
|
||||
true,
|
||||
"Background page should be started"
|
||||
);
|
||||
|
||||
await extension.awaitMessage("bg-ran");
|
||||
|
||||
// Now that the background page is fully started, load a new page that
|
||||
@ -266,5 +277,4 @@ add_task(async function test_other_startup() {
|
||||
await extension.unload();
|
||||
|
||||
await promiseShutdownManager();
|
||||
ExtensionParent._resetStartupPromises();
|
||||
});
|
||||
|
@ -31,11 +31,6 @@ AddonTestUtils.createAppInfo(
|
||||
"42"
|
||||
);
|
||||
|
||||
Services.prefs.setBoolPref(
|
||||
"extensions.webextensions.background-delayed-startup",
|
||||
false
|
||||
);
|
||||
|
||||
add_task(async function setup() {
|
||||
// Bug 1646182: Force ExtensionPermissions to run in rkv mode, the legacy
|
||||
// storage mode will run in xpcshell-legacy-ep.ini
|
||||
@ -315,7 +310,7 @@ async function test_permissions(manifest_version) {
|
||||
|
||||
// Restart, verify permissions are still present
|
||||
await AddonTestUtils.promiseRestartManager();
|
||||
await extension.awaitStartup();
|
||||
await extension.awaitBackgroundStarted();
|
||||
|
||||
result = await call("getAll");
|
||||
deepEqual(
|
||||
@ -344,8 +339,12 @@ async function test_permissions(manifest_version) {
|
||||
|
||||
await extension.unload();
|
||||
}
|
||||
add_task(() => test_permissions(2));
|
||||
add_task(() => test_permissions(3));
|
||||
add_task(async function test_permissions_mv2() {
|
||||
return test_permissions(2);
|
||||
});
|
||||
add_task(async function test_permissions_mv3() {
|
||||
return test_permissions(3);
|
||||
});
|
||||
|
||||
add_task(async function test_startup() {
|
||||
async function background() {
|
||||
@ -547,8 +546,12 @@ async function test_alreadyGranted(manifest_version) {
|
||||
|
||||
await extension.unload();
|
||||
}
|
||||
add_task(() => test_alreadyGranted(2));
|
||||
add_task(() => test_alreadyGranted(3));
|
||||
add_task(async function test_alreadyGranted_mv2() {
|
||||
return test_alreadyGranted(2);
|
||||
});
|
||||
add_task(async function test_alreadyGranted_mv3() {
|
||||
return test_alreadyGranted(3);
|
||||
});
|
||||
|
||||
// IMPORTANT: Do not change this list without review from a Web Extensions peer!
|
||||
|
||||
@ -738,8 +741,12 @@ async function test_permissions_prompt(manifest_version) {
|
||||
|
||||
await extension.unload();
|
||||
}
|
||||
add_task(() => test_permissions_prompt(2));
|
||||
add_task(() => test_permissions_prompt(3));
|
||||
add_task(async function test_permissions_prompt_mv2() {
|
||||
return test_permissions_prompt(2);
|
||||
});
|
||||
add_task(async function test_permissions_prompt_mv3() {
|
||||
return test_permissions_prompt(3);
|
||||
});
|
||||
|
||||
// Check that internal permissions can not be set and are not returned by the API.
|
||||
add_task(async function test_internal_permissions() {
|
||||
|
@ -1,10 +1,5 @@
|
||||
"use strict";
|
||||
|
||||
Services.prefs.setBoolPref(
|
||||
"extensions.webextensions.background-delayed-startup",
|
||||
false
|
||||
);
|
||||
|
||||
const { AddonManager } = ChromeUtils.import(
|
||||
"resource://gre/modules/AddonManager.jsm"
|
||||
);
|
||||
@ -157,7 +152,7 @@ add_task(async function test_api_on_permissions_changed() {
|
||||
|
||||
// Verify access on restart
|
||||
await AddonTestUtils.promiseRestartManager();
|
||||
await extension.awaitStartup();
|
||||
await extension.awaitBackgroundStarted();
|
||||
await verifyPermissions(true);
|
||||
|
||||
await withHandlingUserInput(extension, async () => {
|
||||
@ -330,7 +325,7 @@ add_task(async function test_browserSetting_permissions() {
|
||||
await ExtensionPermissions._uninit();
|
||||
extensionHandlers.delete(extension);
|
||||
await AddonTestUtils.promiseRestartManager();
|
||||
await extension.awaitStartup();
|
||||
await extension.awaitBackgroundStarted();
|
||||
|
||||
await withHandlingUserInput(extension, async () => {
|
||||
extension.sendMessage("remove");
|
||||
@ -388,7 +383,7 @@ add_task(async function test_privacy_permissions() {
|
||||
await ExtensionPermissions._uninit();
|
||||
extensionHandlers.delete(extension);
|
||||
await AddonTestUtils.promiseRestartManager();
|
||||
await extension.awaitStartup();
|
||||
await extension.awaitBackgroundStarted();
|
||||
|
||||
await withHandlingUserInput(extension, async () => {
|
||||
extension.sendMessage("remove");
|
||||
|
@ -19,11 +19,6 @@ AddonTestUtils.createAppInfo(
|
||||
// and already covered by other tests.
|
||||
AddonTestUtils.usePrivilegedSignatures = false;
|
||||
|
||||
Services.prefs.setBoolPref(
|
||||
"extensions.webextensions.background-delayed-startup",
|
||||
false
|
||||
);
|
||||
|
||||
// Look up the cached permissions, if any.
|
||||
async function getCachedPermissions(extensionId) {
|
||||
const NotFound = Symbol("extension ID not found in permissions cache");
|
||||
|
@ -158,11 +158,6 @@ function trackEvents(wrapper) {
|
||||
}
|
||||
|
||||
add_task(async function setup() {
|
||||
Services.prefs.setBoolPref(
|
||||
"extensions.webextensions.background-delayed-startup",
|
||||
true
|
||||
);
|
||||
|
||||
AddonTestUtils.init(global);
|
||||
AddonTestUtils.overrideCertDB();
|
||||
AddonTestUtils.createAppInfo(
|
||||
@ -498,14 +493,13 @@ add_task(async function test_shutdown_before_background_loaded() {
|
||||
// that the persistent listeners have not been unregistered.
|
||||
|
||||
// Suppress background page start until an explicit notification.
|
||||
ExtensionParent._resetStartupPromises();
|
||||
await Promise.all([
|
||||
promiseObservable("prime-event-listener", 1),
|
||||
AddonTestUtils.promiseStartupManager(),
|
||||
AddonTestUtils.promiseStartupManager({ earlyStartup: false }),
|
||||
]);
|
||||
info("Triggering persistent event to force the background page to start");
|
||||
Services.obs.notifyObservers({ listenerArgs: 123 }, "fire-onEvent1");
|
||||
Services.obs.notifyObservers(null, "browser-delayed-startup-finished");
|
||||
AddonTestUtils.notifyEarlyStartup();
|
||||
await extension.awaitMessage("bg_started");
|
||||
equal(await extension.awaitMessage("triggered"), 123, "triggered event");
|
||||
|
||||
@ -516,10 +510,9 @@ add_task(async function test_shutdown_before_background_loaded() {
|
||||
|
||||
// And lastly, verify that a primed listener is correctly removed when the
|
||||
// extension unloads normally before the delayed background page can load.
|
||||
ExtensionParent._resetStartupPromises();
|
||||
await Promise.all([
|
||||
promiseObservable("prime-event-listener", 1),
|
||||
AddonTestUtils.promiseStartupManager(),
|
||||
AddonTestUtils.promiseStartupManager({ earlyStartup: false }),
|
||||
]);
|
||||
|
||||
info("Unloading extension before background page has loaded");
|
||||
@ -536,8 +529,6 @@ add_task(async function test_shutdown_before_background_loaded() {
|
||||
// put to sleep.
|
||||
add_task(async function test_background_restarted() {
|
||||
await AddonTestUtils.promiseStartupManager();
|
||||
// ensure normal delayed startup notification had already happened at some point
|
||||
Services.obs.notifyObservers(null, "browser-delayed-startup-finished");
|
||||
|
||||
let extension = ExtensionTestUtils.loadExtension({
|
||||
useAddonManager: "permanent",
|
||||
@ -582,8 +573,6 @@ add_task(
|
||||
{ prefs_set: [["extensions.eventPages.enabled", true]] },
|
||||
async function test_eventpage_startup() {
|
||||
await AddonTestUtils.promiseStartupManager();
|
||||
// ensure normal delayed startup notification had already happened at some point
|
||||
Services.obs.notifyObservers(null, "browser-delayed-startup-finished");
|
||||
|
||||
let extension = ExtensionTestUtils.loadExtension({
|
||||
useAddonManager: "permanent",
|
||||
@ -652,7 +641,7 @@ add_task(
|
||||
new Promise(resolve => extension.extension.once("shutdown", resolve)),
|
||||
AddonTestUtils.promiseShutdownManager(),
|
||||
]);
|
||||
await AddonTestUtils.promiseStartupManager();
|
||||
await AddonTestUtils.promiseStartupManager({ lateStartup: false });
|
||||
await extension.awaitStartup();
|
||||
await testAfterRestart();
|
||||
|
||||
|
@ -22,11 +22,6 @@ AddonTestUtils.createAppInfo(
|
||||
"42"
|
||||
);
|
||||
|
||||
Services.prefs.setBoolPref(
|
||||
"extensions.webextensions.background-delayed-startup",
|
||||
false
|
||||
);
|
||||
|
||||
add_task(async function setup() {
|
||||
// Bug 1646182: Force ExtensionPermissions to run in rkv mode, the legacy
|
||||
// storage mode will run in xpcshell-legacy-ep.ini
|
||||
@ -604,7 +599,7 @@ add_task(async function test_proxy_settings_permissions() {
|
||||
await ExtensionPermissions._uninit();
|
||||
resetHandlingUserInput();
|
||||
await AddonTestUtils.promiseRestartManager();
|
||||
await extension.awaitStartup();
|
||||
await extension.awaitBackgroundStarted();
|
||||
|
||||
await withHandlingUserInput(extension, async () => {
|
||||
extension.sendMessage("remove");
|
||||
|
@ -33,11 +33,6 @@ server.registerPathHandler("/", (request, response) => {
|
||||
response.write("ok");
|
||||
});
|
||||
|
||||
Services.prefs.setBoolPref(
|
||||
"extensions.webextensions.background-delayed-startup",
|
||||
true
|
||||
);
|
||||
|
||||
function promiseExtensionEvent(wrapper, event) {
|
||||
return new Promise(resolve => {
|
||||
wrapper.extension.once(event, resolve);
|
||||
@ -100,7 +95,7 @@ add_task(async function test_proxy_startup() {
|
||||
equal(1, proxiedRequests, "proxied request ok");
|
||||
equal(1, nonProxiedRequests, "non proxied request ok");
|
||||
|
||||
await promiseRestartManager();
|
||||
await promiseRestartManager({ earlyStartup: false });
|
||||
await extension.awaitStartup();
|
||||
|
||||
let events = trackEvents(extension);
|
||||
@ -137,7 +132,7 @@ add_task(async function test_proxy_startup() {
|
||||
"Should have gotten a background script event"
|
||||
);
|
||||
|
||||
Services.obs.notifyObservers(null, "browser-delayed-startup-finished");
|
||||
AddonTestUtils.notifyEarlyStartup();
|
||||
await new Promise(executeSoon);
|
||||
|
||||
equal(
|
||||
|
@ -27,13 +27,6 @@ AddonTestUtils.overrideCertDB();
|
||||
|
||||
createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "42", "42");
|
||||
|
||||
// Ensure that the background page is automatically started after using
|
||||
// promiseStartupManager.
|
||||
Services.prefs.setBoolPref(
|
||||
"extensions.webextensions.background-delayed-startup",
|
||||
false
|
||||
);
|
||||
|
||||
function background() {
|
||||
let onInstalledDetails = null;
|
||||
let onStartupFired = false;
|
||||
@ -244,7 +237,7 @@ add_task(async function test_should_fire_on_browser_update() {
|
||||
|
||||
// Restart the browser.
|
||||
await promiseRestartManager("1");
|
||||
await extension.awaitStartup();
|
||||
await extension.awaitBackgroundStarted();
|
||||
|
||||
await expectEvents(extension, {
|
||||
onStartupFired: true,
|
||||
@ -253,7 +246,7 @@ add_task(async function test_should_fire_on_browser_update() {
|
||||
|
||||
// Update the browser.
|
||||
await promiseRestartManager("2");
|
||||
await extension.awaitStartup();
|
||||
await extension.awaitBackgroundStarted();
|
||||
|
||||
await expectEvents(extension, {
|
||||
onStartupFired: true,
|
||||
@ -264,7 +257,7 @@ add_task(async function test_should_fire_on_browser_update() {
|
||||
|
||||
// Restart the browser.
|
||||
await promiseRestartManager("2");
|
||||
await extension.awaitStartup();
|
||||
await extension.awaitBackgroundStarted();
|
||||
|
||||
await expectEvents(extension, {
|
||||
onStartupFired: true,
|
||||
@ -273,7 +266,7 @@ add_task(async function test_should_fire_on_browser_update() {
|
||||
|
||||
// Update the browser again.
|
||||
await promiseRestartManager("3");
|
||||
await extension.awaitStartup();
|
||||
await extension.awaitBackgroundStarted();
|
||||
|
||||
await expectEvents(extension, {
|
||||
onStartupFired: true,
|
||||
|
@ -23,11 +23,6 @@ AddonTestUtils.createAppInfo(
|
||||
"42"
|
||||
);
|
||||
|
||||
Services.prefs.setBoolPref(
|
||||
"extensions.webextensions.background-delayed-startup",
|
||||
false
|
||||
);
|
||||
|
||||
const ADDON_ID = "test-startup-cache@xpcshell.mozilla.org";
|
||||
|
||||
function makeExtension(opts) {
|
||||
@ -68,7 +63,7 @@ function makeExtension(opts) {
|
||||
};
|
||||
}
|
||||
|
||||
add_task(async function() {
|
||||
add_task(async function test_langpack_startup_cache() {
|
||||
Preferences.set("extensions.logging.enabled", false);
|
||||
await AddonTestUtils.promiseStartupManager();
|
||||
|
||||
@ -132,7 +127,7 @@ add_task(async function() {
|
||||
|
||||
info("Restart and re-check");
|
||||
await AddonTestUtils.promiseRestartManager();
|
||||
await extension.awaitStartup();
|
||||
await extension.awaitBackgroundStarted();
|
||||
|
||||
equal(extension.version, "1.0", "Expected extension version");
|
||||
manifest = await getManifest();
|
||||
@ -141,7 +136,7 @@ add_task(async function() {
|
||||
info("Change locale to 'fr' and restart");
|
||||
Services.locale.requestedLocales = ["fr"];
|
||||
await AddonTestUtils.promiseRestartManager();
|
||||
await extension.awaitStartup();
|
||||
await extension.awaitBackgroundStarted();
|
||||
|
||||
equal(extension.version, "1.0", "Expected extension version");
|
||||
manifest = await getManifest();
|
||||
@ -157,7 +152,7 @@ add_task(async function() {
|
||||
info("Change locale to 'en-US' and restart");
|
||||
Services.locale.requestedLocales = ["en-US"];
|
||||
await AddonTestUtils.promiseRestartManager();
|
||||
await extension.awaitStartup();
|
||||
await extension.awaitBackgroundStarted();
|
||||
|
||||
equal(extension.version, "1.1", "Expected extension version");
|
||||
manifest = await getManifest();
|
||||
|
@ -1,17 +1,13 @@
|
||||
"use strict";
|
||||
|
||||
Services.prefs.setBoolPref("extensions.blocklist.enabled", false);
|
||||
|
||||
ChromeUtils.defineModuleGetter(
|
||||
this,
|
||||
"AddonManager",
|
||||
"resource://gre/modules/AddonManager.jsm"
|
||||
);
|
||||
|
||||
// Automatically start the background page after restarting the AddonManager.
|
||||
Services.prefs.setBoolPref(
|
||||
"extensions.webextensions.background-delayed-startup",
|
||||
false
|
||||
);
|
||||
|
||||
AddonTestUtils.init(this);
|
||||
AddonTestUtils.overrideCertDB();
|
||||
AddonTestUtils.createAppInfo(
|
||||
@ -38,6 +34,7 @@ add_task(async function setup_wrapper() {
|
||||
|
||||
await AddonTestUtils.promiseStartupManager();
|
||||
await extension.startup();
|
||||
await extension.awaitBackgroundStarted();
|
||||
await AddonTestUtils.promiseShutdownManager();
|
||||
|
||||
// Check message because it is expected to be received while `startup()` was
|
||||
@ -47,6 +44,7 @@ add_task(async function setup_wrapper() {
|
||||
|
||||
// Load AddonManager, and unload the extension as soon as it has started.
|
||||
await AddonTestUtils.promiseStartupManager();
|
||||
await extension.awaitBackgroundStarted();
|
||||
await extension.unload();
|
||||
await AddonTestUtils.promiseShutdownManager();
|
||||
|
||||
|
@ -19,7 +19,11 @@ AddonTestUtils.createAppInfo(
|
||||
"42"
|
||||
);
|
||||
|
||||
let { promiseShutdownManager } = AddonTestUtils;
|
||||
let {
|
||||
promiseShutdownManager,
|
||||
promiseStartupManager,
|
||||
promiseRestartManager,
|
||||
} = AddonTestUtils;
|
||||
|
||||
const server = createHttpServer({ hosts: ["example.com"] });
|
||||
server.registerDirectory("/data/", do_get_file("data"));
|
||||
@ -27,11 +31,6 @@ server.registerDirectory("/data/", do_get_file("data"));
|
||||
let scopes = AddonManager.SCOPE_PROFILE | AddonManager.SCOPE_APPLICATION;
|
||||
Services.prefs.setIntPref("extensions.enabledScopes", scopes);
|
||||
|
||||
Services.prefs.setBoolPref(
|
||||
"extensions.webextensions.background-delayed-startup",
|
||||
true
|
||||
);
|
||||
|
||||
function trackEvents(wrapper) {
|
||||
let events = new Map();
|
||||
for (let event of ["background-script-event", "start-background-script"]) {
|
||||
@ -65,7 +64,7 @@ async function testPersistentRequestStartup(extension, events, expect = {}) {
|
||||
);
|
||||
|
||||
if (!expect.started) {
|
||||
Services.obs.notifyObservers(null, "browser-delayed-startup-finished");
|
||||
AddonTestUtils.notifyEarlyStartup();
|
||||
await ExtensionParent.browserPaintedPromise;
|
||||
|
||||
equal(
|
||||
@ -81,17 +80,6 @@ async function testPersistentRequestStartup(extension, events, expect = {}) {
|
||||
}
|
||||
}
|
||||
|
||||
// Every startup in these tests assumes a reset of startup promises.
|
||||
function promiseStartupManager() {
|
||||
ExtensionParent._resetStartupPromises();
|
||||
return AddonTestUtils.promiseStartupManager();
|
||||
}
|
||||
|
||||
function promiseRestartManager() {
|
||||
ExtensionParent._resetStartupPromises();
|
||||
return AddonTestUtils.promiseRestartManager();
|
||||
}
|
||||
|
||||
// Test that a non-blocking listener does not start the background on
|
||||
// startup, but that it does work after startup.
|
||||
add_task(async function test_nonblocking() {
|
||||
@ -119,7 +107,7 @@ add_task(async function test_nonblocking() {
|
||||
await extension.awaitMessage("ready");
|
||||
|
||||
// Restart to get APP_STARTUP, the background should not start
|
||||
await promiseRestartManager();
|
||||
await promiseRestartManager({ lateStartup: false });
|
||||
await extension.awaitStartup();
|
||||
assertPersistentListeners(extension, "webRequest", "onBeforeRequest", {
|
||||
primed: false,
|
||||
@ -139,7 +127,7 @@ add_task(async function test_nonblocking() {
|
||||
request: false,
|
||||
});
|
||||
|
||||
Services.obs.notifyObservers(null, "sessionstore-windows-restored");
|
||||
AddonTestUtils.notifyLateStartup();
|
||||
await extension.awaitMessage("ready");
|
||||
assertPersistentListeners(extension, "webRequest", "onBeforeRequest", {
|
||||
primed: false,
|
||||
@ -191,7 +179,7 @@ add_task(async function test_eventpage_nonblocking() {
|
||||
await extension.startup();
|
||||
|
||||
// Restart to get APP_STARTUP, the background should not start
|
||||
await promiseRestartManager();
|
||||
await promiseRestartManager({ lateStartup: false });
|
||||
await extension.awaitStartup();
|
||||
assertPersistentListeners(extension, "webRequest", "onBeforeRequest", {
|
||||
primed: false,
|
||||
@ -207,8 +195,7 @@ add_task(async function test_eventpage_nonblocking() {
|
||||
|
||||
await testPersistentRequestStartup(extension, events);
|
||||
|
||||
Services.obs.notifyObservers(null, "sessionstore-windows-restored");
|
||||
await ExtensionParent.browserStartupPromise;
|
||||
await AddonTestUtils.notifyLateStartup();
|
||||
// After late startup, event page listeners should be primed.
|
||||
assertPersistentListeners(extension, "webRequest", "onBeforeRequest", {
|
||||
primed: true,
|
||||
@ -268,7 +255,7 @@ add_task(async function test_persistent_blocking() {
|
||||
primed: false,
|
||||
});
|
||||
|
||||
await promiseRestartManager();
|
||||
await promiseRestartManager({ lateStartup: false });
|
||||
await extension.awaitStartup();
|
||||
assertPersistentListeners(extension, "webRequest", "onBeforeRequest", {
|
||||
primed: true,
|
||||
@ -287,7 +274,7 @@ add_task(async function test_persistent_blocking() {
|
||||
request: false,
|
||||
});
|
||||
|
||||
Services.obs.notifyObservers(null, "sessionstore-windows-restored");
|
||||
AddonTestUtils.notifyLateStartup();
|
||||
|
||||
await extension.unload();
|
||||
await promiseShutdownManager();
|
||||
@ -375,7 +362,8 @@ add_task(async function test_persistent_listener_after_sideload_upgrade() {
|
||||
request: false,
|
||||
});
|
||||
|
||||
Services.obs.notifyObservers(null, "sessionstore-windows-restored");
|
||||
AddonTestUtils.notifyLateStartup();
|
||||
|
||||
await extension.unload();
|
||||
await promiseShutdownManager();
|
||||
});
|
||||
@ -511,7 +499,8 @@ add_task(
|
||||
request: false,
|
||||
});
|
||||
|
||||
Services.obs.notifyObservers(null, "sessionstore-windows-restored");
|
||||
AddonTestUtils.notifyLateStartup();
|
||||
|
||||
await extension.unload();
|
||||
|
||||
// remove the builtin addon which will have restarted now.
|
||||
@ -653,7 +642,6 @@ add_task(async function test_persistent_listener_after_staged_upgrade() {
|
||||
request: false,
|
||||
});
|
||||
|
||||
Services.obs.notifyObservers(null, "sessionstore-windows-restored");
|
||||
await extension.unload();
|
||||
await promiseShutdownManager();
|
||||
AddonManager.checkUpdateSecurity = true;
|
||||
@ -758,7 +746,7 @@ add_task(async function test_persistent_listener_after_permission_removal() {
|
||||
await promiseShutdownManager();
|
||||
|
||||
// restarting allows upgrade to proceed
|
||||
await promiseStartupManager();
|
||||
await promiseStartupManager({ lateStartup: false });
|
||||
let events = trackEvents(extension);
|
||||
await extension.awaitStartup();
|
||||
assertPersistentListeners(extension, "webRequest", "onBeforeRequest", {
|
||||
@ -784,7 +772,7 @@ add_task(async function test_persistent_listener_after_permission_removal() {
|
||||
request: false,
|
||||
});
|
||||
|
||||
Services.obs.notifyObservers(null, "sessionstore-windows-restored");
|
||||
AddonTestUtils.notifyLateStartup();
|
||||
|
||||
await extension.awaitMessage("loaded");
|
||||
ok(true, "Background page loaded");
|
||||
|
@ -18,11 +18,6 @@ let {
|
||||
const server = createHttpServer({ hosts: ["example.com"] });
|
||||
server.registerDirectory("/data/", do_get_file("data"));
|
||||
|
||||
Services.prefs.setBoolPref(
|
||||
"extensions.webextensions.background-delayed-startup",
|
||||
true
|
||||
);
|
||||
|
||||
// Test that a blocking listener that uses filterResponseData() works
|
||||
// properly (i.e., that the delayed call to registerTraceableChannel
|
||||
// works properly).
|
||||
|
@ -3,12 +3,6 @@
|
||||
const HOSTS = new Set(["example.com"]);
|
||||
|
||||
Services.prefs.setBoolPref("extensions.manifestV3.enabled", true);
|
||||
// Since we're not using AOM, and MV3 forces event pages, bypass
|
||||
// delayed-startup for MV3 test. These tests do not rely on startup events.
|
||||
Services.prefs.setBoolPref(
|
||||
"extensions.webextensions.background-delayed-startup",
|
||||
false
|
||||
);
|
||||
|
||||
const server = createHttpServer({ hosts: HOSTS });
|
||||
|
||||
|
@ -12,7 +12,6 @@ prefs =
|
||||
extensions.backgroundServiceWorker.enabled=true
|
||||
extensions.backgroundServiceWorker.forceInTestExtension=true
|
||||
extensions.webextensions.remote=true
|
||||
extensions.webextensions.background-delayed-startup=false
|
||||
|
||||
[test_ext_background_service_worker.js]
|
||||
[test_ext_alarms.js]
|
||||
|
@ -171,10 +171,6 @@ var SearchTestUtils = {
|
||||
initXPCShellAddonManager(scope, usePrivilegedSignatures = false) {
|
||||
let scopes = AddonManager.SCOPE_PROFILE | AddonManager.SCOPE_APPLICATION;
|
||||
Services.prefs.setIntPref("extensions.enabledScopes", scopes);
|
||||
Services.prefs.setBoolPref(
|
||||
"extensions.webextensions.background-delayed-startup",
|
||||
false
|
||||
);
|
||||
// Only do this once.
|
||||
try {
|
||||
gTestScope.ExtensionTestUtils.init(scope);
|
||||
|
@ -834,27 +834,36 @@ var AddonTestUtils = {
|
||||
/**
|
||||
* Starts up the add-on manager as if it was started by the application.
|
||||
*
|
||||
* @param {string} [newVersion]
|
||||
* @param {Object} params
|
||||
* The new params are in an object and new code should use that.
|
||||
* @param {boolean} params.earlyStartup
|
||||
* Notifies early startup phase. default is true
|
||||
* @param {boolean} params.lateStartup
|
||||
* Notifies late startup phase which ensures addons are started or
|
||||
* listeners are primed. default is true
|
||||
* @param {boolean} params.newVersion
|
||||
* If provided, the application version is changed to this string
|
||||
* before the AddonManager is started.
|
||||
* @param {string} [newPlatformVersion]
|
||||
* If provided, the platform version is changed to this string
|
||||
* before the AddonManager is started. It will default to the appVersion
|
||||
* as that is how Firefox currently builds (app === platform).
|
||||
*/
|
||||
async promiseStartupManager(newVersion, newPlatformVersion = newVersion) {
|
||||
async promiseStartupManager(params) {
|
||||
if (this.addonIntegrationService) {
|
||||
throw new Error(
|
||||
"Attempting to startup manager that was already started."
|
||||
);
|
||||
}
|
||||
// Support old arguments
|
||||
if (typeof params != "object") {
|
||||
params = {
|
||||
newVersion: arguments[0],
|
||||
};
|
||||
}
|
||||
let { earlyStartup = true, lateStartup = true, newVersion } = params;
|
||||
|
||||
lateStartup = earlyStartup && lateStartup;
|
||||
|
||||
if (newVersion) {
|
||||
this.appInfo.version = newVersion;
|
||||
}
|
||||
|
||||
if (newPlatformVersion) {
|
||||
this.appInfo.platformVersion = newPlatformVersion;
|
||||
this.appInfo.platformVersion = newVersion;
|
||||
}
|
||||
|
||||
// AddonListeners are removed when the addonManager is shutdown,
|
||||
@ -907,6 +916,12 @@ var AddonTestUtils = {
|
||||
addon => addon.startupPromise
|
||||
)
|
||||
);
|
||||
if (earlyStartup) {
|
||||
ExtensionTestCommon.notifyEarlyStartup();
|
||||
}
|
||||
if (lateStartup) {
|
||||
ExtensionTestCommon.notifyLateStartup();
|
||||
}
|
||||
},
|
||||
|
||||
async promiseShutdownManager({
|
||||
@ -986,6 +1001,8 @@ var AddonTestUtils = {
|
||||
"resource://gre/modules/addons/XPIProvider.jsm"
|
||||
);
|
||||
|
||||
ExtensionTestCommon.resetStartupPromises();
|
||||
|
||||
if (shutdownError) {
|
||||
throw shutdownError;
|
||||
}
|
||||
@ -998,13 +1015,34 @@ var AddonTestUtils = {
|
||||
* simulate an application upgrade (or downgrade) where the version
|
||||
* is changed to newVersion when re-started.
|
||||
*
|
||||
* @param {string} [newVersion]
|
||||
* If provided, the application version is changed to this string
|
||||
* after the AddonManager is shut down, before it is re-started.
|
||||
* @param {Object} params
|
||||
* The new params are in an object and new code should use that.
|
||||
* See promiseStartupManager for param details.
|
||||
*/
|
||||
async promiseRestartManager(newVersion) {
|
||||
async promiseRestartManager(params) {
|
||||
await this.promiseShutdownManager({ clearOverrides: false });
|
||||
await this.promiseStartupManager(newVersion);
|
||||
await this.promiseStartupManager(params);
|
||||
},
|
||||
|
||||
/**
|
||||
* If promiseStartupManager is called with earlyStartup: false, then
|
||||
* use this to notify early startup.
|
||||
*
|
||||
* @returns {Promise} resolves when notification is complete
|
||||
*/
|
||||
notifyEarlyStartup() {
|
||||
return ExtensionTestCommon.notifyEarlyStartup();
|
||||
},
|
||||
|
||||
/**
|
||||
* If promiseStartupManager is called with lateStartup: false, then
|
||||
* use this to notify late startup. You should also call early startup
|
||||
* if necessary.
|
||||
*
|
||||
* @returns {Promise} resolves when notification is complete
|
||||
*/
|
||||
notifyLateStartup() {
|
||||
return ExtensionTestCommon.notifyLateStartup();
|
||||
},
|
||||
|
||||
async loadAddonsList(flush = false) {
|
||||
|
@ -3,10 +3,6 @@
|
||||
/* globals browser */
|
||||
let scopes = AddonManager.SCOPE_PROFILE | AddonManager.SCOPE_APPLICATION;
|
||||
Services.prefs.setIntPref("extensions.enabledScopes", scopes);
|
||||
Services.prefs.setBoolPref(
|
||||
"extensions.webextensions.background-delayed-startup",
|
||||
false
|
||||
);
|
||||
|
||||
AddonTestUtils.createAppInfo(
|
||||
"xpcshell@tests.mozilla.org",
|
||||
|
@ -7,12 +7,6 @@
|
||||
// The test extension uses an insecure update url.
|
||||
Services.prefs.setBoolPref(PREF_EM_CHECK_UPDATE_SECURITY, false);
|
||||
|
||||
// The test simulates restarts, enforce delayed background startup.
|
||||
Services.prefs.setBoolPref(
|
||||
"extensions.webextensions.background-delayed-startup",
|
||||
true
|
||||
);
|
||||
|
||||
if (AppConstants.platform == "win" && AppConstants.DEBUG) {
|
||||
// Shutdown timing is flaky in this test, and remote extensions
|
||||
// sometimes wind up leaving the XPI locked at the point when we try
|
||||
|
@ -3,10 +3,6 @@
|
||||
/* globals browser */
|
||||
let scopes = AddonManager.SCOPE_PROFILE | AddonManager.SCOPE_APPLICATION;
|
||||
Services.prefs.setIntPref("extensions.enabledScopes", scopes);
|
||||
Services.prefs.setBoolPref(
|
||||
"extensions.webextensions.background-delayed-startup",
|
||||
false
|
||||
);
|
||||
|
||||
AddonTestUtils.createAppInfo(
|
||||
"xpcshell@tests.mozilla.org",
|
||||
|
Loading…
x
Reference in New Issue
Block a user