summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/child/ext-extension.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/extensions/child/ext-extension.js')
-rw-r--r--toolkit/components/extensions/child/ext-extension.js78
1 files changed, 78 insertions, 0 deletions
diff --git a/toolkit/components/extensions/child/ext-extension.js b/toolkit/components/extensions/child/ext-extension.js
new file mode 100644
index 0000000000..f4024086e4
--- /dev/null
+++ b/toolkit/components/extensions/child/ext-extension.js
@@ -0,0 +1,78 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+this.extension = class extends ExtensionAPI {
+ getAPI(context) {
+ let api = {
+ getURL(url) {
+ return context.extension.baseURI.resolve(url);
+ },
+
+ get lastError() {
+ return context.lastError;
+ },
+
+ get inIncognitoContext() {
+ return context.incognito;
+ },
+ };
+
+ if (context.envType === "addon_child") {
+ api.getViews = function (fetchProperties) {
+ let result = Cu.cloneInto([], context.cloneScope);
+
+ for (let view of context.extension.views) {
+ if (!view.active) {
+ continue;
+ }
+ if (!context.principal.subsumes(view.principal)) {
+ continue;
+ }
+
+ if (fetchProperties !== null) {
+ if (
+ fetchProperties.type !== null &&
+ view.viewType != fetchProperties.type
+ ) {
+ continue;
+ }
+
+ if (fetchProperties.windowId !== null) {
+ let bc = view.contentWindow?.docShell?.browserChild;
+ let windowId =
+ view.viewType !== "background"
+ ? bc?.chromeOuterWindowID ?? -1
+ : -1;
+ if (windowId !== fetchProperties.windowId) {
+ continue;
+ }
+ }
+
+ if (
+ fetchProperties.tabId !== null &&
+ view.tabId != fetchProperties.tabId
+ ) {
+ continue;
+ }
+ }
+
+ // Do not include extension popups contexts while their document
+ // is blocked on parsing during its preloading state
+ // (See Bug 1748808).
+ if (context.extension.hasContextBlockedParsingDocument(view)) {
+ continue;
+ }
+
+ result.push(view.contentWindow);
+ }
+
+ return result;
+ };
+ }
+
+ return { extension: api };
+ }
+};