diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
commit | 6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch) | |
tree | a68f146d7fa01f0134297619fbe7e33db084e0aa /toolkit/components/extensions/child/ext-extension.js | |
parent | Initial commit. (diff) | |
download | thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip |
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'toolkit/components/extensions/child/ext-extension.js')
-rw-r--r-- | toolkit/components/extensions/child/ext-extension.js | 78 |
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 }; + } +}; |