1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378
|
/* -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 8 -*- */
/* vim: set sw=4 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/DomSecurityIPCUtils.h";
include "mozilla/GfxMessageUtils.h";
include "mozilla/dom/CSPMessageUtils.h";
include "mozilla/dom/PolicyContainerMessageUtils.h";
include "mozilla/dom/DocShellMessageUtils.h";
include "mozilla/dom/NavigationAPIIPCUtils.h";
include "mozilla/dom/PermissionMessageUtils.h";
include "mozilla/dom/PropertyBagUtils.h";
include "mozilla/dom/ReferrerInfoUtils.h";
include "mozilla/dom/TabMessageUtils.h";
include "mozilla/dom/notification/IPCUtils.h";
include "mozilla/ipc/URIUtils.h";
include "mozilla/layers/LayersMessageUtils.h";
include "mozilla/net/NeckoMessageUtils.h";
include "mozilla/URLClassifierIPCUtils.h";
include IPCBlob;
include IPCStream;
include ProtocolTypes;
using struct mozilla::void_t from "mozilla/ipc/IPCCore.h";
[MoveOnly=data] using struct mozilla::SerializedStructuredCloneBuffer
from "mozilla/ipc/SerializedStructuredCloneBuffer.h";
using struct mozilla::dom::LoadingSessionHistoryInfo
from "mozilla/dom/SessionHistoryEntry.h";
using mozilla::net::ClassOfService from "mozilla/net/ClassOfService.h";
using mozilla::hal::ScreenOrientation from "mozilla/HalIPCUtils.h";
using mozilla::LayoutDeviceIntRect from "Units.h";
using mozilla::DesktopIntRect from "Units.h";
using mozilla::DesktopToLayoutDeviceScale from "Units.h";
using mozilla::CSSToLayoutDeviceScale from "Units.h";
using mozilla::CSSRect from "Units.h";
using mozilla::CSSSize from "Units.h";
using mozilla::LayoutDeviceIntSize from "Units.h";
using mozilla::LayoutDeviceIntPoint from "Units.h";
using mozilla::ImageIntSize from "Units.h";
using nsSizeMode from "nsIWidgetListener.h";
using mozilla::ScrollbarPreference from "mozilla/ScrollbarPreferences.h";
using mozilla::gfx::SurfaceFormat from "mozilla/gfx/Types.h";
using nsILoadInfo::HTTPSUpgradeTelemetryType from "nsILoadInfo.h";
using nsILoadInfo::SchemelessInputType from "nsILoadInfo.h";
[RefCounted] using class nsIPrincipal from "nsIPrincipal.h";
using mozilla::dom::MaybeDiscardedBrowsingContext from "mozilla/dom/BrowsingContext.h";
[RefCounted] using class nsIURI from "nsIURI.h";
[RefCounted] using class nsIPolicyContainer from "nsIPolicyContainer.h";
[RefCounted] using class nsIInputStream from "mozilla/ipc/IPCStreamUtils.h";
[RefCounted] using class nsIReferrerInfo from "nsIReferrerInfo.h";
[RefCounted] using class nsIVariant from "nsIVariant.h";
using mozilla::TimeStamp from "mozilla/TimeStamp.h";
[RefCounted] using class mozilla::RemoteLazyInputStream from "mozilla/RemoteLazyInputStream.h";
[MoveOnly] using class mozilla::ipc::BigBuffer from "mozilla/ipc/BigBuffer.h";
using mozilla::dom::NotificationDirection from "mozilla/dom/NotificationBinding.h";
using mozilla::dom::UserNavigationInvolvement from "mozilla/dom/UserNavigationInvolvement.h";
using mozilla::net::ClassificationFlags from "nsIClassifiedChannel.h";
namespace mozilla {
namespace dom {
struct MessagePortIdentifier
{
nsID uuid;
nsID destinationUuid;
uint32_t sequenceId;
bool neutered;
};
/**
* Cross-process representation for postMessage() style payloads where Blobs may
* be referenced/"cloned" and (optionally) messageports transferred. Use
* StructuredCloneData in your code to convert between this wire representation
* and the StructuredCloneData StructuredCloneHolder-subclass.
*/
struct ClonedMessageData
{
SerializedStructuredCloneBuffer data;
IPCBlob[] blobs;
IPCStream[] inputStreams;
MessagePortIdentifier[] identifiers;
};
struct ErrorMessageData {
};
union ClonedOrErrorMessageData {
ClonedMessageData;
ErrorMessageData;
};
struct RefMessageData {
nsID uuid;
};
union MessageDataType {
ClonedMessageData;
RefMessageData;
};
struct MessageData {
nsID? agentClusterId;
MessageDataType data;
};
struct ScreenDetails {
LayoutDeviceIntRect rect;
DesktopIntRect rectDisplayPix;
LayoutDeviceIntRect availRect;
DesktopIntRect availRectDisplayPix;
int32_t pixelDepth;
int32_t colorDepth;
uint32_t refreshRate; // In Hz, or 0 if not known.
DesktopToLayoutDeviceScale contentsScaleFactor;
CSSToLayoutDeviceScale defaultCSSScaleFactor;
float dpi;
ScreenOrientation orientation;
uint16_t orientationAngle;
bool isPseudoDisplay;
bool isHDR;
};
struct DimensionInfo
{
CSSRect rect;
CSSSize size;
LayoutDeviceIntPoint clientOffset;
LayoutDeviceIntPoint chromeOffset;
};
struct FrameScriptInfo
{
nsString url;
bool runInGlobalScope;
};
/**
* The information required to complete a window creation request.
*/
struct CreatedWindowInfo
{
nsresult rv;
bool windowOpened;
FrameScriptInfo[] frameScripts;
uint32_t maxTouchPoints;
DimensionInfo dimensions;
};
struct DocShellLoadStateInit
{
nullable nsIURI URI;
nullable nsIURI OriginalURI;
nullable nsIURI ResultPrincipalURI;
nullable nsIPrincipal TriggeringPrincipal;
nullable nsIReferrerInfo ReferrerInfo;
nullable nsIPrincipal PrincipalToInherit;
nullable nsIPrincipal PartitionedPrincipalToInherit;
nullable nsIURI BaseURI;
// The Policy Container of the load, that is, the policyContainer of the entity
// responsible for causing the load to occur. Most likely this is the policyContainer
// of the document that started the load. In case the entity starting the
// load did not use a policyContainer, then policyContainer can be null. Please note that
// this is also the policyContainer that will be applied to the load in case the load
// encounters a server side redirect.
nullable nsIPolicyContainer PolicyContainer;
nullable nsIInputStream PostDataStream;
nullable nsIInputStream HeadersStream;
nullable nsIURI UnstrippedURI;
uint64_t LoadIdentifier;
nsString Target;
nsCString TypeHint;
nsString FileName;
MaybeDiscardedBrowsingContext SourceBrowsingContext;
MaybeDiscardedBrowsingContext TargetBrowsingContext;
// The provided remote type of the process responsible for causing the load to
// occur. Validated in the parent process.
nsCString TriggeringRemoteType;
nsString SrcdocData; // useless without sourcedocshell
nsCString? OriginalURIString;
nsCString? RemoteTypeOverride;
LoadingSessionHistoryInfo? loadingSessionHistoryInfo;
uint32_t LoadType;
uint32_t LoadFlags;
uint32_t InternalLoadFlags;
// https://html.spec.whatwg.org/#user-navigation-involvement
UserNavigationInvolvement userNavigationInvolvement;
// The TriggeringSandboxFlags are the SandboxFlags of the entity
// responsible for causing the load to occur.
uint32_t TriggeringSandboxFlags;
uint64_t TriggeringWindowId;
bool TriggeringStorageAccess;
ClassificationFlags TriggeringClassificationFlags;
int32_t? CancelContentJSEpoch;
bool ResultPrincipalURIIsSome;
bool KeepResultPrincipalURIIfSet;
bool LoadReplace;
bool InheritPrincipal;
bool PrincipalIsExplicit;
bool ForceAllowDataURI;
bool IsExemptFromHTTPSFirstMode;
bool OriginalFrameSrc;
bool ShouldCheckForRecursion;
bool IsFormSubmission;
bool FirstParty;
bool HasValidUserGestureActivation;
bool TextDirectiveUserActivation;
bool AllowFocusMove;
bool IsFromProcessingFrameAttributes;
SchemelessInputType SchemelessInput;
HTTPSUpgradeTelemetryType HttpsUpgradeTelemetry;
// Fields missing due to lack of need or serialization
// nsCOMPtr<nsIDocShell> mSourceDocShell;
// bool mIsSrcDocLoad; // useless without sourcedocshell
// nsIChannel pendingRedirectedChannel; // sent through other mechanism
bool ChannelInitialized;
bool TryToReplaceWithSessionHistoryLoad;
bool IsMetaRefresh;
};
struct TimedChannelInfo
{
int8_t redirectCount;
int8_t internalRedirectCount;
TimeStamp asyncOpen;
TimeStamp channelCreation;
TimeStamp redirectStart;
TimeStamp redirectEnd;
nsString initiatorType;
bool allRedirectsSameOrigin;
bool allRedirectsPassTimingAllowCheck;
bool? timingAllowCheckForPrincipal;
bool renderBlocking;
TimeStamp launchServiceWorkerStart;
TimeStamp launchServiceWorkerEnd;
TimeStamp dispatchFetchEventStart;
TimeStamp dispatchFetchEventEnd;
TimeStamp handleFetchEventStart;
TimeStamp handleFetchEventEnd;
TimeStamp responseStart;
TimeStamp responseEnd;
};
struct ReplacementChannelConfigInit
{
uint32_t redirectFlags;
ClassOfService classOfService;
bool? privateBrowsing;
nsCString? method;
nullable nsIReferrerInfo referrerInfo;
TimedChannelInfo? timedChannelInfo;
nullable RemoteLazyInputStream uploadStream;
uint64_t uploadStreamLength;
bool uploadStreamHasHeaders;
nsCString? contentType;
nsCString? contentLength;
};
union IPDLVariantValue
{
bool;
uint8_t; // In practice, uint8_t and uint16_t are likely unneeded,
int16_t; // as signed->unsigned->signed has universal behavior.
uint16_t; // but those conversions are only guaranteed in C++20.
int32_t;
uint32_t;
float;
double;
nsID;
nsString;
nsCString;
nullable nsIURI;
nullable nsIPrincipal;
};
struct IDPLVariant
{
uint32_t type; // We explicitly store the original nsIVariant type so that
// the conversion back into a nsVariant later is lossless.
IPDLVariantValue data;
};
struct IPDLProperty
{
nsString name;
nullable nsIVariant value;
};
// Struct with information to show a frame from the parent process.
struct ParentShowInfo
{
nsString name;
bool fakeShowInfo;
bool isTransparent;
float dpi;
int32_t widgetRounding;
double defaultScale;
};
// Struct with information to show an iframe from the process that owns the
// frame.
struct OwnerShowInfo {
// This can be an IntSize rather than a Rect because content processes always
// render to a virtual <0, 0> top-left point.
LayoutDeviceIntSize size;
// TODO(emilio): Margin preferences go here.
ScrollbarPreference scrollbarPreference;
// TODO(emilio): I think we should really be able to figure this out from the
// parent process too instead.
nsSizeMode sizeMode;
};
struct IPCImage {
BigBuffer data;
uint32_t stride;
SurfaceFormat format;
ImageIntSize size;
};
struct IPCNotificationAction {
nsString name;
nsString title;
};
// Mostly same as NotificationOptions except:
// * `title` is included (it's a separate parameter in the Notification constructor)
// * `data` is serialized to base64 string by StructuredCloneContainer
// * `vibrate` is normalized to sequence
struct IPCNotificationOptions {
nsString title;
NotificationDirection dir;
nsString lang;
nsString body;
nsString tag;
nsString icon;
bool requireInteraction;
bool silent;
uint32_t[] vibrate;
nsString dataSerialized;
IPCNotificationAction[] actions;
};
struct IPCNotification {
nsString id;
IPCNotificationOptions options;
};
union IPCNotificationsOrError {
IPCNotification[];
nsresult;
};
} // namespace dom
} // namespace mozilla
|