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