mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-06 03:09:18 +02:00
57 lines
2.1 KiB
JavaScript
57 lines
2.1 KiB
JavaScript
/* 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/. */
|
|
|
|
function isExtensionContext(browsingContext) {
|
|
let principal;
|
|
if (CanonicalBrowsingContext.isInstance(browsingContext)) {
|
|
principal = browsingContext.currentWindowGlobal.documentPrincipal;
|
|
} else {
|
|
principal = browsingContext.window.document.nodePrincipal;
|
|
}
|
|
|
|
// In practice, note that the principal will never be an expanded principal.
|
|
// The are only used for content scripts executed in a Sandbox, and do not
|
|
// have a browsing context on their own.
|
|
// But we still use this flag because there is no isAddonPrincipal flag.
|
|
return principal.isAddonOrExpandedAddonPrincipal;
|
|
}
|
|
|
|
function isParentProcess(browsingContext) {
|
|
if (CanonicalBrowsingContext.isInstance(browsingContext)) {
|
|
return browsingContext.currentWindowGlobal.osPid === -1;
|
|
}
|
|
|
|
// If `browsingContext` is not a `CanonicalBrowsingContext`, then we are
|
|
// necessarily in a content process page.
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Check if the given browsing context is valid for the message handler
|
|
* to use.
|
|
*
|
|
* @param {BrowsingContext} browsingContext
|
|
* The browsing context to check.
|
|
* @param {object=} options
|
|
* @param {string=} options.browserId
|
|
* The id of the browser to filter the browsing contexts by (optional).
|
|
* @returns {boolean}
|
|
* True if the browsing context is valid, false otherwise.
|
|
*/
|
|
export function isBrowsingContextCompatible(browsingContext, options = {}) {
|
|
const { browserId } = options;
|
|
|
|
// If a browserId was provided, skip browsing contexts which are not
|
|
// associated with this browserId.
|
|
if (browserId !== undefined && browsingContext.browserId !== browserId) {
|
|
return false;
|
|
}
|
|
|
|
// Skip:
|
|
// - extension contexts until we support debugging webextensions, see Bug 1755014.
|
|
// - privileged contexts until we support debugging Chrome context, see Bug 1713440.
|
|
return (
|
|
!isExtensionContext(browsingContext) && !isParentProcess(browsingContext)
|
|
);
|
|
}
|