2 * Copyright (C) 2010, 2011, 2012 Apple Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
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.
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.
27 #include "WebProcessCreationParameters.h"
30 #include "WebCoreArgumentCoders.h"
34 WebProcessCreationParameters::WebProcessCreationParameters()
35 : shouldAlwaysUseComplexTextCodePath(false)
36 , shouldUseFontSmoothing(true)
37 , defaultRequestTimeoutInterval(INT_MAX)
39 , nsURLCacheMemoryCapacity(0)
40 , nsURLCacheDiskCapacity(0)
41 , shouldForceScreenFontSubstitution(false)
42 , shouldEnableKerningAndLigaturesByDefault(false)
43 , shouldEnableJIT(false)
44 , shouldEnableFTLJIT(false)
45 , shouldEnableMemoryPressureReliefLogging(false)
47 #if ENABLE(NETWORK_PROCESS)
48 , usesNetworkProcess(false)
50 , memoryCacheDisabled(false)
51 #if ENABLE(SERVICE_CONTROLS)
52 , hasImageServices(false)
53 , hasSelectionServices(false)
54 , hasRichContentServices(false)
59 void WebProcessCreationParameters::encode(IPC::ArgumentEncoder& encoder) const
61 encoder << injectedBundlePath;
62 encoder << injectedBundlePathExtensionHandle;
63 encoder << applicationCacheDirectory;
64 encoder << applicationCacheDirectoryExtensionHandle;
65 encoder << webSQLDatabaseDirectory;
66 encoder << webSQLDatabaseDirectoryExtensionHandle;
67 encoder << diskCacheDirectory;
68 encoder << diskCacheDirectoryExtensionHandle;
69 encoder << cookieStorageDirectory;
71 encoder << cookieStorageDirectoryExtensionHandle;
72 encoder << openGLCacheDirectoryExtensionHandle;
73 encoder << containerTemporaryDirectoryExtensionHandle;
74 encoder << hstsDatabasePathExtensionHandle;
76 encoder << shouldUseTestingNetworkSession;
77 encoder << urlSchemesRegistererdAsEmptyDocument;
78 encoder << urlSchemesRegisteredAsSecure;
79 encoder << urlSchemesForWhichDomainRelaxationIsForbidden;
80 encoder << urlSchemesRegisteredAsLocal;
81 encoder << urlSchemesRegisteredAsNoAccess;
82 encoder << urlSchemesRegisteredAsDisplayIsolated;
83 encoder << urlSchemesRegisteredAsCORSEnabled;
84 #if ENABLE(CACHE_PARTITIONING)
85 encoder << urlSchemesRegisteredAsCachePartitioned;
87 #if ENABLE(CUSTOM_PROTOCOLS)
88 encoder << urlSchemesRegisteredForCustomProtocols;
91 #if !ENABLE(CUSTOM_PROTOCOLS)
92 encoder << urlSchemesRegistered;
94 encoder << cookiePersistentStoragePath;
95 encoder << cookiePersistentStorageType;
96 encoder.encodeEnum(cookieAcceptPolicy);
97 encoder << ignoreTLSErrors;
99 encoder.encodeEnum(cacheModel);
100 encoder << shouldAlwaysUseComplexTextCodePath;
101 encoder << shouldUseFontSmoothing;
102 encoder << iconDatabaseEnabled;
103 encoder << terminationTimeout;
104 encoder << languages;
105 encoder << textCheckerState;
106 encoder << fullKeyboardAccessEnabled;
107 encoder << defaultRequestTimeoutInterval;
108 #if PLATFORM(COCOA) || USE(CFNETWORK)
109 encoder << uiProcessBundleIdentifier;
112 encoder << presenterApplicationPid;
113 encoder << accessibilityEnhancedUserInterfaceEnabled;
114 encoder << nsURLCacheMemoryCapacity;
115 encoder << nsURLCacheDiskCapacity;
116 encoder << acceleratedCompositingPort;
117 encoder << uiProcessBundleResourcePath;
118 encoder << uiProcessBundleResourcePathExtensionHandle;
119 encoder << shouldForceScreenFontSubstitution;
120 encoder << shouldEnableKerningAndLigaturesByDefault;
121 encoder << shouldEnableJIT;
122 encoder << shouldEnableFTLJIT;
123 encoder << shouldEnableMemoryPressureReliefLogging;
124 encoder << !!bundleParameterData;
125 if (bundleParameterData)
126 encoder << bundleParameterData->dataReference();
129 #if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
130 encoder << notificationPermissions;
133 #if ENABLE(NETWORK_PROCESS)
134 encoder << usesNetworkProcess;
137 encoder << plugInAutoStartOriginHashes;
138 encoder << plugInAutoStartOrigins;
139 encoder << memoryCacheDisabled;
141 #if ENABLE(SERVICE_CONTROLS)
142 encoder << hasImageServices;
143 encoder << hasSelectionServices;
147 bool WebProcessCreationParameters::decode(IPC::ArgumentDecoder& decoder, WebProcessCreationParameters& parameters)
149 if (!decoder.decode(parameters.injectedBundlePath))
151 if (!decoder.decode(parameters.injectedBundlePathExtensionHandle))
153 if (!decoder.decode(parameters.applicationCacheDirectory))
155 if (!decoder.decode(parameters.applicationCacheDirectoryExtensionHandle))
157 if (!decoder.decode(parameters.webSQLDatabaseDirectory))
159 if (!decoder.decode(parameters.webSQLDatabaseDirectoryExtensionHandle))
161 if (!decoder.decode(parameters.diskCacheDirectory))
163 if (!decoder.decode(parameters.diskCacheDirectoryExtensionHandle))
165 if (!decoder.decode(parameters.cookieStorageDirectory))
168 if (!decoder.decode(parameters.cookieStorageDirectoryExtensionHandle))
170 if (!decoder.decode(parameters.openGLCacheDirectoryExtensionHandle))
172 if (!decoder.decode(parameters.containerTemporaryDirectoryExtensionHandle))
174 if (!decoder.decode(parameters.hstsDatabasePathExtensionHandle))
177 if (!decoder.decode(parameters.shouldUseTestingNetworkSession))
179 if (!decoder.decode(parameters.urlSchemesRegistererdAsEmptyDocument))
181 if (!decoder.decode(parameters.urlSchemesRegisteredAsSecure))
183 if (!decoder.decode(parameters.urlSchemesForWhichDomainRelaxationIsForbidden))
185 if (!decoder.decode(parameters.urlSchemesRegisteredAsLocal))
187 if (!decoder.decode(parameters.urlSchemesRegisteredAsNoAccess))
189 if (!decoder.decode(parameters.urlSchemesRegisteredAsDisplayIsolated))
191 if (!decoder.decode(parameters.urlSchemesRegisteredAsCORSEnabled))
193 #if ENABLE(CACHE_PARTITIONING)
194 if (!decoder.decode(parameters.urlSchemesRegisteredAsCachePartitioned))
197 #if ENABLE(CUSTOM_PROTOCOLS)
198 if (!decoder.decode(parameters.urlSchemesRegisteredForCustomProtocols))
202 #if !ENABLE(CUSTOM_PROTOCOLS)
203 if (!decoder.decode(parameters.urlSchemesRegistered))
206 if (!decoder.decode(parameters.cookiePersistentStoragePath))
208 if (!decoder.decode(parameters.cookiePersistentStorageType))
210 if (!decoder.decodeEnum(parameters.cookieAcceptPolicy))
212 if (!decoder.decode(parameters.ignoreTLSErrors))
215 if (!decoder.decodeEnum(parameters.cacheModel))
217 if (!decoder.decode(parameters.shouldAlwaysUseComplexTextCodePath))
219 if (!decoder.decode(parameters.shouldUseFontSmoothing))
221 if (!decoder.decode(parameters.iconDatabaseEnabled))
223 if (!decoder.decode(parameters.terminationTimeout))
225 if (!decoder.decode(parameters.languages))
227 if (!decoder.decode(parameters.textCheckerState))
229 if (!decoder.decode(parameters.fullKeyboardAccessEnabled))
231 if (!decoder.decode(parameters.defaultRequestTimeoutInterval))
233 #if PLATFORM(COCOA) || USE(CFNETWORK)
234 if (!decoder.decode(parameters.uiProcessBundleIdentifier))
239 if (!decoder.decode(parameters.presenterApplicationPid))
241 if (!decoder.decode(parameters.accessibilityEnhancedUserInterfaceEnabled))
243 if (!decoder.decode(parameters.nsURLCacheMemoryCapacity))
245 if (!decoder.decode(parameters.nsURLCacheDiskCapacity))
247 if (!decoder.decode(parameters.acceleratedCompositingPort))
249 if (!decoder.decode(parameters.uiProcessBundleResourcePath))
251 if (!decoder.decode(parameters.uiProcessBundleResourcePathExtensionHandle))
253 if (!decoder.decode(parameters.shouldForceScreenFontSubstitution))
255 if (!decoder.decode(parameters.shouldEnableKerningAndLigaturesByDefault))
257 if (!decoder.decode(parameters.shouldEnableJIT))
259 if (!decoder.decode(parameters.shouldEnableFTLJIT))
261 if (!decoder.decode(parameters.shouldEnableMemoryPressureReliefLogging))
264 bool hasBundleParameterData;
265 if (!decoder.decode(hasBundleParameterData))
268 if (hasBundleParameterData) {
269 IPC::DataReference dataReference;
270 if (!decoder.decode(dataReference))
273 parameters.bundleParameterData = API::Data::create(dataReference.data(), dataReference.size());
277 #if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
278 if (!decoder.decode(parameters.notificationPermissions))
282 #if ENABLE(NETWORK_PROCESS)
283 if (!decoder.decode(parameters.usesNetworkProcess))
287 if (!decoder.decode(parameters.plugInAutoStartOriginHashes))
289 if (!decoder.decode(parameters.plugInAutoStartOrigins))
291 if (!decoder.decode(parameters.memoryCacheDisabled))
294 #if ENABLE(SERVICE_CONTROLS)
295 if (!decoder.decode(parameters.hasImageServices))
297 if (!decoder.decode(parameters.hasSelectionServices))
304 } // namespace WebKit