[WPE] Do not use a sync IPC message to send the host FD to the web process
[WebKit-https.git] / Source / WebKit / Shared / WebPageCreationParameters.cpp
1 /*
2  * Copyright (C) 2010-2018 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #include "config.h"
27 #include "WebPageCreationParameters.h"
28
29 #include "WebCoreArgumentCoders.h"
30
31 namespace WebKit {
32
33 void WebPageCreationParameters::encode(IPC::Encoder& encoder) const
34 {
35     encoder << viewSize;
36     encoder << activityState;
37
38     encoder << store;
39     encoder.encodeEnum(drawingAreaType);
40     encoder << pageGroupData;
41     encoder << drawsBackground;
42     encoder << isEditable;
43     encoder << underlayColor;
44     encoder << useFixedLayout;
45     encoder << fixedLayoutSize;
46     encoder << alwaysShowsHorizontalScroller;
47     encoder << alwaysShowsVerticalScroller;
48     encoder.encodeEnum(paginationMode);
49     encoder << paginationBehavesLikeColumns;
50     encoder << pageLength;
51     encoder << gapBetweenPages;
52     encoder << paginationLineGridEnabled;
53     encoder << userAgent;
54     encoder << itemStates;
55     encoder << sessionID;
56     encoder << userContentControllerID.toUInt64();
57     encoder << visitedLinkTableID;
58     encoder << websiteDataStoreID;
59     encoder << canRunBeforeUnloadConfirmPanel;
60     encoder << canRunModal;
61     encoder << deviceScaleFactor;
62     encoder << viewScaleFactor;
63     encoder << textZoomFactor;
64     encoder << pageZoomFactor;
65     encoder << topContentInset;
66     encoder << mediaVolume;
67     encoder << muted;
68     encoder << mayStartMediaWhenInWindow;
69     encoder << viewLayoutSize;
70     encoder << autoSizingShouldExpandToViewHeight;
71     encoder << viewportSizeForCSSViewportUnits;
72     encoder.encodeEnum(scrollPinningBehavior);
73     encoder << scrollbarOverlayStyle;
74     encoder << backgroundExtendsBeyondPage;
75     encoder.encodeEnum(layerHostingMode);
76     encoder << mimeTypesWithCustomContentProviders;
77     encoder << controlledByAutomation;
78     encoder << isProcessSwap;
79     encoder << useDarkAppearance;
80
81 #if PLATFORM(MAC)
82     encoder << colorSpace;
83     encoder << useSystemAppearance;
84 #endif
85 #if PLATFORM(IOS_FAMILY)
86     encoder << screenSize;
87     encoder << availableScreenSize;
88     encoder << overrideScreenSize;
89     encoder << textAutosizingWidth;
90     encoder << ignoresViewportScaleLimits;
91     encoder << viewportConfigurationViewLayoutSize;
92     encoder << viewportConfigurationLayoutSizeScaleFactor;
93     encoder << viewportConfigurationViewSize;
94     encoder << maximumUnobscuredSize;
95     encoder << deviceOrientation;
96 #endif
97 #if PLATFORM(COCOA)
98     encoder << smartInsertDeleteEnabled;
99     encoder << additionalSupportedImageTypes;
100 #endif
101 #if PLATFORM(WPE)
102     encoder << hostFileDescriptor;
103 #endif
104     encoder << appleMailPaginationQuirkEnabled;
105     encoder << appleMailLinesClampEnabled;
106     encoder << shouldScaleViewToFitDocument;
107     encoder.encodeEnum(userInterfaceLayoutDirection);
108     encoder << observedLayoutMilestones;
109     encoder << overrideContentSecurityPolicy;
110     encoder << cpuLimit;
111     encoder << urlSchemeHandlers;
112 #if ENABLE(APPLICATION_MANIFEST)
113     encoder << applicationManifest;
114 #endif
115 #if ENABLE(SERVICE_WORKER)
116     encoder << hasRegisteredServiceWorkers;
117 #endif
118     encoder << needsFontAttributes;
119     encoder << iceCandidateFilteringEnabled;
120     encoder << enumeratingAllNetworkInterfacesEnabled;
121     encoder << userContentWorlds;
122     encoder << userScripts;
123     encoder << userStyleSheets;
124     encoder << messageHandlers;
125 #if ENABLE(CONTENT_EXTENSIONS)
126     encoder << contentRuleLists;
127 #endif
128 }
129
130 Optional<WebPageCreationParameters> WebPageCreationParameters::decode(IPC::Decoder& decoder)
131 {
132     WebPageCreationParameters parameters;
133     if (!decoder.decode(parameters.viewSize))
134         return WTF::nullopt;
135     if (!decoder.decode(parameters.activityState))
136         return WTF::nullopt;
137     if (!decoder.decode(parameters.store))
138         return WTF::nullopt;
139     if (!decoder.decodeEnum(parameters.drawingAreaType))
140         return WTF::nullopt;
141     Optional<WebPageGroupData> pageGroupData;
142     decoder >> pageGroupData;
143     if (!pageGroupData)
144         return WTF::nullopt;
145     parameters.pageGroupData = WTFMove(*pageGroupData);
146     if (!decoder.decode(parameters.drawsBackground))
147         return WTF::nullopt;
148     if (!decoder.decode(parameters.isEditable))
149         return WTF::nullopt;
150     if (!decoder.decode(parameters.underlayColor))
151         return WTF::nullopt;
152     if (!decoder.decode(parameters.useFixedLayout))
153         return WTF::nullopt;
154     if (!decoder.decode(parameters.fixedLayoutSize))
155         return WTF::nullopt;
156     if (!decoder.decode(parameters.alwaysShowsHorizontalScroller))
157         return WTF::nullopt;
158     if (!decoder.decode(parameters.alwaysShowsVerticalScroller))
159         return WTF::nullopt;
160     if (!decoder.decodeEnum(parameters.paginationMode))
161         return WTF::nullopt;
162     if (!decoder.decode(parameters.paginationBehavesLikeColumns))
163         return WTF::nullopt;
164     if (!decoder.decode(parameters.pageLength))
165         return WTF::nullopt;
166     if (!decoder.decode(parameters.gapBetweenPages))
167         return WTF::nullopt;
168     if (!decoder.decode(parameters.paginationLineGridEnabled))
169         return WTF::nullopt;
170
171     Optional<String> userAgent;
172     decoder >> userAgent;
173     if (!userAgent)
174         return WTF::nullopt;
175     parameters.userAgent = WTFMove(*userAgent);
176
177     Optional<Vector<BackForwardListItemState>> itemStates;
178     decoder >> itemStates;
179     if (!itemStates)
180         return WTF::nullopt;
181     parameters.itemStates = WTFMove(*itemStates);
182
183     if (!decoder.decode(parameters.sessionID))
184         return WTF::nullopt;
185
186     Optional<uint64_t> userContentControllerIdentifier;
187     decoder >> userContentControllerIdentifier;
188     if (!userContentControllerIdentifier)
189         return WTF::nullopt;
190     parameters.userContentControllerID = makeObjectIdentifier<UserContentControllerIdentifierType>(*userContentControllerIdentifier);
191
192     if (!decoder.decode(parameters.visitedLinkTableID))
193         return WTF::nullopt;
194     if (!decoder.decode(parameters.websiteDataStoreID))
195         return WTF::nullopt;
196     if (!decoder.decode(parameters.canRunBeforeUnloadConfirmPanel))
197         return WTF::nullopt;
198     if (!decoder.decode(parameters.canRunModal))
199         return WTF::nullopt;
200     if (!decoder.decode(parameters.deviceScaleFactor))
201         return WTF::nullopt;
202     if (!decoder.decode(parameters.viewScaleFactor))
203         return WTF::nullopt;
204     if (!decoder.decode(parameters.textZoomFactor))
205         return WTF::nullopt;
206     if (!decoder.decode(parameters.pageZoomFactor))
207         return WTF::nullopt;
208     if (!decoder.decode(parameters.topContentInset))
209         return WTF::nullopt;
210     if (!decoder.decode(parameters.mediaVolume))
211         return WTF::nullopt;
212     if (!decoder.decode(parameters.muted))
213         return WTF::nullopt;
214     if (!decoder.decode(parameters.mayStartMediaWhenInWindow))
215         return WTF::nullopt;
216     if (!decoder.decode(parameters.viewLayoutSize))
217         return WTF::nullopt;
218     if (!decoder.decode(parameters.autoSizingShouldExpandToViewHeight))
219         return WTF::nullopt;
220     if (!decoder.decode(parameters.viewportSizeForCSSViewportUnits))
221         return WTF::nullopt;
222     if (!decoder.decodeEnum(parameters.scrollPinningBehavior))
223         return WTF::nullopt;
224
225     Optional<Optional<uint32_t>> scrollbarOverlayStyle;
226     decoder >> scrollbarOverlayStyle;
227     if (!scrollbarOverlayStyle)
228         return WTF::nullopt;
229     parameters.scrollbarOverlayStyle = WTFMove(*scrollbarOverlayStyle);
230
231     if (!decoder.decode(parameters.backgroundExtendsBeyondPage))
232         return WTF::nullopt;
233     if (!decoder.decodeEnum(parameters.layerHostingMode))
234         return WTF::nullopt;
235     if (!decoder.decode(parameters.mimeTypesWithCustomContentProviders))
236         return WTF::nullopt;
237     if (!decoder.decode(parameters.controlledByAutomation))
238         return WTF::nullopt;
239     if (!decoder.decode(parameters.isProcessSwap))
240         return WTF::nullopt;
241     if (!decoder.decode(parameters.useDarkAppearance))
242         return WTF::nullopt;
243
244 #if PLATFORM(MAC)
245     if (!decoder.decode(parameters.colorSpace))
246         return WTF::nullopt;
247     if (!decoder.decode(parameters.useSystemAppearance))
248         return WTF::nullopt;
249 #endif
250
251 #if PLATFORM(IOS_FAMILY)
252     if (!decoder.decode(parameters.screenSize))
253         return WTF::nullopt;
254     if (!decoder.decode(parameters.availableScreenSize))
255         return WTF::nullopt;
256     if (!decoder.decode(parameters.overrideScreenSize))
257         return WTF::nullopt;
258     if (!decoder.decode(parameters.textAutosizingWidth))
259         return WTF::nullopt;
260     if (!decoder.decode(parameters.ignoresViewportScaleLimits))
261         return WTF::nullopt;
262     if (!decoder.decode(parameters.viewportConfigurationViewLayoutSize))
263         return WTF::nullopt;
264     if (!decoder.decode(parameters.viewportConfigurationLayoutSizeScaleFactor))
265         return WTF::nullopt;
266     if (!decoder.decode(parameters.viewportConfigurationViewSize))
267         return WTF::nullopt;
268     if (!decoder.decode(parameters.maximumUnobscuredSize))
269         return WTF::nullopt;
270     if (!decoder.decode(parameters.deviceOrientation))
271         return WTF::nullopt;
272 #endif
273
274 #if PLATFORM(COCOA)
275     if (!decoder.decode(parameters.smartInsertDeleteEnabled))
276         return WTF::nullopt;
277     if (!decoder.decode(parameters.additionalSupportedImageTypes))
278         return WTF::nullopt;
279 #endif
280
281 #if PLATFORM(WPE)
282     if (!decoder.decode(parameters.hostFileDescriptor))
283         return WTF::nullopt;
284 #endif
285
286     if (!decoder.decode(parameters.appleMailPaginationQuirkEnabled))
287         return WTF::nullopt;
288
289     if (!decoder.decode(parameters.appleMailLinesClampEnabled))
290         return WTF::nullopt;
291
292     if (!decoder.decode(parameters.shouldScaleViewToFitDocument))
293         return WTF::nullopt;
294
295     if (!decoder.decodeEnum(parameters.userInterfaceLayoutDirection))
296         return WTF::nullopt;
297     if (!decoder.decode(parameters.observedLayoutMilestones))
298         return WTF::nullopt;
299
300     if (!decoder.decode(parameters.overrideContentSecurityPolicy))
301         return WTF::nullopt;
302
303     Optional<Optional<double>> cpuLimit;
304     decoder >> cpuLimit;
305     if (!cpuLimit)
306         return WTF::nullopt;
307     parameters.cpuLimit = WTFMove(*cpuLimit);
308
309     if (!decoder.decode(parameters.urlSchemeHandlers))
310         return WTF::nullopt;
311
312 #if ENABLE(APPLICATION_MANIFEST)
313     Optional<Optional<WebCore::ApplicationManifest>> applicationManifest;
314     decoder >> applicationManifest;
315     if (!applicationManifest)
316         return WTF::nullopt;
317     parameters.applicationManifest = WTFMove(*applicationManifest);
318 #endif
319 #if ENABLE(SERVICE_WORKER)
320     if (!decoder.decode(parameters.hasRegisteredServiceWorkers))
321         return WTF::nullopt;
322 #endif
323
324     if (!decoder.decode(parameters.needsFontAttributes))
325         return WTF::nullopt;
326
327     if (!decoder.decode(parameters.iceCandidateFilteringEnabled))
328         return WTF::nullopt;
329
330     if (!decoder.decode(parameters.enumeratingAllNetworkInterfacesEnabled))
331         return WTF::nullopt;
332
333     Optional<Vector<std::pair<uint64_t, String>>> userContentWorlds;
334     decoder >> userContentWorlds;
335     if (!userContentWorlds)
336         return WTF::nullopt;
337     parameters.userContentWorlds = WTFMove(*userContentWorlds);
338
339     Optional<Vector<WebUserScriptData>> userScripts;
340     decoder >> userScripts;
341     if (!userScripts)
342         return WTF::nullopt;
343     parameters.userScripts = WTFMove(*userScripts);
344     
345     Optional<Vector<WebUserStyleSheetData>> userStyleSheets;
346     decoder >> userStyleSheets;
347     if (!userStyleSheets)
348         return WTF::nullopt;
349     parameters.userStyleSheets = WTFMove(*userStyleSheets);
350     
351     Optional<Vector<WebScriptMessageHandlerData>> messageHandlers;
352     decoder >> messageHandlers;
353     if (!messageHandlers)
354         return WTF::nullopt;
355     parameters.messageHandlers = WTFMove(*messageHandlers);
356     
357 #if ENABLE(CONTENT_EXTENSIONS)
358     Optional<Vector<std::pair<String, WebCompiledContentRuleListData>>> contentRuleLists;
359     decoder >> contentRuleLists;
360     if (!contentRuleLists)
361         return WTF::nullopt;
362     parameters.contentRuleLists = WTFMove(*contentRuleLists);
363 #endif
364
365     return WTFMove(parameters);
366 }
367
368 } // namespace WebKit