gecko-dev/dom/serviceworkers/ServiceWorkerOpArgs.ipdlh
Andrew Sutherland 6e5b348a26 Bug 1113522 - ExtendableMessageEvent.source should be ServiceWorker-aware. r=dom-worker-reviewers,edenchuang
ServiceWorkers aren't exposed as clients, so when we are sending a postMessage
from them, we need to capture their ServiceWorkerDescriptor and propagate that
instead of the client state.

Differential Revision: https://phabricator.services.mozilla.com/D213721
2024-10-24 03:02:37 +00:00

192 lines
5.0 KiB
Plaintext

/* 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 ClientIPCTypes;
include DOMTypes;
include FetchTypes;
include "mozilla/dom/ServiceWorkerIPCUtils.h";
using mozilla::dom::ServiceWorkerState from "mozilla/dom/ServiceWorkerBinding.h";
using mozilla::TimeStamp from "mozilla/TimeStamp.h";
namespace mozilla {
namespace dom {
/**
* ServiceWorkerOpArgs
*/
struct ServiceWorkerCheckScriptEvaluationOpArgs {};
struct ServiceWorkerUpdateStateOpArgs {
ServiceWorkerState state;
};
struct ServiceWorkerTerminateWorkerOpArgs {
uint32_t shutdownStateId;
};
struct ServiceWorkerLifeCycleEventOpArgs {
nsString eventName;
};
// Possibly need to differentiate an empty array from the absence of an array.
union OptionalPushData {
void_t;
uint8_t[];
};
struct ServiceWorkerPushEventOpArgs {
nsString messageId;
OptionalPushData data;
};
struct ServiceWorkerPushSubscriptionChangeEventOpArgs {};
struct ServiceWorkerNotificationEventOpArgs {
nsString eventName;
nsString id;
nsString title;
nsString dir;
nsString lang;
nsString body;
nsString tag;
nsString icon;
nsString data;
nsString behavior;
nsString scope;
uint32_t disableOpenClickDelay;
};
struct ServiceWorkerExtensionAPIEventOpArgs {
// WebExtensions API namespace and event names, for a list of the API namespaces
// and related API event names refer to the API JSONSchema files in-tree:
//
// https://searchfox.org/mozilla-central/search?q=&path=extensions%2Fschemas%2F*.json
nsString apiNamespace;
nsString apiEventName;
};
struct ServiceWorkerMessageEventOpArgs {
PostMessageSource source;
ClonedOrErrorMessageData clonedData;
};
struct ServiceWorkerFetchEventOpArgsCommon {
nsCString workerScriptSpec;
IPCInternalRequest internalRequest;
nsString clientId;
nsString resultingClientId;
bool isNonSubresourceRequest;
// Is navigation preload enabled for this fetch? If true, if some
// preloadResponse was not already provided in this structure, then it's
// expected that a PreloadResponse message will eventually be sent.
bool preloadNavigation;
// Failure injection helper; non-NS_OK values indicate that the event, instead
// of dispatching should instead return a `CancelInterceptionArgs` response
// with this nsresult. This value originates from
// `nsIServiceWorkerInfo::testingInjectCancellation`.
nsresult testingInjectCancellation;
};
struct ParentToParentServiceWorkerFetchEventOpArgs {
ServiceWorkerFetchEventOpArgsCommon common;
ParentToParentInternalResponse? preloadResponse;
ResponseTiming? preloadResponseTiming;
ResponseEndArgs? preloadResponseEndArgs;
};
struct ParentToChildServiceWorkerFetchEventOpArgs {
ServiceWorkerFetchEventOpArgsCommon common;
ParentToChildInternalResponse? preloadResponse;
ResponseTiming? preloadResponseTiming;
ResponseEndArgs? preloadResponseEndArgs;
};
union ServiceWorkerOpArgs {
ServiceWorkerCheckScriptEvaluationOpArgs;
ServiceWorkerUpdateStateOpArgs;
ServiceWorkerTerminateWorkerOpArgs;
ServiceWorkerLifeCycleEventOpArgs;
ServiceWorkerPushEventOpArgs;
ServiceWorkerPushSubscriptionChangeEventOpArgs;
ServiceWorkerNotificationEventOpArgs;
ServiceWorkerMessageEventOpArgs;
ServiceWorkerExtensionAPIEventOpArgs;
ParentToChildServiceWorkerFetchEventOpArgs;
};
/**
* IPCFetchEventRespondWithResult
*/
struct FetchEventRespondWithClosure {
nsCString respondWithScriptSpec;
uint32_t respondWithLineNumber;
uint32_t respondWithColumnNumber;
};
struct FetchEventTimeStamps {
TimeStamp fetchHandlerStart;
TimeStamp fetchHandlerFinish;
};
struct ChildToParentSynthesizeResponseArgs {
ChildToParentInternalResponse internalResponse;
FetchEventRespondWithClosure closure;
FetchEventTimeStamps timeStamps;
};
struct ParentToParentSynthesizeResponseArgs {
ParentToParentInternalResponse internalResponse;
FetchEventRespondWithClosure closure;
FetchEventTimeStamps timeStamps;
};
struct ResetInterceptionArgs {
FetchEventTimeStamps timeStamps;
};
struct CancelInterceptionArgs {
nsresult status;
FetchEventTimeStamps timeStamps;
};
union ChildToParentFetchEventRespondWithResult {
ChildToParentSynthesizeResponseArgs;
ResetInterceptionArgs;
CancelInterceptionArgs;
};
union ParentToParentFetchEventRespondWithResult {
ParentToParentSynthesizeResponseArgs;
ResetInterceptionArgs;
CancelInterceptionArgs;
};
/**
* ServiceWorkerOpResult
*/
struct ServiceWorkerCheckScriptEvaluationOpResult {
bool workerScriptExecutedSuccessfully;
bool fetchHandlerWasAdded;
};
struct ServiceWorkerFetchEventOpResult {
nsresult rv;
};
struct ServiceWorkerExtensionAPIEventOpResult {
bool extensionAPIEventListenerWasAdded;
};
union ServiceWorkerOpResult {
nsresult;
ServiceWorkerCheckScriptEvaluationOpResult;
ServiceWorkerFetchEventOpResult;
ServiceWorkerExtensionAPIEventOpResult;
};
} // namespace dom
} // namespace mozilla