зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
5a745c2b72
Коммит
2031c684a0
|
@ -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 =>
|
||||
|
|
Загрузка…
Ссылка в новой задаче