Current section
Files
Jump to
Current section
Files
priv/cddl/remote.cddl
Command = {
id: js-uint,
CommandData,
Extensible,
}
CommandData = (
BrowserCommand //
BrowsingContextCommand //
EmulationCommand //
InputCommand //
NetworkCommand //
ScriptCommand //
SessionCommand //
StorageCommand //
WebExtensionCommand
)
EmptyParams = {
Extensible
}
Extensible = (*text => any)
js-int = -9007199254740991..9007199254740991
js-uint = 0..9007199254740991
SessionCommand = (
session.End //
session.New //
session.Status //
session.Subscribe //
session.Unsubscribe
)
session.CapabilitiesRequest = {
? alwaysMatch: session.CapabilityRequest,
? firstMatch: [*session.CapabilityRequest]
}
session.CapabilityRequest = {
? acceptInsecureCerts: bool,
? browserName: text,
? browserVersion: text,
? platformName: text,
? proxy: session.ProxyConfiguration,
? unhandledPromptBehavior: session.UserPromptHandler,
Extensible
}
session.ProxyConfiguration = {
session.AutodetectProxyConfiguration //
session.DirectProxyConfiguration //
session.ManualProxyConfiguration //
session.PacProxyConfiguration //
session.SystemProxyConfiguration
}
session.AutodetectProxyConfiguration = (
proxyType: "autodetect",
Extensible
)
session.DirectProxyConfiguration = (
proxyType: "direct",
Extensible
)
session.ManualProxyConfiguration = (
proxyType: "manual",
? httpProxy: text,
? sslProxy: text,
? session.SocksProxyConfiguration,
? noProxy: [*text],
Extensible
)
session.SocksProxyConfiguration = (
socksProxy: text,
socksVersion: 0..255,
)
session.PacProxyConfiguration = (
proxyType: "pac",
proxyAutoconfigUrl: text,
Extensible
)
session.SystemProxyConfiguration = (
proxyType: "system",
Extensible
)
session.UserPromptHandler = {
? alert: session.UserPromptHandlerType,
? beforeUnload: session.UserPromptHandlerType,
? confirm: session.UserPromptHandlerType,
? default: session.UserPromptHandlerType,
? file: session.UserPromptHandlerType,
? prompt: session.UserPromptHandlerType,
}
session.UserPromptHandlerType = "accept" / "dismiss" / "ignore";
session.Subscription = text
session.SubscribeParameters = {
events: [+text],
? contexts: [+browsingContext.BrowsingContext],
? userContexts: [+browser.UserContext],
}
session.UnsubscribeByIDRequest = {
subscriptions: [+session.Subscription],
}
session.UnsubscribeByAttributesRequest = {
events: [+text],
}
session.Status = (
method: "session.status",
params: EmptyParams,
)
session.New = (
method: "session.new",
params: session.NewParameters
)
session.NewParameters = {
capabilities: session.CapabilitiesRequest
}
session.End = (
method: "session.end",
params: EmptyParams
)
session.Subscribe = (
method: "session.subscribe",
params: session.SubscribeParameters
)
session.Unsubscribe = (
method: "session.unsubscribe",
params: session.UnsubscribeParameters,
)
session.UnsubscribeParameters = session.UnsubscribeByAttributesRequest / session.UnsubscribeByIDRequest
BrowserCommand = (
browser.Close //
browser.CreateUserContext //
browser.GetClientWindows //
browser.GetUserContexts //
browser.RemoveUserContext //
browser.SetClientWindowState //
browser.SetDownloadBehavior
)
browser.ClientWindow = text;
browser.ClientWindowInfo = {
active: bool,
clientWindow: browser.ClientWindow,
height: js-uint,
state: "fullscreen" / "maximized" / "minimized" / "normal",
width: js-uint,
x: js-int,
y: js-int,
}
browser.UserContext = text;
browser.UserContextInfo = {
userContext: browser.UserContext
}
browser.Close = (
method: "browser.close",
params: EmptyParams,
)
browser.CreateUserContext = (
method: "browser.createUserContext",
params: browser.CreateUserContextParameters,
)
browser.CreateUserContextParameters = {
? acceptInsecureCerts: bool,
? proxy: session.ProxyConfiguration,
? unhandledPromptBehavior: session.UserPromptHandler
}
browser.GetClientWindows = (
method: "browser.getClientWindows",
params: EmptyParams,
)
browser.GetUserContexts = (
method: "browser.getUserContexts",
params: EmptyParams,
)
browser.RemoveUserContext = (
method: "browser.removeUserContext",
params: browser.RemoveUserContextParameters
)
browser.RemoveUserContextParameters = {
userContext: browser.UserContext
}
browser.SetClientWindowState = (
method: "browser.setClientWindowState",
params: browser.SetClientWindowStateParameters
)
browser.SetClientWindowStateParameters = {
clientWindow: browser.ClientWindow,
(browser.ClientWindowNamedState // browser.ClientWindowRectState)
}
browser.ClientWindowNamedState = (
state: "fullscreen" / "maximized" / "minimized"
)
browser.ClientWindowRectState = (
state: "normal",
? width: js-uint,
? height: js-uint,
? x: js-int,
? y: js-int,
)
browser.SetDownloadBehavior = (
method: "browser.setDownloadBehavior",
params: browser.SetDownloadBehaviorParameters
)
browser.SetDownloadBehaviorParameters = {
downloadBehavior: browser.DownloadBehavior / null,
? userContexts: [+browser.UserContext]
}
browser.DownloadBehavior = {
(
browser.DownloadBehaviorAllowed //
browser.DownloadBehaviorDenied
)
}
browser.DownloadBehaviorAllowed = (
type: "allowed",
destinationFolder: text
)
browser.DownloadBehaviorDenied = (
type: "denied"
)
BrowsingContextCommand = (
browsingContext.Activate //
browsingContext.CaptureScreenshot //
browsingContext.Close //
browsingContext.Create //
browsingContext.GetTree //
browsingContext.HandleUserPrompt //
browsingContext.LocateNodes //
browsingContext.Navigate //
browsingContext.Print //
browsingContext.Reload //
browsingContext.SetViewport //
browsingContext.TraverseHistory
)
browsingContext.BrowsingContext = text;
browsingContext.Locator = (
browsingContext.AccessibilityLocator /
browsingContext.CssLocator /
browsingContext.ContextLocator /
browsingContext.InnerTextLocator /
browsingContext.XPathLocator
)
browsingContext.AccessibilityLocator = {
type: "accessibility",
value: {
? name: text,
? role: text,
}
}
browsingContext.CssLocator = {
type: "css",
value: text
}
browsingContext.ContextLocator = {
type: "context",
value: {
context: browsingContext.BrowsingContext,
}
}
browsingContext.InnerTextLocator = {
type: "innerText",
value: text,
? ignoreCase: bool
? matchType: "full" / "partial",
? maxDepth: js-uint,
}
browsingContext.XPathLocator = {
type: "xpath",
value: text
}
browsingContext.Navigation = text;
browsingContext.ReadinessState = "none" / "interactive" / "complete"
browsingContext.UserPromptType = "alert" / "beforeunload" / "confirm" / "prompt";
browsingContext.Activate = (
method: "browsingContext.activate",
params: browsingContext.ActivateParameters
)
browsingContext.ActivateParameters = {
context: browsingContext.BrowsingContext
}
browsingContext.CaptureScreenshot = (
method: "browsingContext.captureScreenshot",
params: browsingContext.CaptureScreenshotParameters
)
browsingContext.CaptureScreenshotParameters = {
context: browsingContext.BrowsingContext,
? origin: ("viewport" / "document") .default "viewport",
? format: browsingContext.ImageFormat,
? clip: browsingContext.ClipRectangle,
}
browsingContext.ImageFormat = {
type: text,
? quality: 0.0..1.0,
}
browsingContext.ClipRectangle = (
browsingContext.BoxClipRectangle /
browsingContext.ElementClipRectangle
)
browsingContext.ElementClipRectangle = {
type: "element",
element: script.SharedReference
}
browsingContext.BoxClipRectangle = {
type: "box",
x: float,
y: float,
width: float,
height: float
}
browsingContext.Close = (
method: "browsingContext.close",
params: browsingContext.CloseParameters
)
browsingContext.CloseParameters = {
context: browsingContext.BrowsingContext,
? promptUnload: bool .default false
}
browsingContext.Create = (
method: "browsingContext.create",
params: browsingContext.CreateParameters
)
browsingContext.CreateType = "tab" / "window"
browsingContext.CreateParameters = {
type: browsingContext.CreateType,
? referenceContext: browsingContext.BrowsingContext,
? background: bool .default false,
? userContext: browser.UserContext
}
browsingContext.GetTree = (
method: "browsingContext.getTree",
params: browsingContext.GetTreeParameters
)
browsingContext.GetTreeParameters = {
? maxDepth: js-uint,
? root: browsingContext.BrowsingContext,
}
browsingContext.HandleUserPrompt = (
method: "browsingContext.handleUserPrompt",
params: browsingContext.HandleUserPromptParameters
)
browsingContext.HandleUserPromptParameters = {
context: browsingContext.BrowsingContext,
? accept: bool,
? userText: text,
}
browsingContext.LocateNodes = (
method: "browsingContext.locateNodes",
params: browsingContext.LocateNodesParameters
)
browsingContext.LocateNodesParameters = {
context: browsingContext.BrowsingContext,
locator: browsingContext.Locator,
? maxNodeCount: (js-uint .ge 1),
? serializationOptions: script.SerializationOptions,
? startNodes: [ + script.SharedReference ]
}
browsingContext.Navigate = (
method: "browsingContext.navigate",
params: browsingContext.NavigateParameters
)
browsingContext.NavigateParameters = {
context: browsingContext.BrowsingContext,
url: text,
? wait: browsingContext.ReadinessState,
}
browsingContext.Print = (
method: "browsingContext.print",
params: browsingContext.PrintParameters
)
browsingContext.PrintParameters = {
context: browsingContext.BrowsingContext,
? background: bool .default false,
? margin: browsingContext.PrintMarginParameters,
? orientation: ("portrait" / "landscape") .default "portrait",
? page: browsingContext.PrintPageParameters,
? pageRanges: [*(js-uint / text)],
? scale: (0.1..2.0) .default 1.0,
? shrinkToFit: bool .default true,
}
browsingContext.PrintMarginParameters = {
? bottom: (float .ge 0.0) .default 1.0,
? left: (float .ge 0.0) .default 1.0,
? right: (float .ge 0.0) .default 1.0,
? top: (float .ge 0.0) .default 1.0,
}
; Minimum size is 1pt x 1pt. Conversion follows from
; https://www.w3.org/TR/css3-values/#absolute-lengths
browsingContext.PrintPageParameters = {
? height: (float .ge 0.0352) .default 27.94,
? width: (float .ge 0.0352) .default 21.59,
}
browsingContext.Reload = (
method: "browsingContext.reload",
params: browsingContext.ReloadParameters
)
browsingContext.ReloadParameters = {
context: browsingContext.BrowsingContext,
? ignoreCache: bool,
? wait: browsingContext.ReadinessState,
}
browsingContext.SetViewport = (
method: "browsingContext.setViewport",
params: browsingContext.SetViewportParameters
)
browsingContext.SetViewportParameters = {
? context: browsingContext.BrowsingContext,
? viewport: browsingContext.Viewport / null,
? devicePixelRatio: (float .gt 0.0) / null,
? userContexts: [+browser.UserContext],
}
browsingContext.Viewport = {
width: js-uint,
height: js-uint,
}
browsingContext.TraverseHistory = (
method: "browsingContext.traverseHistory",
params: browsingContext.TraverseHistoryParameters
)
browsingContext.TraverseHistoryParameters = {
context: browsingContext.BrowsingContext,
delta: js-int,
}
EmulationCommand = (
emulation.SetForcedColorsModeThemeOverride //
emulation.SetGeolocationOverride //
emulation.SetLocaleOverride //
emulation.SetNetworkConditions //
emulation.SetScreenOrientationOverride //
emulation.SetScreenSettingsOverride //
emulation.SetScriptingEnabled //
emulation.SetScrollbarTypeOverride //
emulation.SetTimezoneOverride //
emulation.SetTouchOverride //
emulation.SetUserAgentOverride
)
emulation.SetForcedColorsModeThemeOverride = (
method: "emulation.setForcedColorsModeThemeOverride",
params: emulation.SetForcedColorsModeThemeOverrideParameters
)
emulation.SetForcedColorsModeThemeOverrideParameters = {
theme: emulation.ForcedColorsModeTheme / null,
? contexts: [+browsingContext.BrowsingContext],
? userContexts: [+browser.UserContext],
}
emulation.ForcedColorsModeTheme = "light" / "dark"
emulation.SetGeolocationOverride = (
method: "emulation.setGeolocationOverride",
params: emulation.SetGeolocationOverrideParameters
)
emulation.SetGeolocationOverrideParameters = {
(
(coordinates: emulation.GeolocationCoordinates / null) //
(error: emulation.GeolocationPositionError)
),
? contexts: [+browsingContext.BrowsingContext],
? userContexts: [+browser.UserContext],
}
emulation.GeolocationCoordinates = {
latitude: -90.0..90.0,
longitude: -180.0..180.0,
? accuracy: (float .ge 0.0) .default 1.0,
? altitude: float / null .default null,
? altitudeAccuracy: (float .ge 0.0) / null .default null,
? heading: (0.0...360.0) / null .default null,
? speed: (float .ge 0.0) / null .default null,
}
emulation.GeolocationPositionError = {
type: "positionUnavailable"
}
emulation.SetLocaleOverride = (
method: "emulation.setLocaleOverride",
params: emulation.SetLocaleOverrideParameters
)
emulation.SetLocaleOverrideParameters = {
locale: text / null,
? contexts: [+browsingContext.BrowsingContext],
? userContexts: [+browser.UserContext],
}
emulation.SetNetworkConditions = (
method: "emulation.setNetworkConditions",
params: emulation.SetNetworkConditionsParameters
)
emulation.SetNetworkConditionsParameters = {
networkConditions: emulation.NetworkConditions / null,
? contexts: [+browsingContext.BrowsingContext],
? userContexts: [+browser.UserContext],
}
emulation.NetworkConditions = emulation.NetworkConditionsOffline
emulation.NetworkConditionsOffline = {
type: "offline"
}
emulation.SetScreenSettingsOverride = (
method: "emulation.setScreenSettingsOverride",
params: emulation.SetScreenSettingsOverrideParameters
)
emulation.ScreenArea = {
width: js-uint,
height: js-uint
}
emulation.SetScreenSettingsOverrideParameters = {
screenArea: emulation.ScreenArea / null,
? contexts: [+browsingContext.BrowsingContext],
? userContexts: [+browser.UserContext],
}
emulation.SetScreenOrientationOverride = (
method: "emulation.setScreenOrientationOverride",
params: emulation.SetScreenOrientationOverrideParameters
)
emulation.ScreenOrientationNatural = "portrait" / "landscape"
emulation.ScreenOrientationType = "portrait-primary" / "portrait-secondary" / "landscape-primary" / "landscape-secondary"
emulation.ScreenOrientation = {
natural: emulation.ScreenOrientationNatural,
type: emulation.ScreenOrientationType
}
emulation.SetScreenOrientationOverrideParameters = {
screenOrientation: emulation.ScreenOrientation / null,
? contexts: [+browsingContext.BrowsingContext],
? userContexts: [+browser.UserContext],
}
emulation.SetUserAgentOverride = (
method: "emulation.setUserAgentOverride",
params: emulation.SetUserAgentOverrideParameters
)
emulation.SetUserAgentOverrideParameters = {
userAgent: text / null,
? contexts: [+browsingContext.BrowsingContext],
? userContexts: [+browser.UserContext],
}
emulation.SetScriptingEnabled = (
method: "emulation.setScriptingEnabled",
params: emulation.SetScriptingEnabledParameters
)
emulation.SetScriptingEnabledParameters = {
enabled: false / null,
? contexts: [+browsingContext.BrowsingContext],
? userContexts: [+browser.UserContext],
}
emulation.SetScrollbarTypeOverride = (
method: "emulation.setScrollbarTypeOverride",
params: emulation.SetScrollbarTypeOverrideParameters
)
emulation.SetScrollbarTypeOverrideParameters = {
scrollbarType: "classic" / "overlay" / null,
? contexts: [+browsingContext.BrowsingContext],
? userContexts: [+browser.UserContext],
}
emulation.SetTimezoneOverride = (
method: "emulation.setTimezoneOverride",
params: emulation.SetTimezoneOverrideParameters
)
emulation.SetTimezoneOverrideParameters = {
timezone: text / null,
? contexts: [+browsingContext.BrowsingContext],
? userContexts: [+browser.UserContext],
}
emulation.SetTouchOverride = (
method: "emulation.setTouchOverride",
params: emulation.SetTouchOverrideParameters
)
emulation.SetTouchOverrideParameters = {
maxTouchPoints: (js-uint .ge 1) / null,
? contexts: [+browsingContext.BrowsingContext],
? userContexts: [+browser.UserContext],
}
NetworkCommand = (
network.AddDataCollector //
network.AddIntercept //
network.ContinueRequest //
network.ContinueResponse //
network.ContinueWithAuth //
network.DisownData //
network.FailRequest //
network.GetData //
network.ProvideResponse //
network.RemoveDataCollector //
network.RemoveIntercept //
network.SetCacheBehavior //
network.SetExtraHeaders
)
network.AuthCredentials = {
type: "password",
username: text,
password: text,
}
network.BytesValue = network.StringValue / network.Base64Value;
network.StringValue = {
type: "string",
value: text,
}
network.Base64Value = {
type: "base64",
value: text,
}
network.Collector = text
network.CollectorType = "blob"
network.SameSite = "strict" / "lax" / "none" / "default"
<!--
Modifications to this definition should be reflected in
`network.SetCookieHeader`, `storage.CookieFilter`, and `storage.PartialCookie`.
-->
network.Cookie = {
name: text,
value: network.BytesValue,
domain: text,
path: text,
size: js-uint,
httpOnly: bool,
secure: bool,
sameSite: network.SameSite,
? expiry: js-uint,
Extensible,
}
network.CookieHeader = {
name: text,
value: network.BytesValue,
}
network.DataType = "request" / "response"
network.Header = {
name: text,
value: network.BytesValue,
}
network.Intercept = text
network.Request = text;
<!--
Modifications to this definition should be reflected in
`network.Cookie`, `storage.CookieFilter`, and `storage.PartialCookie`.
-->
network.SetCookieHeader = {
name: text,
value: network.BytesValue,
? domain: text,
? httpOnly: bool,
? expiry: text,
? maxAge: js-int,
? path: text,
? sameSite: network.SameSite,
? secure: bool,
}
network.UrlPattern = (
network.UrlPatternPattern /
network.UrlPatternString
)
network.UrlPatternPattern = {
type: "pattern",
?protocol: text,
?hostname: text,
?port: text,
?pathname: text,
?search: text,
}
network.UrlPatternString = {
type: "string",
pattern: text,
}
network.AddDataCollector = (
method: "network.addDataCollector",
params: network.AddDataCollectorParameters
)
network.AddDataCollectorParameters = {
dataTypes: [+network.DataType],
maxEncodedDataSize: js-uint,
? collectorType: network.CollectorType .default "blob",
? contexts: [+browsingContext.BrowsingContext],
? userContexts: [+browser.UserContext],
}
network.AddIntercept = (
method: "network.addIntercept",
params: network.AddInterceptParameters
)
network.AddInterceptParameters = {
phases: [+network.InterceptPhase],
? contexts: [+browsingContext.BrowsingContext],
? urlPatterns: [*network.UrlPattern],
}
network.InterceptPhase = "beforeRequestSent" / "responseStarted" /
"authRequired"
network.ContinueRequest = (
method: "network.continueRequest",
params: network.ContinueRequestParameters
)
network.ContinueRequestParameters = {
request: network.Request,
?body: network.BytesValue,
?cookies: [*network.CookieHeader],
?headers: [*network.Header],
?method: text,
?url: text,
}
network.ContinueResponse = (
method: "network.continueResponse",
params: network.ContinueResponseParameters
)
network.ContinueResponseParameters = {
request: network.Request,
?cookies: [*network.SetCookieHeader]
?credentials: network.AuthCredentials,
?headers: [*network.Header],
?reasonPhrase: text,
?statusCode: js-uint,
}
network.ContinueWithAuth = (
method: "network.continueWithAuth",
params: network.ContinueWithAuthParameters
)
network.ContinueWithAuthParameters = {
request: network.Request,
(network.ContinueWithAuthCredentials // network.ContinueWithAuthNoCredentials)
}
network.ContinueWithAuthCredentials = (
action: "provideCredentials", <!-- or "provide credentials" or
"providecredentials" or something else -->
credentials: network.AuthCredentials
)
network.ContinueWithAuthNoCredentials = (
action: "default" / "cancel"
)
network.DisownData = (
method: "network.disownData",
params: network.DisownDataParameters
)
network.DisownDataParameters = {
dataType: network.DataType,
collector: network.Collector,
request: network.Request,
}
network.FailRequest = (
method: "network.failRequest",
params: network.FailRequestParameters
)
network.FailRequestParameters = {
request: network.Request,
}
network.GetData = (
method: "network.getData",
params: network.GetDataParameters
)
network.GetDataParameters = {
dataType: network.DataType,
? collector: network.Collector,
? disown: bool .default false,
request: network.Request,
}
network.ProvideResponse = (
method: "network.provideResponse",
params: network.ProvideResponseParameters
)
network.ProvideResponseParameters = {
request: network.Request,
?body: network.BytesValue,
?cookies: [*network.SetCookieHeader],
?headers: [*network.Header],
?reasonPhrase: text,
?statusCode: js-uint,
}
network.RemoveDataCollector = (
method: "network.removeDataCollector",
params: network.RemoveDataCollectorParameters
)
network.RemoveDataCollectorParameters = {
collector: network.Collector
}
network.RemoveIntercept = (
method: "network.removeIntercept",
params: network.RemoveInterceptParameters
)
network.RemoveInterceptParameters = {
intercept: network.Intercept
}
network.SetCacheBehavior = (
method: "network.setCacheBehavior",
params: network.SetCacheBehaviorParameters
)
network.SetCacheBehaviorParameters = {
cacheBehavior: "default" / "bypass",
? contexts: [+browsingContext.BrowsingContext]
}
network.SetExtraHeaders = (
method: "network.setExtraHeaders",
params: network.SetExtraHeadersParameters
)
network.SetExtraHeadersParameters = {
headers: [*network.Header]
? contexts: [+browsingContext.BrowsingContext]
? userContexts: [+browser.UserContext]
}
ScriptCommand = (
script.AddPreloadScript //
script.CallFunction //
script.Disown //
script.Evaluate //
script.GetRealms //
script.RemovePreloadScript
)
script.Channel = text;
script.ChannelValue = {
type: "channel",
value: script.ChannelProperties,
}
script.ChannelProperties = {
channel: script.Channel,
? serializationOptions: script.SerializationOptions,
? ownership: script.ResultOwnership,
}
script.EvaluateResult = (
script.EvaluateResultSuccess /
script.EvaluateResultException
)
script.EvaluateResultSuccess = {
type: "success",
result: script.RemoteValue,
realm: script.Realm
}
script.EvaluateResultException = {
type: "exception",
exceptionDetails: script.ExceptionDetails
realm: script.Realm
}
script.ExceptionDetails = {
columnNumber: js-uint,
exception: script.RemoteValue,
lineNumber: js-uint,
stackTrace: script.StackTrace,
text: text,
}
script.Handle = text;
script.InternalId = text;
script.LocalValue = (
script.RemoteReference /
script.PrimitiveProtocolValue /
script.ChannelValue /
script.ArrayLocalValue /
{ script.DateLocalValue } /
script.MapLocalValue /
script.ObjectLocalValue /
{ script.RegExpLocalValue } /
script.SetLocalValue
)
script.ListLocalValue = [*script.LocalValue];
script.ArrayLocalValue = {
type: "array",
value: script.ListLocalValue,
}
script.DateLocalValue = (
type: "date",
value: text
)
script.MappingLocalValue = [*[(script.LocalValue / text), script.LocalValue]];
script.MapLocalValue = {
type: "map",
value: script.MappingLocalValue,
}
script.ObjectLocalValue = {
type: "object",
value: script.MappingLocalValue,
}
script.RegExpValue = {
pattern: text,
? flags: text,
}
script.RegExpLocalValue = (
type: "regexp",
value: script.RegExpValue,
)
script.SetLocalValue = {
type: "set",
value: script.ListLocalValue,
}
script.PreloadScript = text;
script.Realm = text;
script.PrimitiveProtocolValue = (
script.UndefinedValue /
script.NullValue /
script.StringValue /
script.NumberValue /
script.BooleanValue /
script.BigIntValue
)
script.UndefinedValue = {
type: "undefined",
}
script.NullValue = {
type: "null",
}
script.StringValue = {
type: "string",
value: text,
}
script.SpecialNumber = "NaN" / "-0" / "Infinity" / "-Infinity";
script.NumberValue = {
type: "number",
value: number / script.SpecialNumber,
}
script.BooleanValue = {
type: "boolean",
value: bool,
}
script.BigIntValue = {
type: "bigint",
value: text,
}
script.RealmType = "window" / "dedicated-worker" / "shared-worker" / "service-worker" /
"worker" / "paint-worklet" / "audio-worklet" / "worklet"
<!-- This is specifically ordered in the order in which matches need to be -->
<!-- evaluated, since the definitions are overlapping -->
script.RemoteReference = (
script.SharedReference /
script.RemoteObjectReference
)
script.SharedReference = {
sharedId: script.SharedId
<!-- Ensure that if we have a handle, it at least has the correct type -->
? handle: script.Handle,
Extensible
}
script.RemoteObjectReference = {
handle: script.Handle,
<!-- This shouldn't ever match. The problem is that Extensible would
otherwise allow this to match a non-text sharedId -->
? sharedId: script.SharedId
Extensible
}
script.RemoteValue = (
script.PrimitiveProtocolValue /
script.SymbolRemoteValue /
script.ArrayRemoteValue /
script.ObjectRemoteValue /
script.FunctionRemoteValue /
script.RegExpRemoteValue /
script.DateRemoteValue /
script.MapRemoteValue /
script.SetRemoteValue /
script.WeakMapRemoteValue /
script.WeakSetRemoteValue /
script.GeneratorRemoteValue /
script.ErrorRemoteValue /
script.ProxyRemoteValue /
script.PromiseRemoteValue /
script.TypedArrayRemoteValue /
script.ArrayBufferRemoteValue /
script.NodeListRemoteValue /
script.HTMLCollectionRemoteValue /
script.NodeRemoteValue /
script.WindowProxyRemoteValue
)
script.ListRemoteValue = [*script.RemoteValue];
script.MappingRemoteValue = [*[(script.RemoteValue / text), script.RemoteValue]];
script.SymbolRemoteValue = {
type: "symbol",
? handle: script.Handle,
? internalId: script.InternalId,
}
script.ArrayRemoteValue = {
type: "array",
? handle: script.Handle,
? internalId: script.InternalId,
? value: script.ListRemoteValue,
}
script.ObjectRemoteValue = {
type: "object",
? handle: script.Handle,
? internalId: script.InternalId,
? value: script.MappingRemoteValue,
}
script.FunctionRemoteValue = {
type: "function",
? handle: script.Handle,
? internalId: script.InternalId,
}
script.RegExpRemoteValue = {
script.RegExpLocalValue,
? handle: script.Handle,
? internalId: script.InternalId,
}
script.DateRemoteValue = {
script.DateLocalValue,
? handle: script.Handle,
? internalId: script.InternalId,
}
script.MapRemoteValue = {
type: "map",
? handle: script.Handle,
? internalId: script.InternalId,
? value: script.MappingRemoteValue,
}
script.SetRemoteValue = {
type: "set",
? handle: script.Handle,
? internalId: script.InternalId,
? value: script.ListRemoteValue
}
script.WeakMapRemoteValue = {
type: "weakmap",
? handle: script.Handle,
? internalId: script.InternalId,
}
script.WeakSetRemoteValue = {
type: "weakset",
? handle: script.Handle,
? internalId: script.InternalId,
}
script.GeneratorRemoteValue = {
type: "generator",
? handle: script.Handle,
? internalId: script.InternalId,
}
script.ErrorRemoteValue = {
type: "error",
? handle: script.Handle,
? internalId: script.InternalId,
}
script.ProxyRemoteValue = {
type: "proxy",
? handle: script.Handle,
? internalId: script.InternalId,
}
script.PromiseRemoteValue = {
type: "promise",
? handle: script.Handle,
? internalId: script.InternalId,
}
script.TypedArrayRemoteValue = {
type: "typedarray",
? handle: script.Handle,
? internalId: script.InternalId,
}
script.ArrayBufferRemoteValue = {
type: "arraybuffer",
? handle: script.Handle,
? internalId: script.InternalId,
}
script.NodeListRemoteValue = {
type: "nodelist",
? handle: script.Handle,
? internalId: script.InternalId,
? value: script.ListRemoteValue,
}
script.HTMLCollectionRemoteValue = {
type: "htmlcollection",
? handle: script.Handle,
? internalId: script.InternalId,
? value: script.ListRemoteValue,
}
script.NodeRemoteValue = {
type: "node",
? sharedId: script.SharedId,
? handle: script.Handle,
? internalId: script.InternalId,
? value: script.NodeProperties,
}
script.NodeProperties = {
nodeType: js-uint,
childNodeCount: js-uint,
? attributes: {*text => text},
? children: [*script.NodeRemoteValue],
? localName: text,
? mode: "open" / "closed",
? namespaceURI: text,
? nodeValue: text,
? shadowRoot: script.NodeRemoteValue / null,
}
script.WindowProxyRemoteValue = {
type: "window",
value: script.WindowProxyProperties,
? handle: script.Handle,
? internalId: script.InternalId
}
script.WindowProxyProperties = {
context: browsingContext.BrowsingContext
}
script.ResultOwnership = "root" / "none"
script.SerializationOptions = {
? maxDomDepth: (js-uint / null) .default 0,
? maxObjectDepth: (js-uint / null) .default null,
? includeShadowTree: ("none" / "open" / "all") .default "none",
}
script.SharedId = text;
script.StackFrame = {
columnNumber: js-uint,
functionName: text,
lineNumber: js-uint,
url: text,
}
script.StackTrace = {
callFrames: [*script.StackFrame],
}
script.RealmTarget = {
realm: script.Realm
}
script.ContextTarget = {
context: browsingContext.BrowsingContext,
? sandbox: text
}
script.Target = (
script.ContextTarget /
script.RealmTarget
)
script.AddPreloadScript = (
method: "script.addPreloadScript",
params: script.AddPreloadScriptParameters
)
script.AddPreloadScriptParameters = {
functionDeclaration: text,
? arguments: [*script.ChannelValue],
? contexts: [+browsingContext.BrowsingContext],
? userContexts: [+browser.UserContext],
? sandbox: text
}
script.Disown = (
method: "script.disown",
params: script.DisownParameters
)
script.DisownParameters = {
handles: [*script.Handle]
target: script.Target;
}
script.CallFunction = (
method: "script.callFunction",
params: script.CallFunctionParameters
)
script.CallFunctionParameters = {
functionDeclaration: text,
awaitPromise: bool,
target: script.Target,
? arguments: [*script.LocalValue],
? resultOwnership: script.ResultOwnership,
? serializationOptions: script.SerializationOptions,
? this: script.LocalValue,
? userActivation: bool .default false,
}
script.Evaluate = (
method: "script.evaluate",
params: script.EvaluateParameters
)
script.EvaluateParameters = {
expression: text,
target: script.Target,
awaitPromise: bool,
? resultOwnership: script.ResultOwnership,
? serializationOptions: script.SerializationOptions,
? userActivation: bool .default false,
}
script.GetRealms = (
method: "script.getRealms",
params: script.GetRealmsParameters
)
script.GetRealmsParameters = {
? context: browsingContext.BrowsingContext,
? type: script.RealmType,
}
script.RemovePreloadScript = (
method: "script.removePreloadScript",
params: script.RemovePreloadScriptParameters
)
script.RemovePreloadScriptParameters = {
script: script.PreloadScript
}
StorageCommand = (
storage.DeleteCookies //
storage.GetCookies //
storage.SetCookie
)
storage.PartitionKey = {
? userContext: text,
? sourceOrigin: text,
Extensible,
}
storage.GetCookies = (
method: "storage.getCookies",
params: storage.GetCookiesParameters
)
<!--
Modifications to this definition should be reflected in
`network.Cookie`, `network.SetCookieHeader`, and `storage.PartialCookie`.
-->
storage.CookieFilter = {
? name: text,
? value: network.BytesValue,
? domain: text,
? path: text,
? size: js-uint,
? httpOnly: bool,
? secure: bool,
? sameSite: network.SameSite,
? expiry: js-uint,
Extensible,
}
storage.BrowsingContextPartitionDescriptor = {
type: "context",
context: browsingContext.BrowsingContext
}
storage.StorageKeyPartitionDescriptor = {
type: "storageKey",
? userContext: text,
? sourceOrigin: text,
Extensible,
}
storage.PartitionDescriptor = (
storage.BrowsingContextPartitionDescriptor /
storage.StorageKeyPartitionDescriptor
)
storage.GetCookiesParameters = {
? filter: storage.CookieFilter,
? partition: storage.PartitionDescriptor,
}
storage.SetCookie = (
method: "storage.setCookie",
params: storage.SetCookieParameters,
)
<!--
Modifications to this definition should be reflected in
`network.Cookie`, `network.SetCookieHeader`, and `storage.CookieFilter`.
-->
storage.PartialCookie = {
name: text,
value: network.BytesValue,
domain: text,
? path: text,
? httpOnly: bool,
? secure: bool,
? sameSite: network.SameSite,
? expiry: js-uint,
Extensible,
}
storage.SetCookieParameters = {
cookie: storage.PartialCookie,
? partition: storage.PartitionDescriptor,
}
storage.DeleteCookies = (
method: "storage.deleteCookies",
params: storage.DeleteCookiesParameters,
)
storage.DeleteCookiesParameters = {
? filter: storage.CookieFilter,
? partition: storage.PartitionDescriptor,
}
InputCommand = (
input.PerformActions //
input.ReleaseActions //
input.SetFiles
)
InputResult = (
input.PerformActionsResult /
input.ReleaseActionsResult /
input.SetFilesResult
)
input.ElementOrigin = {
type: "element",
element: script.SharedReference
}
input.PerformActions = (
method: "input.performActions",
params: input.PerformActionsParameters
)
input.PerformActionsParameters = {
context: browsingContext.BrowsingContext,
actions: [*input.SourceActions]
}
input.SourceActions = (
input.NoneSourceActions /
input.KeySourceActions /
input.PointerSourceActions /
input.WheelSourceActions
)
input.NoneSourceActions = {
type: "none",
id: text,
actions: [*input.NoneSourceAction]
}
input.NoneSourceAction = input.PauseAction
input.KeySourceActions = {
type: "key",
id: text,
actions: [*input.KeySourceAction]
}
input.KeySourceAction = (
input.PauseAction /
input.KeyDownAction /
input.KeyUpAction
)
input.PointerSourceActions = {
type: "pointer",
id: text,
? parameters: input.PointerParameters,
actions: [*input.PointerSourceAction]
}
input.PointerType = "mouse" / "pen" / "touch"
input.PointerParameters = {
? pointerType: input.PointerType .default "mouse"
}
input.PointerSourceAction = (
input.PauseAction /
input.PointerDownAction /
input.PointerUpAction /
input.PointerMoveAction
)
input.WheelSourceActions = {
type: "wheel",
id: text,
actions: [*input.WheelSourceAction]
}
input.WheelSourceAction = (
input.PauseAction /
input.WheelScrollAction
)
input.PauseAction = {
type: "pause",
? duration: js-uint
}
input.KeyDownAction = {
type: "keyDown",
value: text
}
input.KeyUpAction = {
type: "keyUp",
value: text
}
input.PointerUpAction = {
type: "pointerUp",
button: js-uint,
}
input.PointerDownAction = {
type: "pointerDown",
button: js-uint,
input.PointerCommonProperties
}
input.PointerMoveAction = {
type: "pointerMove",
x: float,
y: float,
? duration: js-uint,
? origin: input.Origin,
input.PointerCommonProperties
}
input.WheelScrollAction = {
type: "scroll",
x: js-int,
y: js-int,
deltaX: js-int,
deltaY: js-int,
? duration: js-uint,
? origin: input.Origin .default "viewport",
}
input.PointerCommonProperties = (
? width: js-uint .default 1,
? height: js-uint .default 1,
? pressure: float .default 0.0,
? tangentialPressure: float .default 0.0,
? twist: (0..359) .default 0,
; 0 .. Math.PI / 2
? altitudeAngle: (0.0..1.5707963267948966) .default 0.0,
; 0 .. 2 * Math.PI
? azimuthAngle: (0.0..6.283185307179586) .default 0.0,
)
input.Origin = "viewport" / "pointer" / input.ElementOrigin
input.ReleaseActions = (
method: "input.releaseActions",
params: input.ReleaseActionsParameters
)
input.ReleaseActionsParameters = {
context: browsingContext.BrowsingContext,
}
input.SetFiles = (
method: "input.setFiles",
params: input.SetFilesParameters
)
input.SetFilesParameters = {
context: browsingContext.BrowsingContext,
element: script.SharedReference,
files: [*text]
}
input.FileDialogOpened = (
method: "input.fileDialogOpened",
params: input.FileDialogInfo
)
input.FileDialogInfo = {
context: browsingContext.BrowsingContext,
? userContext: browser.UserContext,
? element: script.SharedReference,
multiple: bool,
}
WebExtensionCommand = (
webExtension.Install //
webExtension.Uninstall
)
webExtension.Extension = text
webExtension.Install = (
method: "webExtension.install",
params: webExtension.InstallParameters
)
webExtension.InstallParameters = {
extensionData: webExtension.ExtensionData,
}
webExtension.ExtensionData = (
webExtension.ExtensionArchivePath /
webExtension.ExtensionBase64Encoded /
webExtension.ExtensionPath
)
webExtension.ExtensionPath = {
type: "path",
path: text,
}
webExtension.ExtensionArchivePath = {
type: "archivePath",
path: text,
}
webExtension.ExtensionBase64Encoded = {
type: "base64",
value: text,
}
webExtension.Uninstall = (
method: "webExtension.uninstall",
params: webExtension.UninstallParameters
)
webExtension.UninstallParameters = {
extension: webExtension.Extension,
}