mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-26 19:55:39 +00:00
4437e84fb7
MozReview-Commit-ID: aRpNSrE483 --HG-- extra : rebase_source : f6a037937350ee7d8f502a9060459a073bd60190
68 lines
1.8 KiB
JavaScript
68 lines
1.8 KiB
JavaScript
"use strict";
|
|
|
|
XPCOMUtils.defineLazyModuleGetter(this, "TelemetryStopwatch",
|
|
"resource://gre/modules/TelemetryStopwatch.jsm");
|
|
|
|
Cu.import("resource://gre/modules/ExtensionParent.jsm");
|
|
var {
|
|
HiddenExtensionPage,
|
|
promiseExtensionViewLoaded,
|
|
} = ExtensionParent;
|
|
|
|
// Responsible for the background_page section of the manifest.
|
|
class BackgroundPage extends HiddenExtensionPage {
|
|
constructor(extension, options) {
|
|
super(extension, "background");
|
|
|
|
this.page = options.page || null;
|
|
this.isGenerated = !!options.scripts;
|
|
|
|
if (this.page) {
|
|
this.url = this.extension.baseURI.resolve(this.page);
|
|
} else if (this.isGenerated) {
|
|
this.url = this.extension.baseURI.resolve("_generated_background_page.html");
|
|
}
|
|
}
|
|
|
|
async build() {
|
|
TelemetryStopwatch.start("WEBEXT_BACKGROUND_PAGE_LOAD_MS", this);
|
|
await this.createBrowserElement();
|
|
this.extension._backgroundPageFrameLoader = this.browser.frameLoader;
|
|
|
|
extensions.emit("extension-browser-inserted", this.browser);
|
|
|
|
this.browser.loadURI(this.url);
|
|
|
|
let context = await promiseExtensionViewLoaded(this.browser);
|
|
TelemetryStopwatch.finish("WEBEXT_BACKGROUND_PAGE_LOAD_MS", this);
|
|
|
|
if (context) {
|
|
// Wait until all event listeners registered by the script so far
|
|
// to be handled.
|
|
await Promise.all(context.listenerPromises);
|
|
context.listenerPromises = null;
|
|
}
|
|
|
|
this.extension.emit("startup");
|
|
}
|
|
|
|
shutdown() {
|
|
this.extension._backgroundPageFrameLoader = null;
|
|
super.shutdown();
|
|
}
|
|
}
|
|
|
|
this.backgroundPage = class extends ExtensionAPI {
|
|
onManifestEntry(entryName) {
|
|
let {manifest} = this.extension;
|
|
|
|
this.bgPage = new BackgroundPage(this.extension, manifest.background);
|
|
|
|
return this.bgPage.build();
|
|
}
|
|
|
|
onShutdown() {
|
|
this.bgPage.shutdown();
|
|
}
|
|
};
|