9d0c655a8385736b595eeebb13f5f20dbd41b080
[WebKit-https.git] / Source / WebKit2 / Shared / WebProcessCreationParameters.cpp
1 /*
2  * Copyright (C) 2010, 2011, 2012 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 "WebProcessCreationParameters.h"
28
29 #include "APIData.h"
30 #if PLATFORM(COCOA)
31 #include "ArgumentCodersCF.h"
32 #endif
33 #include "WebCoreArgumentCoders.h"
34
35 namespace WebKit {
36
37 WebProcessCreationParameters::WebProcessCreationParameters()
38     : shouldAlwaysUseComplexTextCodePath(false)
39     , shouldEnableMemoryPressureReliefLogging(false)
40     , shouldUseFontSmoothing(true)
41     , defaultRequestTimeoutInterval(INT_MAX)
42 #if PLATFORM(COCOA)
43     , shouldEnableJIT(false)
44     , shouldEnableFTLJIT(false)
45 #endif
46 #if ENABLE(NETWORK_PROCESS)
47     , usesNetworkProcess(false)
48 #endif
49     , memoryCacheDisabled(false)
50 #if ENABLE(SERVICE_CONTROLS)
51     , hasImageServices(false)
52     , hasSelectionServices(false)
53     , hasRichContentServices(false)
54 #endif
55 {
56 }
57
58 WebProcessCreationParameters::~WebProcessCreationParameters()
59 {
60 }
61
62 void WebProcessCreationParameters::encode(IPC::ArgumentEncoder& encoder) const
63 {
64     encoder << injectedBundlePath;
65     encoder << injectedBundlePathExtensionHandle;
66     encoder << initializationUserData;
67     encoder << applicationCacheDirectory;
68     encoder << applicationCacheDirectoryExtensionHandle;
69     encoder << webSQLDatabaseDirectory;
70     encoder << webSQLDatabaseDirectoryExtensionHandle;
71 #if ENABLE(SECCOMP_FILTERS)
72     encoder << cookieStorageDirectory;
73 #endif
74 #if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
75     encoder << uiProcessCookieStorageIdentifier;
76 #endif
77 #if PLATFORM(IOS)
78     encoder << cookieStorageDirectoryExtensionHandle;
79     encoder << containerCachesDirectoryExtensionHandle;
80     encoder << containerTemporaryDirectoryExtensionHandle;
81 #endif
82     encoder << mediaKeyStorageDirectory;
83     encoder << mediaKeyStorageDirectoryExtensionHandle;
84     encoder << shouldUseTestingNetworkSession;
85     encoder << urlSchemesRegisteredAsEmptyDocument;
86     encoder << urlSchemesRegisteredAsSecure;
87     encoder << urlSchemesRegisteredAsBypassingContentSecurityPolicy;
88     encoder << urlSchemesForWhichDomainRelaxationIsForbidden;
89     encoder << urlSchemesRegisteredAsLocal;
90     encoder << urlSchemesRegisteredAsNoAccess;
91     encoder << urlSchemesRegisteredAsDisplayIsolated;
92     encoder << urlSchemesRegisteredAsCORSEnabled;
93 #if ENABLE(CACHE_PARTITIONING)
94     encoder << urlSchemesRegisteredAsCachePartitioned;
95 #endif
96     encoder << urlSchemesRegisteredForCustomProtocols;
97 #if USE(SOUP)
98     encoder << diskCacheDirectory;
99     encoder << cookiePersistentStoragePath;
100     encoder << cookiePersistentStorageType;
101     encoder.encodeEnum(cookieAcceptPolicy);
102     encoder << ignoreTLSErrors;
103 #endif
104     encoder.encodeEnum(cacheModel);
105     encoder << shouldAlwaysUseComplexTextCodePath;
106     encoder << shouldEnableMemoryPressureReliefLogging;
107     encoder << shouldUseFontSmoothing;
108     encoder << fontWhitelist;
109     encoder << iconDatabaseEnabled;
110     encoder << terminationTimeout;
111     encoder << languages;
112     encoder << textCheckerState;
113     encoder << fullKeyboardAccessEnabled;
114     encoder << defaultRequestTimeoutInterval;
115 #if PLATFORM(COCOA) || USE(CFNETWORK)
116     encoder << uiProcessBundleIdentifier;
117 #endif
118 #if PLATFORM(COCOA)
119     encoder << presenterApplicationPid;
120     encoder << accessibilityEnhancedUserInterfaceEnabled;
121     encoder << acceleratedCompositingPort;
122     encoder << uiProcessBundleResourcePath;
123     encoder << uiProcessBundleResourcePathExtensionHandle;
124     encoder << shouldEnableJIT;
125     encoder << shouldEnableFTLJIT;
126     encoder << !!bundleParameterData;
127     if (bundleParameterData)
128         encoder << bundleParameterData->dataReference();
129 #endif
130
131 #if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
132     encoder << notificationPermissions;
133 #endif
134
135 #if ENABLE(NETWORK_PROCESS)
136     encoder << usesNetworkProcess;
137 #endif
138
139     encoder << plugInAutoStartOriginHashes;
140     encoder << plugInAutoStartOrigins;
141     encoder << memoryCacheDisabled;
142
143 #if ENABLE(SERVICE_CONTROLS)
144     encoder << hasImageServices;
145     encoder << hasSelectionServices;
146     encoder << hasRichContentServices;
147 #endif
148
149 #if ENABLE(NETSCAPE_PLUGIN_API)
150     encoder << pluginLoadClientPolicies;
151 #endif
152
153 #if TARGET_OS_IPHONE || (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
154     IPC::encode(encoder, networkATSContext.get());
155 #endif
156 }
157
158 bool WebProcessCreationParameters::decode(IPC::ArgumentDecoder& decoder, WebProcessCreationParameters& parameters)
159 {
160     if (!decoder.decode(parameters.injectedBundlePath))
161         return false;
162     if (!decoder.decode(parameters.injectedBundlePathExtensionHandle))
163         return false;
164     if (!decoder.decode(parameters.initializationUserData))
165         return false;
166     if (!decoder.decode(parameters.applicationCacheDirectory))
167         return false;
168     if (!decoder.decode(parameters.applicationCacheDirectoryExtensionHandle))
169         return false;
170     if (!decoder.decode(parameters.webSQLDatabaseDirectory))
171         return false;
172     if (!decoder.decode(parameters.webSQLDatabaseDirectoryExtensionHandle))
173         return false;
174 #if ENABLE(SECCOMP_FILTERS)
175     if (!decoder.decode(parameters.cookieStorageDirectory))
176         return false;
177 #endif
178 #if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
179     if (!decoder.decode(parameters.uiProcessCookieStorageIdentifier))
180         return false;
181 #endif
182 #if PLATFORM(IOS)
183     if (!decoder.decode(parameters.cookieStorageDirectoryExtensionHandle))
184         return false;
185     if (!decoder.decode(parameters.containerCachesDirectoryExtensionHandle))
186         return false;
187     if (!decoder.decode(parameters.containerTemporaryDirectoryExtensionHandle))
188         return false;
189 #endif
190     if (!decoder.decode(parameters.mediaKeyStorageDirectory))
191         return false;
192     if (!decoder.decode(parameters.mediaKeyStorageDirectoryExtensionHandle))
193         return false;
194     if (!decoder.decode(parameters.shouldUseTestingNetworkSession))
195         return false;
196     if (!decoder.decode(parameters.urlSchemesRegisteredAsEmptyDocument))
197         return false;
198     if (!decoder.decode(parameters.urlSchemesRegisteredAsSecure))
199         return false;
200     if (!decoder.decode(parameters.urlSchemesRegisteredAsBypassingContentSecurityPolicy))
201         return false;
202     if (!decoder.decode(parameters.urlSchemesForWhichDomainRelaxationIsForbidden))
203         return false;
204     if (!decoder.decode(parameters.urlSchemesRegisteredAsLocal))
205         return false;
206     if (!decoder.decode(parameters.urlSchemesRegisteredAsNoAccess))
207         return false;
208     if (!decoder.decode(parameters.urlSchemesRegisteredAsDisplayIsolated))
209         return false;
210     if (!decoder.decode(parameters.urlSchemesRegisteredAsCORSEnabled))
211         return false;
212 #if ENABLE(CACHE_PARTITIONING)
213     if (!decoder.decode(parameters.urlSchemesRegisteredAsCachePartitioned))
214         return false;
215 #endif
216     if (!decoder.decode(parameters.urlSchemesRegisteredForCustomProtocols))
217         return false;
218 #if USE(SOUP)
219     if (!decoder.decode(parameters.diskCacheDirectory))
220         return false;
221     if (!decoder.decode(parameters.cookiePersistentStoragePath))
222         return false;
223     if (!decoder.decode(parameters.cookiePersistentStorageType))
224         return false;
225     if (!decoder.decodeEnum(parameters.cookieAcceptPolicy))
226         return false;
227     if (!decoder.decode(parameters.ignoreTLSErrors))
228         return false;
229 #endif
230     if (!decoder.decodeEnum(parameters.cacheModel))
231         return false;
232     if (!decoder.decode(parameters.shouldAlwaysUseComplexTextCodePath))
233         return false;
234     if (!decoder.decode(parameters.shouldEnableMemoryPressureReliefLogging))
235         return false;
236     if (!decoder.decode(parameters.shouldUseFontSmoothing))
237         return false;
238     if (!decoder.decode(parameters.fontWhitelist))
239         return false;
240     if (!decoder.decode(parameters.iconDatabaseEnabled))
241         return false;
242     if (!decoder.decode(parameters.terminationTimeout))
243         return false;
244     if (!decoder.decode(parameters.languages))
245         return false;
246     if (!decoder.decode(parameters.textCheckerState))
247         return false;
248     if (!decoder.decode(parameters.fullKeyboardAccessEnabled))
249         return false;
250     if (!decoder.decode(parameters.defaultRequestTimeoutInterval))
251         return false;
252 #if PLATFORM(COCOA) || USE(CFNETWORK)
253     if (!decoder.decode(parameters.uiProcessBundleIdentifier))
254         return false;
255 #endif
256
257 #if PLATFORM(COCOA)
258     if (!decoder.decode(parameters.presenterApplicationPid))
259         return false;
260     if (!decoder.decode(parameters.accessibilityEnhancedUserInterfaceEnabled))
261         return false;
262     if (!decoder.decode(parameters.acceleratedCompositingPort))
263         return false;
264     if (!decoder.decode(parameters.uiProcessBundleResourcePath))
265         return false;
266     if (!decoder.decode(parameters.uiProcessBundleResourcePathExtensionHandle))
267         return false;
268     if (!decoder.decode(parameters.shouldEnableJIT))
269         return false;
270     if (!decoder.decode(parameters.shouldEnableFTLJIT))
271         return false;
272
273     bool hasBundleParameterData;
274     if (!decoder.decode(hasBundleParameterData))
275         return false;
276
277     if (hasBundleParameterData) {
278         IPC::DataReference dataReference;
279         if (!decoder.decode(dataReference))
280             return false;
281
282         parameters.bundleParameterData = API::Data::create(dataReference.data(), dataReference.size());
283     }
284 #endif
285
286 #if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
287     if (!decoder.decode(parameters.notificationPermissions))
288         return false;
289 #endif
290
291 #if ENABLE(NETWORK_PROCESS)
292     if (!decoder.decode(parameters.usesNetworkProcess))
293         return false;
294 #endif
295
296     if (!decoder.decode(parameters.plugInAutoStartOriginHashes))
297         return false;
298     if (!decoder.decode(parameters.plugInAutoStartOrigins))
299         return false;
300     if (!decoder.decode(parameters.memoryCacheDisabled))
301         return false;
302
303 #if ENABLE(SERVICE_CONTROLS)
304     if (!decoder.decode(parameters.hasImageServices))
305         return false;
306     if (!decoder.decode(parameters.hasSelectionServices))
307         return false;
308     if (!decoder.decode(parameters.hasRichContentServices))
309         return false;
310 #endif
311
312 #if ENABLE(NETSCAPE_PLUGIN_API)
313     if (!decoder.decode(parameters.pluginLoadClientPolicies))
314         return false;
315 #endif
316
317 #if TARGET_OS_IPHONE || (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
318     if (!IPC::decode(decoder, parameters.networkATSContext))
319         return false;
320 #endif
321
322     return true;
323 }
324
325 } // namespace WebKit