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 "ArgumentCoders.h"
30
31namespace WebKit {
32
33WebProcessCreationParameters::WebProcessCreationParameters()
34    : shouldTrackVisitedLinks(false)
35    , shouldAlwaysUseComplexTextCodePath(false)
36    , shouldUseFontSmoothing(true)
37    , defaultRequestTimeoutInterval(INT_MAX)
38#if PLATFORM(MAC)
39    , nsURLCacheMemoryCapacity(0)
40    , nsURLCacheDiskCapacity(0)
41    , shouldForceScreenFontSubstitution(false)
42    , shouldEnableKerningAndLigaturesByDefault(false)
43#endif
44#if ENABLE(NETWORK_PROCESS)
45    , usesNetworkProcess(false)
46#endif
47    , memoryCacheDisabled(false)
48{
49}
50
51void WebProcessCreationParameters::encode(CoreIPC::ArgumentEncoder& encoder) const
52{
53    encoder << injectedBundlePath;
54    encoder << injectedBundlePathExtensionHandle;
55    encoder << applicationCacheDirectory;
56    encoder << applicationCacheDirectoryExtensionHandle;
57    encoder << databaseDirectory;
58    encoder << databaseDirectoryExtensionHandle;
59    encoder << localStorageDirectory;
60    encoder << localStorageDirectoryExtensionHandle;
61    encoder << diskCacheDirectory;
62    encoder << diskCacheDirectoryExtensionHandle;
63    encoder << cookieStorageDirectory;
64    encoder << cookieStorageDirectoryExtensionHandle;
65    encoder << urlSchemesRegistererdAsEmptyDocument;
66    encoder << urlSchemesRegisteredAsSecure;
67    encoder << urlSchemesForWhichDomainRelaxationIsForbidden;
68    encoder << urlSchemesRegisteredAsLocal;
69    encoder << urlSchemesRegisteredAsNoAccess;
70    encoder << urlSchemesRegisteredAsDisplayIsolated;
71    encoder << urlSchemesRegisteredAsCORSEnabled;
72#if ENABLE(CUSTOM_PROTOCOLS)
73    encoder << urlSchemesRegisteredForCustomProtocols;
74#endif
75#if USE(SOUP)
76    encoder << urlSchemesRegistered;
77    encoder << cookiePersistentStoragePath;
78    encoder << cookiePersistentStorageType;
79    encoder.encodeEnum(cookieAcceptPolicy);
80    encoder << ignoreTLSErrors;
81#endif
82    encoder.encodeEnum(cacheModel);
83    encoder << shouldTrackVisitedLinks;
84    encoder << shouldAlwaysUseComplexTextCodePath;
85    encoder << shouldUseFontSmoothing;
86    encoder << iconDatabaseEnabled;
87    encoder << terminationTimeout;
88    encoder << languages;
89    encoder << textCheckerState;
90    encoder << fullKeyboardAccessEnabled;
91    encoder << defaultRequestTimeoutInterval;
92#if PLATFORM(MAC) || USE(CFNETWORK)
93    encoder << uiProcessBundleIdentifier;
94#endif
95#if PLATFORM(MAC)
96    encoder << presenterApplicationPid;
97    encoder << accessibilityEnhancedUserInterfaceEnabled;
98    encoder << nsURLCacheMemoryCapacity;
99    encoder << nsURLCacheDiskCapacity;
100    encoder << acceleratedCompositingPort;
101    encoder << uiProcessBundleResourcePath;
102    encoder << uiProcessBundleResourcePathExtensionHandle;
103    encoder << shouldForceScreenFontSubstitution;
104    encoder << shouldEnableKerningAndLigaturesByDefault;
105#endif
106
107#if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
108    encoder << notificationPermissions;
109#endif
110
111#if ENABLE(NETWORK_PROCESS)
112    encoder << usesNetworkProcess;
113#endif
114
115    encoder << plugInAutoStartOriginHashes;
116    encoder << plugInAutoStartOrigins;
117    encoder << memoryCacheDisabled;
118}
119
120bool WebProcessCreationParameters::decode(CoreIPC::ArgumentDecoder& decoder, WebProcessCreationParameters& parameters)
121{
122    if (!decoder.decode(parameters.injectedBundlePath))
123        return false;
124    if (!decoder.decode(parameters.injectedBundlePathExtensionHandle))
125        return false;
126    if (!decoder.decode(parameters.applicationCacheDirectory))
127        return false;
128    if (!decoder.decode(parameters.applicationCacheDirectoryExtensionHandle))
129        return false;
130    if (!decoder.decode(parameters.databaseDirectory))
131        return false;
132    if (!decoder.decode(parameters.databaseDirectoryExtensionHandle))
133        return false;
134    if (!decoder.decode(parameters.localStorageDirectory))
135        return false;
136    if (!decoder.decode(parameters.localStorageDirectoryExtensionHandle))
137        return false;
138    if (!decoder.decode(parameters.diskCacheDirectory))
139        return false;
140    if (!decoder.decode(parameters.diskCacheDirectoryExtensionHandle))
141        return false;
142    if (!decoder.decode(parameters.cookieStorageDirectory))
143        return false;
144    if (!decoder.decode(parameters.cookieStorageDirectoryExtensionHandle))
145        return false;
146    if (!decoder.decode(parameters.urlSchemesRegistererdAsEmptyDocument))
147        return false;
148    if (!decoder.decode(parameters.urlSchemesRegisteredAsSecure))
149        return false;
150    if (!decoder.decode(parameters.urlSchemesForWhichDomainRelaxationIsForbidden))
151        return false;
152    if (!decoder.decode(parameters.urlSchemesRegisteredAsLocal))
153        return false;
154    if (!decoder.decode(parameters.urlSchemesRegisteredAsNoAccess))
155        return false;
156    if (!decoder.decode(parameters.urlSchemesRegisteredAsDisplayIsolated))
157        return false;
158    if (!decoder.decode(parameters.urlSchemesRegisteredAsCORSEnabled))
159        return false;
160#if ENABLE(CUSTOM_PROTOCOLS)
161    if (!decoder.decode(parameters.urlSchemesRegisteredForCustomProtocols))
162        return false;
163#endif
164#if USE(SOUP)
165    if (!decoder.decode(parameters.urlSchemesRegistered))
166        return false;
167    if (!decoder.decode(parameters.cookiePersistentStoragePath))
168        return false;
169    if (!decoder.decode(parameters.cookiePersistentStorageType))
170        return false;
171    if (!decoder.decodeEnum(parameters.cookieAcceptPolicy))
172        return false;
173    if (!decoder.decode(parameters.ignoreTLSErrors))
174        return false;
175#endif
176    if (!decoder.decodeEnum(parameters.cacheModel))
177        return false;
178    if (!decoder.decode(parameters.shouldTrackVisitedLinks))
179        return false;
180    if (!decoder.decode(parameters.shouldAlwaysUseComplexTextCodePath))
181        return false;
182    if (!decoder.decode(parameters.shouldUseFontSmoothing))
183        return false;
184    if (!decoder.decode(parameters.iconDatabaseEnabled))
185        return false;
186    if (!decoder.decode(parameters.terminationTimeout))
187        return false;
188    if (!decoder.decode(parameters.languages))
189        return false;
190    if (!decoder.decode(parameters.textCheckerState))
191        return false;
192    if (!decoder.decode(parameters.fullKeyboardAccessEnabled))
193        return false;
194    if (!decoder.decode(parameters.defaultRequestTimeoutInterval))
195        return false;
196#if PLATFORM(MAC) || USE(CFNETWORK)
197    if (!decoder.decode(parameters.uiProcessBundleIdentifier))
198        return false;
199#endif
200
201#if PLATFORM(MAC)
202    if (!decoder.decode(parameters.presenterApplicationPid))
203        return false;
204    if (!decoder.decode(parameters.accessibilityEnhancedUserInterfaceEnabled))
205        return false;
206    if (!decoder.decode(parameters.nsURLCacheMemoryCapacity))
207        return false;
208    if (!decoder.decode(parameters.nsURLCacheDiskCapacity))
209        return false;
210    if (!decoder.decode(parameters.acceleratedCompositingPort))
211        return false;
212    if (!decoder.decode(parameters.uiProcessBundleResourcePath))
213        return false;
214    if (!decoder.decode(parameters.uiProcessBundleResourcePathExtensionHandle))
215        return false;
216    if (!decoder.decode(parameters.shouldForceScreenFontSubstitution))
217        return false;
218    if (!decoder.decode(parameters.shouldEnableKerningAndLigaturesByDefault))
219        return false;
220#endif
221
222#if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
223    if (!decoder.decode(parameters.notificationPermissions))
224        return false;
225#endif
226
227#if ENABLE(NETWORK_PROCESS)
228    if (!decoder.decode(parameters.usesNetworkProcess))
229        return false;
230#endif
231
232    if (!decoder.decode(parameters.plugInAutoStartOriginHashes))
233        return false;
234    if (!decoder.decode(parameters.plugInAutoStartOrigins))
235        return false;
236    if (!decoder.decode(parameters.memoryCacheDisabled))
237        return false;
238
239    return true;
240}
241
242} // namespace WebKit
243