summaryrefslogtreecommitdiffstats
path: root/dom/ipc/DOMTypes.ipdlh
blob: faee4e861ceb0b0ccf5f741e844ab2733ab4507d (plain)
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
/* -*- 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/GfxMessageUtils.h";
include "mozilla/dom/CSPMessageUtils.h";
include "mozilla/dom/DocShellMessageUtils.h";
include "mozilla/dom/PermissionMessageUtils.h";
include "mozilla/dom/PropertyBagUtils.h";
include "mozilla/dom/ReferrerInfoUtils.h";
include "mozilla/dom/TabMessageUtils.h";
include "mozilla/ipc/URIUtils.h";
include "mozilla/layers/LayersMessageUtils.h";
include "mozilla/net/ClassOfService.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::ScreenIntSize from "Units.h";
using mozilla::LayoutDeviceIntPoint from "Units.h";
using nsSizeMode from "nsIWidgetListener.h";
using mozilla::ScrollbarPreference from "mozilla/ScrollbarPreferences.h";
using mozilla::gfx::SurfaceFormat from "mozilla/gfx/Types.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 nsIContentSecurityPolicy from "nsIContentSecurityPolicy.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";

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;
};

struct DimensionInfo
{
  CSSRect rect;
  CSSSize size;
  LayoutDeviceIntPoint clientOffset;
  LayoutDeviceIntPoint chromeOffset;
};

struct FrameScriptInfo
{
  nsString url;
  bool runInGlobalScope;
};

struct FeaturePolicyInfo
{
  nsString[]   inheritedDeniedFeatureNames;
  nsString[]   attributeEnabledFeatureNames;
  nsString     declaredString;
  nullable nsIPrincipal defaultOrigin;
  nullable nsIPrincipal selfOrigin;
  nullable nsIPrincipal srcOrigin;
};

/**
 * 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 Content Security Policy of the load, that is, the CSP of the entity
  // responsible for causing the load to occur. Most likely this is the CSP
  // of the document that started the load. In case the entity starting the
  // load did not use a CSP, then Csp can be null. Please note that this is
  // also the CSP that will be applied to the load in case the load
  // encounters a server side redirect.
  nullable nsIContentSecurityPolicy Csp;
  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;
  
  // The TriggineringSandboxFlags are the SandboxFlags of the entity
  // responsible for causing the load to occur.
  uint32_t TriggeringSandboxFlags;
  uint64_t TriggeringWindowId;
  bool TriggeringStorageAccess;
  int32_t? CancelContentJSEpoch;

  bool ResultPrincipalURIIsSome;
  bool KeepResultPrincipalURIIfSet;
  bool LoadReplace;
  bool InheritPrincipal;
  bool PrincipalIsExplicit;
  bool ForceAllowDataURI;
  bool IsExemptFromHTTPSFirstMode;
  bool OriginalFrameSrc;
  bool IsFormSubmission;
  bool FirstParty;
  bool HasValidUserGestureActivation;
  bool AllowFocusMove;
  bool IsFromProcessingFrameAttributes;
  bool WasSchemelessInput;

  // 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
{
  bool timingEnabled;
  int8_t redirectCount;
  int8_t internalRedirectCount;
  TimeStamp asyncOpen;
  TimeStamp channelCreation;
  TimeStamp redirectStart;
  TimeStamp redirectEnd;
  nsString initiatorType;
  bool allRedirectsSameOrigin;
  bool allRedirectsPassTimingAllowCheck;
  bool? timingAllowCheckForPrincipal;
  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.
  ScreenIntSize 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;
};

} // namespace dom
} // namespace mozilla