зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1451513 Part 3: Make loading the mochitest extension more robust r=kmag
A couple of changes to ensure that the mochitest harness doesn't try to start executing changes before the mochitest extension is loaded: 1. Fix the marionette driver to wait for an installed extension to be started before returning from Addon:install 2. Wait for extension API onStartup() handlers to finish before considering a webextension started. MozReview-Commit-ID: 8YEdNn6s5qh --HG-- extra : rebase_source : 67e9abadcda82d55ac73c33367ec65cdbf7b823d
This commit is contained in:
Родитель
3493324938
Коммит
ad31645d25
|
@ -23,37 +23,12 @@ const ERRORS = {
|
|||
async function installAddon(file) {
|
||||
let install = await AddonManager.getInstallForFile(file);
|
||||
|
||||
return new Promise(resolve => {
|
||||
if (install.error) {
|
||||
throw new UnknownError(ERRORS[install.error]);
|
||||
}
|
||||
|
||||
let addonId = install.addon.id;
|
||||
|
||||
let success = install => {
|
||||
if (install.addon.id === addonId) {
|
||||
install.removeListener(listener);
|
||||
resolve(install.addon);
|
||||
}
|
||||
};
|
||||
|
||||
let fail = install => {
|
||||
if (install.addon.id === addonId) {
|
||||
install.removeListener(listener);
|
||||
return install.install().catch(err => {
|
||||
throw new UnknownError(ERRORS[install.error]);
|
||||
}
|
||||
};
|
||||
|
||||
let listener = {
|
||||
onDownloadCancelled: fail,
|
||||
onDownloadFailed: fail,
|
||||
onInstallCancelled: fail,
|
||||
onInstallFailed: fail,
|
||||
onInstallEnded: success,
|
||||
};
|
||||
|
||||
install.addListener(listener);
|
||||
install.install();
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -1778,9 +1778,11 @@ class Extension extends ExtensionData {
|
|||
// and it is used to run code that needs to be executed before
|
||||
// any of the "startup" listeners.
|
||||
this.emit("startup", this);
|
||||
Management.emit("startup", this);
|
||||
|
||||
await this.runManifest(this.manifest);
|
||||
await Promise.all([
|
||||
Management.emit("startup", this),
|
||||
this.runManifest(this.manifest),
|
||||
]);
|
||||
|
||||
Management.emit("ready", this);
|
||||
this.emit("ready");
|
||||
|
|
Загрузка…
Ссылка в новой задаче