2 * Copyright (C) 2012-2017 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 "NetworkProcessCreationParameters.h"
29 #include "ArgumentCoders.h"
30 #include "WebCoreArgumentCoders.h"
33 #include "ArgumentCodersCF.h"
38 NetworkProcessCreationParameters::NetworkProcessCreationParameters()
42 void NetworkProcessCreationParameters::encode(IPC::Encoder& encoder) const
44 encoder << defaultSessionParameters;
45 encoder << privateBrowsingEnabled;
46 encoder.encodeEnum(cacheModel);
47 encoder << diskCacheSizeOverride;
48 encoder << canHandleHTTPSServerTrustEvaluation;
49 encoder << cacheStorageDirectory;
50 encoder << cacheStoragePerOriginQuota;
51 encoder << cacheStorageDirectoryExtensionHandle;
52 encoder << diskCacheDirectory;
53 encoder << diskCacheDirectoryExtensionHandle;
54 encoder << shouldEnableNetworkCache;
55 encoder << shouldEnableNetworkCacheEfficacyLogging;
56 #if ENABLE(NETWORK_CACHE_SPECULATIVE_REVALIDATION)
57 encoder << shouldEnableNetworkCacheSpeculativeRevalidation;
60 encoder << uiProcessCookieStorageIdentifier;
63 encoder << cookieStorageDirectoryExtensionHandle;
64 encoder << containerCachesDirectoryExtensionHandle;
65 encoder << parentBundleDirectoryExtensionHandle;
67 encoder << shouldSuppressMemoryPressureHandler;
68 encoder << shouldUseTestingNetworkSession;
69 encoder << loadThrottleLatency;
70 encoder << urlSchemesRegisteredForCustomProtocols;
71 encoder << presentingApplicationPID;
73 encoder << parentProcessName;
74 encoder << uiProcessBundleIdentifier;
75 encoder << nsURLCacheMemoryCapacity;
76 encoder << nsURLCacheDiskCapacity;
77 encoder << sourceApplicationBundleIdentifier;
78 encoder << sourceApplicationSecondaryIdentifier;
80 encoder << ctDataConnectionServiceType;
83 encoder << httpsProxy;
85 IPC::encode(encoder, networkATSContext.get());
87 encoder << cookieStoragePartitioningEnabled;
88 encoder << storageAccessAPIEnabled;
91 encoder << cookiePersistentStoragePath;
92 encoder << cookiePersistentStorageType;
93 encoder.encodeEnum(cookieAcceptPolicy);
94 encoder << ignoreTLSErrors;
96 encoder << proxySettings;
98 #if HAVE(CFNETWORK_STORAGE_PARTITIONING) && !RELEASE_LOG_DISABLED
99 encoder << logCookieInformation;
102 encoder << memoryPressureMonitorHandle;
104 #if ENABLE(NETWORK_CAPTURE)
105 encoder << recordReplayMode;
106 encoder << recordReplayCacheLocation;
110 bool NetworkProcessCreationParameters::decode(IPC::Decoder& decoder, NetworkProcessCreationParameters& result)
112 std::optional<NetworkSessionCreationParameters> defaultSessionParameters;
113 decoder >> defaultSessionParameters;
114 if (!defaultSessionParameters)
116 result.defaultSessionParameters = WTFMove(*defaultSessionParameters);
118 if (!decoder.decode(result.privateBrowsingEnabled))
120 if (!decoder.decodeEnum(result.cacheModel))
122 if (!decoder.decode(result.diskCacheSizeOverride))
124 if (!decoder.decode(result.canHandleHTTPSServerTrustEvaluation))
126 if (!decoder.decode(result.cacheStorageDirectory))
128 if (!decoder.decode(result.cacheStoragePerOriginQuota))
131 std::optional<SandboxExtension::Handle> cacheStorageDirectoryExtensionHandle;
132 decoder >> cacheStorageDirectoryExtensionHandle;
133 if (!cacheStorageDirectoryExtensionHandle)
135 result.cacheStorageDirectoryExtensionHandle = WTFMove(*cacheStorageDirectoryExtensionHandle);
137 if (!decoder.decode(result.diskCacheDirectory))
140 std::optional<SandboxExtension::Handle> diskCacheDirectoryExtensionHandle;
141 decoder >> diskCacheDirectoryExtensionHandle;
142 if (!diskCacheDirectoryExtensionHandle)
144 result.diskCacheDirectoryExtensionHandle = WTFMove(*diskCacheDirectoryExtensionHandle);
146 if (!decoder.decode(result.shouldEnableNetworkCache))
148 if (!decoder.decode(result.shouldEnableNetworkCacheEfficacyLogging))
150 #if ENABLE(NETWORK_CACHE_SPECULATIVE_REVALIDATION)
151 if (!decoder.decode(result.shouldEnableNetworkCacheSpeculativeRevalidation))
155 if (!decoder.decode(result.uiProcessCookieStorageIdentifier))
159 std::optional<SandboxExtension::Handle> cookieStorageDirectoryExtensionHandle;
160 decoder >> cookieStorageDirectoryExtensionHandle;
161 if (!cookieStorageDirectoryExtensionHandle)
163 result.cookieStorageDirectoryExtensionHandle = WTFMove(*cookieStorageDirectoryExtensionHandle);
165 std::optional<SandboxExtension::Handle> containerCachesDirectoryExtensionHandle;
166 decoder >> containerCachesDirectoryExtensionHandle;
167 if (!containerCachesDirectoryExtensionHandle)
169 result.containerCachesDirectoryExtensionHandle = WTFMove(*containerCachesDirectoryExtensionHandle);
171 std::optional<SandboxExtension::Handle> parentBundleDirectoryExtensionHandle;
172 decoder >> parentBundleDirectoryExtensionHandle;
173 if (!parentBundleDirectoryExtensionHandle)
175 result.parentBundleDirectoryExtensionHandle = WTFMove(*parentBundleDirectoryExtensionHandle);
177 if (!decoder.decode(result.shouldSuppressMemoryPressureHandler))
179 if (!decoder.decode(result.shouldUseTestingNetworkSession))
181 if (!decoder.decode(result.loadThrottleLatency))
183 if (!decoder.decode(result.urlSchemesRegisteredForCustomProtocols))
185 if (!decoder.decode(result.presentingApplicationPID))
188 if (!decoder.decode(result.parentProcessName))
190 if (!decoder.decode(result.uiProcessBundleIdentifier))
192 if (!decoder.decode(result.nsURLCacheMemoryCapacity))
194 if (!decoder.decode(result.nsURLCacheDiskCapacity))
196 if (!decoder.decode(result.sourceApplicationBundleIdentifier))
198 if (!decoder.decode(result.sourceApplicationSecondaryIdentifier))
201 if (!decoder.decode(result.ctDataConnectionServiceType))
204 if (!decoder.decode(result.httpProxy))
206 if (!decoder.decode(result.httpsProxy))
209 if (!IPC::decode(decoder, result.networkATSContext))
212 if (!decoder.decode(result.cookieStoragePartitioningEnabled))
214 if (!decoder.decode(result.storageAccessAPIEnabled))
219 if (!decoder.decode(result.cookiePersistentStoragePath))
221 if (!decoder.decode(result.cookiePersistentStorageType))
223 if (!decoder.decodeEnum(result.cookieAcceptPolicy))
225 if (!decoder.decode(result.ignoreTLSErrors))
227 if (!decoder.decode(result.languages))
229 if (!decoder.decode(result.proxySettings))
233 #if HAVE(CFNETWORK_STORAGE_PARTITIONING) && !RELEASE_LOG_DISABLED
234 if (!decoder.decode(result.logCookieInformation))
239 if (!decoder.decode(result.memoryPressureMonitorHandle))
243 #if ENABLE(NETWORK_CAPTURE)
244 if (!decoder.decode(result.recordReplayMode))
246 if (!decoder.decode(result.recordReplayCacheLocation))
253 } // namespace WebKit