Bug 1567341 - Wait for the AddonManager to start up in GeckoViewWebExtension. r=esawin

Differential Revision: https://phabricator.services.mozilla.com/D106205
This commit is contained in:
Agi Sferro 2021-03-24 20:19:58 +00:00
Родитель 5a745c2b72
Коммит 2031c684a0
1 изменённых файлов: 22 добавлений и 0 удалений

Просмотреть файл

@ -48,6 +48,25 @@ XPCOMUtils.defineLazyServiceGetter(
const { debug, warn } = GeckoViewUtils.initLogging("Console");
// Allows to |await| for AddonManager to startup
// mostly useful in tests that run super-early when AddonManager is not
// available yet.
XPCOMUtils.defineLazyGetter(this, "gAddonManagerStartup", function() {
if (AddonManager.isReady) {
// Already started up, nothing to do
return true;
}
// Wait until AddonManager is ready to accept calls
return new Promise(resolve => {
AddonManager.addManagerListener({
onStartup() {
resolve(true);
},
});
});
});
const DOWNLOAD_CHANGED_MESSAGE = "GeckoView:WebExtension:DownloadChanged";
var DownloadTracker = new (class extends EventEmitter {
@ -635,6 +654,7 @@ var GeckoViewWebExtension = {
},
async ensureBuiltIn(aUri, aId) {
await gAddonManagerStartup;
const extensionData = new ExtensionData(aUri);
const [manifest, extension] = await Promise.all([
extensionData.loadManifest(),
@ -654,6 +674,7 @@ var GeckoViewWebExtension = {
},
async installBuiltIn(aUri) {
await gAddonManagerStartup;
const addon = await AddonManager.installBuiltinAddon(aUri.spec);
const exported = await exportExtension(addon, addon.userPermissions, aUri);
return { extension: exported };
@ -1028,6 +1049,7 @@ var GeckoViewWebExtension = {
case "GeckoView:WebExtension:List": {
try {
await gAddonManagerStartup;
const addons = await AddonManager.getAddonsByTypes(["extension"]);
const extensions = await Promise.all(
addons.map(addon =>