summaryrefslogtreecommitdiffstats
path: root/toolkit/components/webextensions/ext-c-backgroundPage.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/webextensions/ext-c-backgroundPage.js')
-rw-r--r--toolkit/components/webextensions/ext-c-backgroundPage.js45
1 files changed, 45 insertions, 0 deletions
diff --git a/toolkit/components/webextensions/ext-c-backgroundPage.js b/toolkit/components/webextensions/ext-c-backgroundPage.js
new file mode 100644
index 000000000..ca446ce79
--- /dev/null
+++ b/toolkit/components/webextensions/ext-c-backgroundPage.js
@@ -0,0 +1,45 @@
+"use strict";
+
+global.initializeBackgroundPage = (contentWindow) => {
+ // Override the `alert()` method inside background windows;
+ // we alias it to console.log().
+ // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1203394
+ let alertDisplayedWarning = false;
+ let alertOverwrite = text => {
+ if (!alertDisplayedWarning) {
+ require("devtools/client/framework/devtools-browser");
+
+ let {HUDService} = require("devtools/client/webconsole/hudservice");
+ HUDService.openBrowserConsoleOrFocus();
+
+ contentWindow.console.warn("alert() is not supported in background windows; please use console.log instead.");
+
+ alertDisplayedWarning = true;
+ }
+
+ contentWindow.console.log(text);
+ };
+ Cu.exportFunction(alertOverwrite, contentWindow, {defineAs: "alert"});
+};
+
+extensions.registerSchemaAPI("extension", "addon_child", context => {
+ function getBackgroundPage() {
+ for (let view of context.extension.views) {
+ if (view.viewType == "background" && context.principal.subsumes(view.principal)) {
+ return view.contentWindow;
+ }
+ }
+ return null;
+ }
+ return {
+ extension: {
+ getBackgroundPage,
+ },
+
+ runtime: {
+ getBackgroundPage() {
+ return context.cloneScope.Promise.resolve(getBackgroundPage());
+ },
+ },
+ };
+});