263034a4792210bc1c08def8ce6d7c642c5bf737
[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 << highestUsedBackForwardItemID;
57     encoder << userContentControllerID.toUInt64();
58     encoder << visitedLinkTableID;
59     encoder << websiteDataStoreID;
60     encoder << canRunBeforeUnloadConfirmPanel;
61     encoder << canRunModal;
62     encoder << deviceScaleFactor;
63     encoder << viewScaleFactor;
64     encoder << topContentInset;
65     encoder << mediaVolume;
66     encoder << muted;
67     encoder << mayStartMediaWhenInWindow;
68     encoder << minimumLayoutSize;
69     encoder << autoSizingShouldExpandToViewHeight;
70     encoder << viewportSizeForCSSViewportUnits;
71     encoder.encodeEnum(scrollPinningBehavior);
72     encoder << scrollbarOverlayStyle;
73     encoder << backgroundExtendsBeyondPage;
74     encoder.encodeEnum(layerHostingMode);
75     encoder << mimeTypesWithCustomContentProviders;
76     encoder << controlledByAutomation;
77
78 #if ENABLE(REMOTE_INSPECTOR)
79     encoder << allowsRemoteInspection;
80     encoder << remoteInspectionNameOverride;
81 #endif
82 #if PLATFORM(MAC)
83     encoder << colorSpace;
84     encoder << useSystemAppearance;
85     encoder << defaultAppearance;
86 #endif
87 #if PLATFORM(IOS)
88     encoder << screenSize;
89     encoder << availableScreenSize;
90     encoder << overrideScreenSize;
91     encoder << textAutosizingWidth;
92     encoder << ignoresViewportScaleLimits;
93     encoder << viewportConfigurationMinimumLayoutSize;
94     encoder << viewportConfigurationViewSize;
95     encoder << maximumUnobscuredSize;
96 #endif
97 #if PLATFORM(COCOA)
98     encoder << smartInsertDeleteEnabled;
99 #endif
100     encoder << appleMailPaginationQuirkEnabled;
101     encoder << appleMailLinesClampEnabled;
102     encoder << shouldScaleViewToFitDocument;
103     encoder.encodeEnum(userInterfaceLayoutDirection);
104     encoder.encodeEnum(observedLayoutMilestones);
105     encoder << overrideContentSecurityPolicy;
106     encoder << cpuLimit;
107     encoder << urlSchemeHandlers;
108 #if ENABLE(APPLICATION_MANIFEST)
109     encoder << applicationManifest;
110 #endif
111 #if ENABLE(SERVICE_WORKER)
112     encoder << hasRegisteredServiceWorkers;
113 #endif
114     encoder << iceCandidateFilteringEnabled;
115     encoder << enumeratingAllNetworkInterfacesEnabled;
116     encoder << userContentWorlds;
117     encoder << userScripts;
118     encoder << userStyleSheets;
119     encoder << messageHandlers;
120 #if ENABLE(CONTENT_EXTENSIONS)
121     encoder << contentRuleLists;
122 #endif
123 }
124
125 std::optional<WebPageCreationParameters> WebPageCreationParameters::decode(IPC::Decoder& decoder)
126 {
127     WebPageCreationParameters parameters;
128     if (!decoder.decode(parameters.viewSize))
129         return std::nullopt;
130     if (!decoder.decode(parameters.activityState))
131         return std::nullopt;
132     if (!decoder.decode(parameters.store))
133         return std::nullopt;
134     if (!decoder.decodeEnum(parameters.drawingAreaType))
135         return std::nullopt;
136     std::optional<WebPageGroupData> pageGroupData;
137     decoder >> pageGroupData;
138     if (!pageGroupData)
139         return std::nullopt;
140     parameters.pageGroupData = WTFMove(*pageGroupData);
141     if (!decoder.decode(parameters.drawsBackground))
142         return std::nullopt;
143     if (!decoder.decode(parameters.isEditable))
144         return std::nullopt;
145     if (!decoder.decode(parameters.underlayColor))
146         return std::nullopt;
147     if (!decoder.decode(parameters.useFixedLayout))
148         return std::nullopt;
149     if (!decoder.decode(parameters.fixedLayoutSize))
150         return std::nullopt;
151     if (!decoder.decode(parameters.alwaysShowsHorizontalScroller))
152         return std::nullopt;
153     if (!decoder.decode(parameters.alwaysShowsVerticalScroller))
154         return std::nullopt;
155     if (!decoder.decodeEnum(parameters.paginationMode))
156         return std::nullopt;
157     if (!decoder.decode(parameters.paginationBehavesLikeColumns))
158         return std::nullopt;
159     if (!decoder.decode(parameters.pageLength))
160         return std::nullopt;
161     if (!decoder.decode(parameters.gapBetweenPages))
162         return std::nullopt;
163     if (!decoder.decode(parameters.paginationLineGridEnabled))
164         return std::nullopt;
165
166     std::optional<String> userAgent;
167     decoder >> userAgent;
168     if (!userAgent)
169         return std::nullopt;
170     parameters.userAgent = WTFMove(*userAgent);
171
172     std::optional<Vector<BackForwardListItemState>> itemStates;
173     decoder >> itemStates;
174     if (!itemStates)
175         return std::nullopt;
176     parameters.itemStates = WTFMove(*itemStates);
177
178     if (!decoder.decode(parameters.sessionID))
179         return std::nullopt;
180     if (!decoder.decode(parameters.highestUsedBackForwardItemID))
181         return std::nullopt;
182
183     std::optional<uint64_t> userContentControllerIdentifier;
184     decoder >> userContentControllerIdentifier;
185     if (!userContentControllerIdentifier)
186         return std::nullopt;
187     parameters.userContentControllerID = makeObjectIdentifier<UserContentControllerIdentifierType>(*userContentControllerIdentifier);
188
189     if (!decoder.decode(parameters.visitedLinkTableID))
190         return std::nullopt;
191     if (!decoder.decode(parameters.websiteDataStoreID))
192         return std::nullopt;
193     if (!decoder.decode(parameters.canRunBeforeUnloadConfirmPanel))
194         return std::nullopt;
195     if (!decoder.decode(parameters.canRunModal))
196         return std::nullopt;
197     if (!decoder.decode(parameters.deviceScaleFactor))
198         return std::nullopt;
199     if (!decoder.decode(parameters.viewScaleFactor))
200         return std::nullopt;
201     if (!decoder.decode(parameters.topContentInset))
202         return std::nullopt;
203     if (!decoder.decode(parameters.mediaVolume))
204         return std::nullopt;
205     if (!decoder.decode(parameters.muted))
206         return std::nullopt;
207     if (!decoder.decode(parameters.mayStartMediaWhenInWindow))
208         return std::nullopt;
209     if (!decoder.decode(parameters.minimumLayoutSize))
210         return std::nullopt;
211     if (!decoder.decode(parameters.autoSizingShouldExpandToViewHeight))
212         return std::nullopt;
213     if (!decoder.decode(parameters.viewportSizeForCSSViewportUnits))
214         return std::nullopt;
215     if (!decoder.decodeEnum(parameters.scrollPinningBehavior))
216         return std::nullopt;
217
218     std::optional<std::optional<uint32_t>> scrollbarOverlayStyle;
219     decoder >> scrollbarOverlayStyle;
220     if (!scrollbarOverlayStyle)
221         return std::nullopt;
222     parameters.scrollbarOverlayStyle = WTFMove(*scrollbarOverlayStyle);
223
224     if (!decoder.decode(parameters.backgroundExtendsBeyondPage))
225         return std::nullopt;
226     if (!decoder.decodeEnum(parameters.layerHostingMode))
227         return std::nullopt;
228     if (!decoder.decode(parameters.mimeTypesWithCustomContentProviders))
229         return std::nullopt;
230     if (!decoder.decode(parameters.controlledByAutomation))
231         return std::nullopt;
232
233 #if ENABLE(REMOTE_INSPECTOR)
234     if (!decoder.decode(parameters.allowsRemoteInspection))
235         return std::nullopt;
236     if (!decoder.decode(parameters.remoteInspectionNameOverride))
237         return std::nullopt;
238 #endif
239
240 #if PLATFORM(MAC)
241     if (!decoder.decode(parameters.colorSpace))
242         return std::nullopt;
243     if (!decoder.decode(parameters.useSystemAppearance))
244         return std::nullopt;
245     if (!decoder.decode(parameters.defaultAppearance))
246         return std::nullopt;
247 #endif
248
249 #if PLATFORM(IOS)
250     if (!decoder.decode(parameters.screenSize))
251         return std::nullopt;
252     if (!decoder.decode(parameters.availableScreenSize))
253         return std::nullopt;
254     if (!decoder.decode(parameters.overrideScreenSize))
255         return std::nullopt;
256     if (!decoder.decode(parameters.textAutosizingWidth))
257         return std::nullopt;
258     if (!decoder.decode(parameters.ignoresViewportScaleLimits))
259         return std::nullopt;
260     if (!decoder.decode(parameters.viewportConfigurationMinimumLayoutSize))
261         return std::nullopt;
262     if (!decoder.decode(parameters.viewportConfigurationViewSize))
263         return std::nullopt;
264     if (!decoder.decode(parameters.maximumUnobscuredSize))
265         return std::nullopt;
266 #endif
267
268 #if PLATFORM(COCOA)
269     if (!decoder.decode(parameters.smartInsertDeleteEnabled))
270         return std::nullopt;
271 #endif
272
273     if (!decoder.decode(parameters.appleMailPaginationQuirkEnabled))
274         return std::nullopt;
275
276     if (!decoder.decode(parameters.appleMailLinesClampEnabled))
277         return std::nullopt;
278
279     if (!decoder.decode(parameters.shouldScaleViewToFitDocument))
280         return std::nullopt;
281
282     if (!decoder.decodeEnum(parameters.userInterfaceLayoutDirection))
283         return std::nullopt;
284     if (!decoder.decodeEnum(parameters.observedLayoutMilestones))
285         return std::nullopt;
286
287     if (!decoder.decode(parameters.overrideContentSecurityPolicy))
288         return std::nullopt;
289
290     std::optional<std::optional<double>> cpuLimit;
291     decoder >> cpuLimit;
292     if (!cpuLimit)
293         return std::nullopt;
294     parameters.cpuLimit = WTFMove(*cpuLimit);
295
296     if (!decoder.decode(parameters.urlSchemeHandlers))
297         return std::nullopt;
298
299 #if ENABLE(APPLICATION_MANIFEST)
300     std::optional<std::optional<WebCore::ApplicationManifest>> applicationManifest;
301     decoder >> applicationManifest;
302     if (!applicationManifest)
303         return std::nullopt;
304     parameters.applicationManifest = WTFMove(*applicationManifest);
305 #endif
306 #if ENABLE(SERVICE_WORKER)
307     if (!decoder.decode(parameters.hasRegisteredServiceWorkers))
308         return std::nullopt;
309 #endif
310
311     if (!decoder.decode(parameters.iceCandidateFilteringEnabled))
312         return std::nullopt;
313
314     if (!decoder.decode(parameters.enumeratingAllNetworkInterfacesEnabled))
315         return std::nullopt;
316
317     std::optional<Vector<std::pair<uint64_t, String>>> userContentWorlds;
318     decoder >> userContentWorlds;
319     if (!userContentWorlds)
320         return std::nullopt;
321     parameters.userContentWorlds = WTFMove(*userContentWorlds);
322
323     std::optional<Vector<WebUserScriptData>> userScripts;
324     decoder >> userScripts;
325     if (!userScripts)
326         return std::nullopt;
327     parameters.userScripts = WTFMove(*userScripts);
328     
329     std::optional<Vector<WebUserStyleSheetData>> userStyleSheets;
330     decoder >> userStyleSheets;
331     if (!userStyleSheets)
332         return std::nullopt;
333     parameters.userStyleSheets = WTFMove(*userStyleSheets);
334     
335     std::optional<Vector<WebScriptMessageHandlerData>> messageHandlers;
336     decoder >> messageHandlers;
337     if (!messageHandlers)
338         return std::nullopt;
339     parameters.messageHandlers = WTFMove(*messageHandlers);
340     
341 #if ENABLE(CONTENT_EXTENSIONS)
342     std::optional<Vector<std::pair<String, WebCompiledContentRuleListData>>> contentRuleLists;
343     decoder >> contentRuleLists;
344     if (!contentRuleLists)
345         return std::nullopt;
346     parameters.contentRuleLists = WTFMove(*contentRuleLists);
347 #endif
348
349     return WTFMove(parameters);
350 }
351
352 } // namespace WebKit