in src/extension-runners/firefox-desktop.js [182:263]
async startFirefoxInstance() {
const {
browserConsole,
devtools,
extensions,
firefoxBinary,
preInstall,
startUrl,
firefoxApp,
firefoxClient,
args,
} = this.params;
const binaryArgs = [];
if (browserConsole) {
binaryArgs.push('-jsconsole');
}
if (startUrl) {
const urls = Array.isArray(startUrl) ? startUrl : [startUrl];
for (const url of urls) {
binaryArgs.push('--url', url);
}
}
if (args) {
binaryArgs.push(...args);
}
this.runningInfo = await firefoxApp.run(this.profile, {
firefoxBinary,
binaryArgs,
extensions,
devtools,
});
this.runningInfo.firefox.on('close', () => {
for (const cleanupCb of this.cleanupCallbacks) {
try {
cleanupCb();
} catch (error) {
log.error(`Exception on executing cleanup callback: ${error}`);
}
}
});
if (!preInstall) {
const remoteFirefox = (this.remoteFirefox = await firefoxClient({
port: this.runningInfo.debuggerPort,
}));
// Install all the temporary addons.
for (const extension of extensions) {
try {
const addonId = await remoteFirefox
.installTemporaryAddon(extension.sourceDir, devtools)
.then((installResult) => {
return installResult.addon.id;
});
if (!addonId) {
throw new WebExtError(
'Unexpected missing addonId in the installAsTemporaryAddon result',
);
}
this.reloadableExtensions.set(extension.sourceDir, addonId);
} catch (error) {
if (error instanceof RemoteTempInstallNotSupported) {
log.debug(`Caught: ${String(error)}`);
throw new WebExtError(
'Temporary add-on installation is not supported in this version' +
' of Firefox (you need Firefox 49 or higher). For older Firefox' +
' versions, use --pre-install',
);
} else {
throw error;
}
}
}
}
}