diff options
Diffstat (limited to '')
-rw-r--r-- | dom/ipc/PWindowGlobal.ipdl | 227 |
1 files changed, 227 insertions, 0 deletions
diff --git a/dom/ipc/PWindowGlobal.ipdl b/dom/ipc/PWindowGlobal.ipdl new file mode 100644 index 0000000000..a063852f56 --- /dev/null +++ b/dom/ipc/PWindowGlobal.ipdl @@ -0,0 +1,227 @@ +/* -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 8 -*- */ +/* vim: set sw=2 ts=8 et tw=80 ft=cpp : */ +/* 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/. */ + +include "mozilla/dom/DocShellMessageUtils.h"; +include "mozilla/dom/FeaturePolicyUtils.h"; +include "mozilla/dom/IdentityCredentialSerializationHelpers.h"; +include "mozilla/dom/PermissionMessageUtils.h"; +include "mozilla/dom/SessionStoreMessageUtils.h"; +include "mozilla/ipc/TransportSecurityInfoUtils.h"; +include "mozilla/ipc/URIUtils.h"; + +include protocol PBrowser; +include protocol PInProcess; +include protocol PBrowserBridge; + +include DOMTypes; +include ClientIPCTypes; +include IPCIdentityCredential; +include NeckoChannelParams; +include SessionStoreTypes; + +include "mozilla/layers/LayersMessageUtils.h"; + +using mozilla::dom::JSActorMessageKind from "mozilla/dom/JSActor.h"; +using mozilla::gfx::IntRect from "mozilla/gfx/Rect.h"; +[MoveOnly] using mozilla::gfx::PaintFragment from "mozilla/gfx/CrossProcessPaint.h"; +using nscolor from "nsColor.h"; +using mozilla::dom::XPCOMPermitUnloadAction from "nsIDocumentViewer.h"; +using mozilla::dom::TabId from "mozilla/dom/ipc/IdType.h"; +using mozilla::layers::LayersId from "mozilla/layers/LayersTypes.h"; +[RefCounted] using class nsITransportSecurityInfo from "nsITransportSecurityInfo.h"; +using mozilla::UseCounters from "mozilla/UseCounter.h"; +using mozilla::dom::MaybeDiscardedWindowContext from "mozilla/dom/WindowContext.h"; +[RefCounted] using mozilla::dom::FeaturePolicy from "mozilla/dom/FeaturePolicy.h"; +[RefCounted] using mozilla::dom::SessionStoreRestoreData from "mozilla/dom/SessionStoreRestoreData.h"; +using mozilla::dom::IdentityCredentialRequestOptions from "mozilla/dom/IdentityCredentialBinding.h"; + +namespace mozilla { +namespace dom { + +struct JSActorMessageMeta { + nsCString actorName; + nsString messageName; + uint64_t queryId; + JSActorMessageKind kind; +}; + +struct IPCWebShareData +{ + nsCString title; + nsCString text; + nullable nsIURI url; +}; + +/** + * A PWindowGlobal actor has a lifetime matching that of a single Window Global, + * specifically a |nsGlobalWindowInner|. These actors will form a parent/child + * link either between the chrome/content process, or will be in-process, for + * documents which are loaded in the chrome process. + */ +async protocol PWindowGlobal +{ + manager PBrowser or PInProcess; + +child: + async __delete__(); + + async MakeFrameLocal(MaybeDiscardedBrowsingContext aFrameContext, + uint64_t aSwitchId); + async MakeFrameRemote(MaybeDiscardedBrowsingContext aFrameContext, + ManagedEndpoint<PBrowserBridgeChild> aEndpoint, + TabId aTabId, LayersId aLayersId) returns (bool success); + + async DrawSnapshot(IntRect? aRect, float aScale, nscolor aBackgroundColor, + uint32_t aFlags) returns (PaintFragment retval); + + async DispatchSecurityPolicyViolation(nsString aViolationEventJSON); + + async SaveStorageAccessPermissionGranted(); + + async AddBlockedFrameNodeByClassifier(MaybeDiscardedBrowsingContext aNode); + + /** + * Request from UI to reset the scaling zoom that is controlled by APZ. + */ + async ResetScalingZoom(); + + async SetContainerFeaturePolicy(nullable FeaturePolicy aContainerFeaturePolicy); + + async RestoreDocShellState(DocShellRestoreState aState) + returns (bool success); + + async RestoreTabContent(nullable SessionStoreRestoreData aData) returns (bool success); + +both: + async RawMessage(JSActorMessageMeta aMetadata, ClonedMessageData? aData, + ClonedMessageData? aStack); + +parent: + // Load the given URI load state into the current owner process of the given + // BrowsingContext. aTargetBC must be in the same BrowsingContextGroup as this + // window global. + async LoadURI(MaybeDiscardedBrowsingContext aTargetBC, + nsDocShellLoadState aLoadState, bool aSetNavigating); + + async InternalLoad(nsDocShellLoadState aLoadState); + + /// Update the URI of the document in this WindowGlobal. + [LazySend] async UpdateDocumentURI(nsIURI aUri); + + // We expose frameAncestors to web-extensions and they extract URIs from the + // principals collected. In order to be compatible with that API, we need to + // update the document's principal. This is only allowed if the principals are + // `equals` to each other. + [LazySend] async UpdateDocumentPrincipal(nullable nsIPrincipal aPrincipal, + nullable nsIPrincipal aStoragePrincipal); + + // Update document's `documentHasLoaded` bit in this WindowGlobal. + [LazySend] async UpdateDocumentHasLoaded(bool aDocumentHasLoaded); + + // Update document's 'documentHasUserInteracted' bit in this WindowGlobal. + [LazySend] async UpdateDocumentHasUserInteracted(bool aDocumentHasUserInteracted); + + // Update document's sandbox flags in this WindowGlobal. + [LazySend] async UpdateSandboxFlags(uint32_t aSandboxFlags); + + // Update document csp's fields in this WindowGlobal. + [LazySend] async UpdateDocumentCspSettings(bool aBlockAllMixedContent, bool aUpgradeInsecureRequests); + + // Update document's cookie settings in this WindowGlobal. + [LazySend] async UpdateCookieJarSettings(CookieJarSettingsArgs cookieJarSettings); + + // Update the title of the document in this WindowGlobal. + [LazySend] async UpdateDocumentTitle(nsString aTitle); + + [LazySend] async UpdateDocumentSecurityInfo(nullable nsITransportSecurityInfo aSecurityInfo); + + // Update the document's HTTPS-Only Mode flags in this WindowGlobal. + [LazySend] async UpdateHttpsOnlyStatus(uint32_t aHttpsOnlyStatus); + + /// Send down initial document bit to the parent. + [LazySend] async SetIsInitialDocument(bool aIsInitialDocument); + + // Attempts to perform a "Web Share". + async Share(IPCWebShareData aData) returns (nsresult rv); + + // Get content blocking events from the parent process. + async GetContentBlockingEvents() returns (uint32_t events); + + // Send the ClientInfo associated with a top-level document load. + [LazySend] async SetClientInfo(IPCClientInfo aClientInfo); + + // Checks whether any "beforeunload" event listener in the document subtree + // wants to block unload, and prompts the user to allow if any does (depending + // on the action specified, using nsIDocumentViewer::PermitUnloadAction + // values). The sender is responsible for checking documents in its own + // process, and passing true for `aHasInProcessBlocker` if any exist. Windows + // hosted outside of the caller process will be checked automatically. + async CheckPermitUnload(bool aHasInProcessBlocker, XPCOMPermitUnloadAction aAction) + returns (bool permitUnload); + + /** + * Informs the parent process that the document in aTop should expect to + * receive page use counter contributions from the document in this + * WindowGlobal. + */ + async ExpectPageUseCounters(MaybeDiscardedWindowContext aTop); + + /** + * Accumulates use counter data from the document in this WindowGlobal into + * the document previously passed into the ExpectPageUseCounters call. + */ + async AccumulatePageUseCounters(UseCounters aUseCounters); + + async RequestRestoreTabContent(); + + // Add the flags in aOnFlags to the current BFCache status and remove the + // flags in aOffFlags from the current BFCache status. See the BFCacheStatus + // enum for the valid flags. + async UpdateBFCacheStatus(uint32_t aOnFlags, uint32_t aOffFlags); + + // Signal whether the first connection is added (aIsAdded = true) or + // the last connection is removed (aIsAdded = false). + async UpdateActivePeerConnectionStatus(bool aIsAdded); + + /** + * Used to notify the parent when there's a change in the number of requests + * in the loadgroup. If there are no requests this will be set to Nothing(). + * If there is one request this will be set to the ID of that request, if it + * implements nsIIdentChannel. If there are more than one requests this will + * be set to 0. + * Note that some requests are ignored (eg. favicon loads). + */ + async SetSingleChannelId(uint64_t? singleChannelId); + + async SetDocumentDomain(nsIURI aDomain); + + async Destroy(); + + async ReloadWithHttpsOnlyException(); + + // Used by the Credential Manager API and FedCM to keep the discovery of + // a credential abstracted from the content process. This is required because + // credentialed requests that are specifically not partitioned are made and + // the results must not enter the child process until the user consents via + // purpose built UI. + async DiscoverIdentityCredentialFromExternalSource(IdentityCredentialRequestOptions aOptions) + returns (IPCIdentityCredential? identityCredential); + + async GetStorageAccessPermission() returns(uint32_t permission_action); + + + async SetCookies(nsCString baseDomain, + OriginAttributes attrs, + nullable nsIURI host, + bool fromHttp, + CookieStruct[] cookies); + +child: + async NotifyPermissionChange(nsCString type, uint32_t permission); +}; + +} // namespace dom +} // namespace mozilla |