1e631a088aa3576375b59c7246ba5c3d5344c9d7
[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 << shouldRewriteConstAsVar;
111     encoder << terminationTimeout;
112     encoder << languages;
113     encoder << textCheckerState;
114     encoder << fullKeyboardAccessEnabled;
115     encoder << defaultRequestTimeoutInterval;
116 #if PLATFORM(COCOA) || USE(CFNETWORK)
117     encoder << uiProcessBundleIdentifier;
118 #endif
119 #if PLATFORM(COCOA)
120     encoder << presenterApplicationPid;
121     encoder << accessibilityEnhancedUserInterfaceEnabled;
122     encoder << acceleratedCompositingPort;
123     encoder << uiProcessBundleResourcePath;
124     encoder << uiProcessBundleResourcePathExtensionHandle;
125     encoder << shouldEnableJIT;
126     encoder << shouldEnableFTLJIT;
127     encoder << !!bundleParameterData;
128     if (bundleParameterData)
129         encoder << bundleParameterData->dataReference();
130 #endif
131
132 #if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
133     encoder << notificationPermissions;
134 #endif
135
136 #if ENABLE(NETWORK_PROCESS)
137     encoder << usesNetworkProcess;
138 #endif
139
140     encoder << plugInAutoStartOriginHashes;
141     encoder << plugInAutoStartOrigins;
142     encoder << memoryCacheDisabled;
143
144 #if ENABLE(SERVICE_CONTROLS)
145     encoder << hasImageServices;
146     encoder << hasSelectionServices;
147     encoder << hasRichContentServices;
148 #endif
149
150 #if ENABLE(NETSCAPE_PLUGIN_API)
151     encoder << pluginLoadClientPolicies;
152 #endif
153
154 #if TARGET_OS_IPHONE || (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
155     IPC::encode(encoder, networkATSContext.get());
156 #endif
157 }
158
159 bool WebProcessCreationParameters::decode(IPC::ArgumentDecoder& decoder, WebProcessCreationParameters& parameters)
160 {
161     if (!decoder.decode(parameters.injectedBundlePath))
162         return false;
163     if (!decoder.decode(parameters.injectedBundlePathExtensionHandle))
164         return false;
165     if (!decoder.decode(parameters.initializationUserData))
166         return false;
167     if (!decoder.decode(parameters.applicationCacheDirectory))
168         return false;
169     if (!decoder.decode(parameters.applicationCacheDirectoryExtensionHandle))
170         return false;
171     if (!decoder.decode(parameters.webSQLDatabaseDirectory))
172         return false;
173     if (!decoder.decode(parameters.webSQLDatabaseDirectoryExtensionHandle))
174         return false;
175 #if ENABLE(SECCOMP_FILTERS)
176     if (!decoder.decode(parameters.cookieStorageDirectory))
177         return false;
178 #endif
179 #if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
180     if (!decoder.decode(parameters.uiProcessCookieStorageIdentifier))
181         return false;
182 #endif
183 #if PLATFORM(IOS)
184     if (!decoder.decode(parameters.cookieStorageDirectoryExtensionHandle))
185         return false;
186     if (!decoder.decode(parameters.containerCachesDirectoryExtensionHandle))
187         return false;
188     if (!decoder.decode(parameters.containerTemporaryDirectoryExtensionHandle))
189         return false;
190 #endif
191     if (!decoder.decode(parameters.mediaKeyStorageDirectory))
192         return false;
193     if (!decoder.decode(parameters.mediaKeyStorageDirectoryExtensionHandle))
194         return false;
195     if (!decoder.decode(parameters.shouldUseTestingNetworkSession))
196         return false;
197     if (!decoder.decode(parameters.urlSchemesRegisteredAsEmptyDocument))
198         return false;
199     if (!decoder.decode(parameters.urlSchemesRegisteredAsSecure))
200         return false;
201     if (!decoder.decode(parameters.urlSchemesRegisteredAsBypassingContentSecurityPolicy))
202         return false;
203     if (!decoder.decode(parameters.urlSchemesForWhichDomainRelaxationIsForbidden))
204         return false;
205     if (!decoder.decode(parameters.urlSchemesRegisteredAsLocal))
206         return false;
207     if (!decoder.decode(parameters.urlSchemesRegisteredAsNoAccess))
208         return false;
209     if (!decoder.decode(parameters.urlSchemesRegisteredAsDisplayIsolated))
210         return false;
211     if (!decoder.decode(parameters.urlSchemesRegisteredAsCORSEnabled))
212         return false;
213 #if ENABLE(CACHE_PARTITIONING)
214     if (!decoder.decode(parameters.urlSchemesRegisteredAsCachePartitioned))
215         return false;
216 #endif
217     if (!decoder.decode(parameters.urlSchemesRegisteredForCustomProtocols))
218         return false;
219 #if USE(SOUP)
220     if (!decoder.decode(parameters.diskCacheDirectory))
221         return false;
222     if (!decoder.decode(parameters.cookiePersistentStoragePath))
223         return false;
224     if (!decoder.decode(parameters.cookiePersistentStorageType))
225         return false;
226     if (!decoder.decodeEnum(parameters.cookieAcceptPolicy))
227         return false;
228     if (!decoder.decode(parameters.ignoreTLSErrors))
229         return false;
230 #endif
231     if (!decoder.decodeEnum(parameters.cacheModel))
232         return false;
233     if (!decoder.decode(parameters.shouldAlwaysUseComplexTextCodePath))
234         return false;
235     if (!decoder.decode(parameters.shouldEnableMemoryPressureReliefLogging))
236         return false;
237     if (!decoder.decode(parameters.shouldUseFontSmoothing))
238         return false;
239     if (!decoder.decode(parameters.fontWhitelist))
240         return false;
241     if (!decoder.decode(parameters.iconDatabaseEnabled))
242         return false;
243     if (!decoder.decode(parameters.shouldRewriteConstAsVar))
244         return false;
245     if (!decoder.decode(parameters.terminationTimeout))
246         return false;
247     if (!decoder.decode(parameters.languages))
248         return false;
249     if (!decoder.decode(parameters.textCheckerState))
250         return false;
251     if (!decoder.decode(parameters.fullKeyboardAccessEnabled))
252         return false;
253     if (!decoder.decode(parameters.defaultRequestTimeoutInterval))
254         return false;
255 #if PLATFORM(COCOA) || USE(CFNETWORK)
256     if (!decoder.decode(parameters.uiProcessBundleIdentifier))
257         return false;
258 #endif
259
260 #if PLATFORM(COCOA)
261     if (!decoder.decode(parameters.presenterApplicationPid))
262         return false;
263     if (!decoder.decode(parameters.accessibilityEnhancedUserInterfaceEnabled))
264         return false;
265     if (!decoder.decode(parameters.acceleratedCompositingPort))
266         return false;
267     if (!decoder.decode(parameters.uiProcessBundleResourcePath))
268         return false;
269     if (!decoder.decode(parameters.uiProcessBundleResourcePathExtensionHandle))
270         return false;
271     if (!decoder.decode(parameters.shouldEnableJIT))
272         return false;
273     if (!decoder.decode(parameters.shouldEnableFTLJIT))
274         return false;
275
276     bool hasBundleParameterData;
277     if (!decoder.decode(hasBundleParameterData))
278         return false;
279
280     if (hasBundleParameterData) {
281         IPC::DataReference dataReference;
282         if (!decoder.decode(dataReference))
283             return false;
284
285         parameters.bundleParameterData = API::Data::create(dataReference.data(), dataReference.size());
286     }
287 #endif
288
289 #if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
290     if (!decoder.decode(parameters.notificationPermissions))
291         return false;
292 #endif
293
294 #if ENABLE(NETWORK_PROCESS)
295     if (!decoder.decode(parameters.usesNetworkProcess))
296         return false;
297 #endif
298
299     if (!decoder.decode(parameters.plugInAutoStartOriginHashes))
300         return false;
301     if (!decoder.decode(parameters.plugInAutoStartOrigins))
302         return false;
303     if (!decoder.decode(parameters.memoryCacheDisabled))
304         return false;
305
306 #if ENABLE(SERVICE_CONTROLS)
307     if (!decoder.decode(parameters.hasImageServices))
308         return false;
309     if (!decoder.decode(parameters.hasSelectionServices))
310         return false;
311     if (!decoder.decode(parameters.hasRichContentServices))
312         return false;
313 #endif
314
315 #if ENABLE(NETSCAPE_PLUGIN_API)
316     if (!decoder.decode(parameters.pluginLoadClientPolicies))
317         return false;
318 #endif
319
320 #if TARGET_OS_IPHONE || (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
321     if (!IPC::decode(decoder, parameters.networkATSContext))
322         return false;
323 #endif
324
325     return true;
326 }
327
328 } // namespace WebKit