blob: 067981f087eadd43860fa8f8dce7f76ab7827c78 [file] [log] [blame]
beidson@apple.com21dd3ed2012-10-12 17:13:13 +00001/*
fpizlo@apple.comf7a5acc2016-11-05 03:02:39 +00002 * Copyright (C) 2012-2016 Apple Inc. All rights reserved.
beidson@apple.com21dd3ed2012-10-12 17:13:13 +00003 *
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 "NetworkProcessProxy.h"
28
beidson@apple.comdaf91062013-01-26 00:03:48 +000029#include "AuthenticationChallengeProxy.h"
beidson@apple.com46303402016-04-08 16:57:29 +000030#include "DatabaseProcessMessages.h"
andersca@apple.com93b4c362012-12-16 01:26:05 +000031#include "DownloadProxyMessages.h"
beidson@apple.com11c7bf02017-03-06 02:53:31 +000032#include "LegacyCustomProtocolManagerProxyMessages.h"
krollin@apple.com03e63b12016-09-01 01:33:40 +000033#include "Logging.h"
beidson@apple.comc9a08bc2012-10-12 23:37:30 +000034#include "NetworkProcessCreationParameters.h"
35#include "NetworkProcessMessages.h"
beidson@apple.com46303402016-04-08 16:57:29 +000036#include "SandboxExtension.h"
timothy_horton@apple.com284c2162017-05-07 18:03:05 +000037#include "WebPageProxy.h"
beidson@apple.comdfbdf942012-10-19 23:26:16 +000038#include "WebProcessMessages.h"
weinig@apple.com9c5a3ea2014-12-23 20:29:26 +000039#include "WebProcessPool.h"
andersca@apple.comce927682015-02-27 20:14:22 +000040#include "WebsiteData.h"
beidson@apple.com21dd3ed2012-10-12 17:13:13 +000041
commit-queue@webkit.orgb48afca2013-12-08 18:26:15 +000042#if ENABLE(SEC_ITEM_SHIM)
43#include "SecItemShimProxy.h"
44#endif
45
bdakin@apple.com1539c6c2015-01-28 22:22:16 +000046#if PLATFORM(IOS)
dbates@webkit.orgdcec3832014-11-21 16:40:55 +000047#include <wtf/spi/darwin/XPCSPI.h>
48#endif
49
beidson@apple.comdaf91062013-01-26 00:03:48 +000050#define MESSAGE_CHECK(assertion) MESSAGE_CHECK_BASE(assertion, connection())
51
beidson@apple.com21dd3ed2012-10-12 17:13:13 +000052using namespace WebCore;
53
54namespace WebKit {
55
andersca@apple.com5ebf4582014-12-09 20:29:59 +000056static uint64_t generateCallbackID()
57{
58 static uint64_t callbackID;
59
60 return ++callbackID;
61}
62
gyuyoung.kim@webkit.org5f7960e2015-06-17 03:33:26 +000063Ref<NetworkProcessProxy> NetworkProcessProxy::create(WebProcessPool& processPool)
beidson@apple.com21dd3ed2012-10-12 17:13:13 +000064{
gyuyoung.kim@webkit.org5f7960e2015-06-17 03:33:26 +000065 return adoptRef(*new NetworkProcessProxy(processPool));
beidson@apple.com21dd3ed2012-10-12 17:13:13 +000066}
67
weinig@apple.com9c5a3ea2014-12-23 20:29:26 +000068NetworkProcessProxy::NetworkProcessProxy(WebProcessPool& processPool)
akling@apple.com8a932a42017-02-01 14:55:00 +000069 : ChildProcessProxy(processPool.alwaysRunsAtBackgroundPriority())
70 , m_processPool(processPool)
beidson@apple.comdfbdf942012-10-19 23:26:16 +000071 , m_numPendingConnectionRequests(0)
weinig@apple.com9c5a3ea2014-12-23 20:29:26 +000072 , m_customProtocolManagerProxy(this, processPool)
cdumez@apple.comf98c3bf2017-04-28 22:41:56 +000073 , m_throttler(*this, processPool.shouldTakeUIBackgroundAssertion())
beidson@apple.com21dd3ed2012-10-12 17:13:13 +000074{
ap@apple.com10a670e2012-12-05 23:28:31 +000075 connect();
76}
77
weinig@apple.com444fbd692013-01-27 05:32:53 +000078NetworkProcessProxy::~NetworkProcessProxy()
79{
andersca@apple.comce927682015-02-27 20:14:22 +000080 ASSERT(m_pendingFetchWebsiteDataCallbacks.isEmpty());
andersca@apple.com5ebf4582014-12-09 20:29:59 +000081 ASSERT(m_pendingDeleteWebsiteDataCallbacks.isEmpty());
andersca@apple.comce927682015-02-27 20:14:22 +000082 ASSERT(m_pendingDeleteWebsiteDataForOriginsCallbacks.isEmpty());
weinig@apple.com444fbd692013-01-27 05:32:53 +000083}
84
ap@apple.com10a670e2012-12-05 23:28:31 +000085void NetworkProcessProxy::getLaunchOptions(ProcessLauncher::LaunchOptions& launchOptions)
86{
andersca@apple.comb0b614f2016-02-12 21:11:28 +000087 launchOptions.processType = ProcessLauncher::ProcessType::Network;
ap@apple.com9640e6f2015-09-25 22:36:09 +000088 ChildProcessProxy::getLaunchOptions(launchOptions);
beidson@apple.com21dd3ed2012-10-12 17:13:13 +000089}
90
andersca@apple.com15bc0862015-01-16 21:37:42 +000091void NetworkProcessProxy::connectionWillOpen(IPC::Connection& connection)
andersca@apple.com296139a2013-02-12 20:56:57 +000092{
mitz@apple.comda402b72013-12-04 21:04:31 +000093#if ENABLE(SEC_ITEM_SHIM)
cdumez@apple.com4faf1ef2015-01-30 20:49:33 +000094 SecItemShimProxy::singleton().initializeConnection(connection);
mrobinson@webkit.orgab8540d2014-03-20 17:20:58 +000095#else
96 UNUSED_PARAM(connection);
andersca@apple.com296139a2013-02-12 20:56:57 +000097#endif
98}
99
beidson@apple.come1fcf792015-05-15 04:39:51 +0000100void NetworkProcessProxy::processWillShutDown(IPC::Connection& connection)
101{
102 ASSERT_UNUSED(connection, this->connection() == &connection);
103}
104
achristensen@apple.com0d7548e2017-01-18 22:43:22 +0000105void NetworkProcessProxy::getNetworkProcessConnection(Ref<Messages::WebProcessProxy::GetNetworkProcessConnection::DelayedReply>&& reply)
beidson@apple.com21dd3ed2012-10-12 17:13:13 +0000106{
achristensen@apple.com0d7548e2017-01-18 22:43:22 +0000107 m_pendingConnectionReplies.append(WTFMove(reply));
beidson@apple.com21dd3ed2012-10-12 17:13:13 +0000108
andersca@apple.com90ab0cb2014-02-27 23:16:41 +0000109 if (state() == State::Launching) {
beidson@apple.comdfbdf942012-10-19 23:26:16 +0000110 m_numPendingConnectionRequests++;
111 return;
112 }
113
andersca@apple.combcd68d42016-08-25 23:09:28 +0000114 connection()->send(Messages::NetworkProcess::CreateNetworkConnectionToWebProcess(), 0, IPC::SendOption::DispatchMessageEvenWhenWaitingForSyncReply);
beidson@apple.comdfbdf942012-10-19 23:26:16 +0000115}
116
jeffm@apple.com76858a12014-10-02 21:01:08 +0000117DownloadProxy* NetworkProcessProxy::createDownloadProxy(const ResourceRequest& resourceRequest)
andersca@apple.com12e74922012-12-15 23:11:52 +0000118{
119 if (!m_downloadProxyMap)
zandobersek@gmail.comda3be5e32014-04-27 13:40:14 +0000120 m_downloadProxyMap = std::make_unique<DownloadProxyMap>(this);
andersca@apple.com12e74922012-12-15 23:11:52 +0000121
weinig@apple.com9c5a3ea2014-12-23 20:29:26 +0000122 return m_downloadProxyMap->createDownloadProxy(m_processPool, resourceRequest);
andersca@apple.com12e74922012-12-15 23:11:52 +0000123}
124
andersca@apple.com8da0d682016-02-26 22:26:03 +0000125void NetworkProcessProxy::fetchWebsiteData(SessionID sessionID, OptionSet<WebsiteDataType> dataTypes, OptionSet<WebsiteDataFetchOption> fetchOptions, std::function<void (WebsiteData)> completionHandler)
andersca@apple.comce927682015-02-27 20:14:22 +0000126{
127 ASSERT(canSendMessage());
128
129 uint64_t callbackID = generateCallbackID();
andersca@apple.com73605122015-07-20 17:08:10 +0000130 auto token = throttler().backgroundActivityToken();
krollin@apple.com03e63b12016-09-01 01:33:40 +0000131 RELEASE_LOG_IF(sessionID.isAlwaysOnLoggingAllowed(), ProcessSuspension, "%p - NetworkProcessProxy is taking a background assertion because the Network process is fetching Website data", this);
andersca@apple.com73605122015-07-20 17:08:10 +0000132
cdumez@apple.combc419b62016-06-28 18:08:39 +0000133 m_pendingFetchWebsiteDataCallbacks.add(callbackID, [this, token, completionHandler, sessionID](WebsiteData websiteData) {
aestes@apple.com13aae082016-01-02 08:03:08 +0000134 completionHandler(WTFMove(websiteData));
krollin@apple.com03e63b12016-09-01 01:33:40 +0000135 RELEASE_LOG_IF(sessionID.isAlwaysOnLoggingAllowed(), ProcessSuspension, "%p - NetworkProcessProxy is releasing a background assertion because the Network process is done fetching Website data", this);
andersca@apple.com73605122015-07-20 17:08:10 +0000136 });
andersca@apple.comce927682015-02-27 20:14:22 +0000137
andersca@apple.com8da0d682016-02-26 22:26:03 +0000138 send(Messages::NetworkProcess::FetchWebsiteData(sessionID, dataTypes, fetchOptions, callbackID), 0);
andersca@apple.comce927682015-02-27 20:14:22 +0000139}
140
andersca@apple.com908a96d2016-02-26 19:49:36 +0000141void NetworkProcessProxy::deleteWebsiteData(WebCore::SessionID sessionID, OptionSet<WebsiteDataType> dataTypes, std::chrono::system_clock::time_point modifiedSince, std::function<void ()> completionHandler)
andersca@apple.com5ebf4582014-12-09 20:29:59 +0000142{
143 auto callbackID = generateCallbackID();
andersca@apple.com73605122015-07-20 17:08:10 +0000144 auto token = throttler().backgroundActivityToken();
krollin@apple.com03e63b12016-09-01 01:33:40 +0000145 RELEASE_LOG_IF(sessionID.isAlwaysOnLoggingAllowed(), ProcessSuspension, "%p - NetworkProcessProxy is taking a background assertion because the Network process is deleting Website data", this);
andersca@apple.com5ebf4582014-12-09 20:29:59 +0000146
cdumez@apple.combc419b62016-06-28 18:08:39 +0000147 m_pendingDeleteWebsiteDataCallbacks.add(callbackID, [this, token, completionHandler, sessionID] {
andersca@apple.com73605122015-07-20 17:08:10 +0000148 completionHandler();
krollin@apple.com03e63b12016-09-01 01:33:40 +0000149 RELEASE_LOG_IF(sessionID.isAlwaysOnLoggingAllowed(), ProcessSuspension, "%p - NetworkProcessProxy is releasing a background assertion because the Network process is done deleting Website data", this);
andersca@apple.com73605122015-07-20 17:08:10 +0000150 });
andersca@apple.com5ebf4582014-12-09 20:29:59 +0000151 send(Messages::NetworkProcess::DeleteWebsiteData(sessionID, dataTypes, modifiedSince, callbackID), 0);
152}
153
commit-queue@webkit.org778879b2016-11-12 01:18:22 +0000154void NetworkProcessProxy::deleteWebsiteDataForOrigins(SessionID sessionID, OptionSet<WebsiteDataType> dataTypes, const Vector<WebCore::SecurityOriginData>& origins, const Vector<String>& cookieHostNames, std::function<void()> completionHandler)
andersca@apple.comce927682015-02-27 20:14:22 +0000155{
156 ASSERT(canSendMessage());
157
158 uint64_t callbackID = generateCallbackID();
andersca@apple.com73605122015-07-20 17:08:10 +0000159 auto token = throttler().backgroundActivityToken();
krollin@apple.com03e63b12016-09-01 01:33:40 +0000160 RELEASE_LOG_IF(sessionID.isAlwaysOnLoggingAllowed(), ProcessSuspension, "%p - NetworkProcessProxy is taking a background assertion because the Network process is deleting Website data for several origins", this);
andersca@apple.com73605122015-07-20 17:08:10 +0000161
cdumez@apple.combc419b62016-06-28 18:08:39 +0000162 m_pendingDeleteWebsiteDataForOriginsCallbacks.add(callbackID, [this, token, completionHandler, sessionID] {
andersca@apple.com73605122015-07-20 17:08:10 +0000163 completionHandler();
krollin@apple.com03e63b12016-09-01 01:33:40 +0000164 RELEASE_LOG_IF(sessionID.isAlwaysOnLoggingAllowed(), ProcessSuspension, "%p - NetworkProcessProxy is releasing a background assertion because the Network process is done deleting Website data for several origins", this);
andersca@apple.com73605122015-07-20 17:08:10 +0000165 });
andersca@apple.comce927682015-02-27 20:14:22 +0000166
commit-queue@webkit.org778879b2016-11-12 01:18:22 +0000167 send(Messages::NetworkProcess::DeleteWebsiteDataForOrigins(sessionID, dataTypes, origins, cookieHostNames, callbackID), 0);
andersca@apple.comce927682015-02-27 20:14:22 +0000168}
169
beidson@apple.comdfbdf942012-10-19 23:26:16 +0000170void NetworkProcessProxy::networkProcessCrashedOrFailedToLaunch()
171{
172 // The network process must have crashed or exited, send any pending sync replies we might have.
173 while (!m_pendingConnectionReplies.isEmpty()) {
achristensen@apple.com0d7548e2017-01-18 22:43:22 +0000174 Ref<Messages::WebProcessProxy::GetNetworkProcessConnection::DelayedReply> reply = m_pendingConnectionReplies.takeFirst();
beidson@apple.comdfbdf942012-10-19 23:26:16 +0000175
commit-queue@webkit.orga91a0be2015-11-01 14:23:21 +0000176#if USE(UNIX_DOMAIN_SOCKETS)
andersca@apple.com69388f02013-12-30 20:20:02 +0000177 reply->send(IPC::Attachment());
commit-queue@webkit.orga91a0be2015-11-01 14:23:21 +0000178#elif OS(DARWIN)
179 reply->send(IPC::Attachment(0, MACH_MSG_TYPE_MOVE_SEND));
beidson@apple.comdfbdf942012-10-19 23:26:16 +0000180#else
181 notImplemented();
182#endif
183 }
184
andersca@apple.comce927682015-02-27 20:14:22 +0000185 for (const auto& callback : m_pendingFetchWebsiteDataCallbacks.values())
186 callback(WebsiteData());
187 m_pendingFetchWebsiteDataCallbacks.clear();
188
andersca@apple.com5ebf4582014-12-09 20:29:59 +0000189 for (const auto& callback : m_pendingDeleteWebsiteDataCallbacks.values())
190 callback();
191 m_pendingDeleteWebsiteDataCallbacks.clear();
192
andersca@apple.comce927682015-02-27 20:14:22 +0000193 for (const auto& callback : m_pendingDeleteWebsiteDataForOriginsCallbacks.values())
194 callback();
195 m_pendingDeleteWebsiteDataForOriginsCallbacks.clear();
196
beidson@apple.comdfbdf942012-10-19 23:26:16 +0000197 // Tell the network process manager to forget about this network process proxy. This may cause us to be deleted.
weinig@apple.com9c5a3ea2014-12-23 20:29:26 +0000198 m_processPool.networkProcessCrashed(this);
beidson@apple.comdfbdf942012-10-19 23:26:16 +0000199}
200
andersca@apple.com5ecb5312016-08-20 00:11:17 +0000201void NetworkProcessProxy::didReceiveMessage(IPC::Connection& connection, IPC::Decoder& decoder)
beidson@apple.comdfbdf942012-10-19 23:26:16 +0000202{
weinig@apple.comaa382042013-02-07 04:40:29 +0000203 if (dispatchMessage(connection, decoder))
andersca@apple.com93b4c362012-12-16 01:26:05 +0000204 return;
205
weinig@apple.com9c5a3ea2014-12-23 20:29:26 +0000206 if (m_processPool.dispatchMessage(connection, decoder))
ap@apple.coma6354cb2012-12-24 01:29:47 +0000207 return;
208
andersca@apple.com93914d82013-01-30 22:48:09 +0000209 didReceiveNetworkProcessProxyMessage(connection, decoder);
beidson@apple.com21dd3ed2012-10-12 17:13:13 +0000210}
211
andersca@apple.com5ecb5312016-08-20 00:11:17 +0000212void NetworkProcessProxy::didReceiveSyncMessage(IPC::Connection& connection, IPC::Decoder& decoder, std::unique_ptr<IPC::Encoder>& replyEncoder)
andersca@apple.com93b4c362012-12-16 01:26:05 +0000213{
weinig@apple.comaa382042013-02-07 04:40:29 +0000214 if (dispatchSyncMessage(connection, decoder, replyEncoder))
andersca@apple.com93b4c362012-12-16 01:26:05 +0000215 return;
216
217 ASSERT_NOT_REACHED();
218}
219
andersca@apple.com30e768b2015-01-04 20:14:45 +0000220void NetworkProcessProxy::didClose(IPC::Connection&)
beidson@apple.com21dd3ed2012-10-12 17:13:13 +0000221{
andersca@apple.com12e74922012-12-15 23:11:52 +0000222 if (m_downloadProxyMap)
223 m_downloadProxyMap->processDidClose();
carlosgc@webkit.org2cd97a72016-11-22 07:49:55 +0000224 m_customProtocolManagerProxy.processDidClose();
andersca@apple.com12e74922012-12-15 23:11:52 +0000225
cdumez@apple.com9b21ebc2015-04-03 17:54:47 +0000226 m_tokenForHoldingLockedFiles = nullptr;
227
beidson@apple.comdfbdf942012-10-19 23:26:16 +0000228 // This may cause us to be deleted.
229 networkProcessCrashedOrFailedToLaunch();
beidson@apple.com21dd3ed2012-10-12 17:13:13 +0000230}
231
andersca@apple.com30e768b2015-01-04 20:14:45 +0000232void NetworkProcessProxy::didReceiveInvalidMessage(IPC::Connection&, IPC::StringReference, IPC::StringReference)
beidson@apple.com21dd3ed2012-10-12 17:13:13 +0000233{
beidson@apple.com21dd3ed2012-10-12 17:13:13 +0000234}
235
andersca@apple.com69388f02013-12-30 20:20:02 +0000236void NetworkProcessProxy::didCreateNetworkConnectionToWebProcess(const IPC::Attachment& connectionIdentifier)
beidson@apple.comdfbdf942012-10-19 23:26:16 +0000237{
238 ASSERT(!m_pendingConnectionReplies.isEmpty());
239
240 // Grab the first pending connection reply.
241 RefPtr<Messages::WebProcessProxy::GetNetworkProcessConnection::DelayedReply> reply = m_pendingConnectionReplies.takeFirst();
242
commit-queue@webkit.orga91a0be2015-11-01 14:23:21 +0000243#if USE(UNIX_DOMAIN_SOCKETS)
svillar@igalia.come78749f2013-12-09 12:28:44 +0000244 reply->send(connectionIdentifier);
commit-queue@webkit.orga91a0be2015-11-01 14:23:21 +0000245#elif OS(DARWIN)
246 reply->send(IPC::Attachment(connectionIdentifier.port(), MACH_MSG_TYPE_MOVE_SEND));
beidson@apple.comdfbdf942012-10-19 23:26:16 +0000247#else
248 notImplemented();
249#endif
250}
251
beidson@apple.comdaf91062013-01-26 00:03:48 +0000252void NetworkProcessProxy::didReceiveAuthenticationChallenge(uint64_t pageID, uint64_t frameID, const WebCore::AuthenticationChallenge& coreChallenge, uint64_t challengeID)
253{
254 WebPageProxy* page = WebProcessProxy::webPage(pageID);
255 MESSAGE_CHECK(page);
256
krollin@apple.com77db1802016-06-20 20:52:45 +0000257 auto authenticationChallenge = AuthenticationChallengeProxy::create(coreChallenge, challengeID, connection());
258 page->didReceiveAuthenticationChallengeProxy(frameID, WTFMove(authenticationChallenge));
beidson@apple.comdaf91062013-01-26 00:03:48 +0000259}
260
andersca@apple.comce927682015-02-27 20:14:22 +0000261void NetworkProcessProxy::didFetchWebsiteData(uint64_t callbackID, const WebsiteData& websiteData)
262{
263 auto callback = m_pendingFetchWebsiteDataCallbacks.take(callbackID);
264 callback(websiteData);
265}
266
andersca@apple.com5ebf4582014-12-09 20:29:59 +0000267void NetworkProcessProxy::didDeleteWebsiteData(uint64_t callbackID)
268{
269 auto callback = m_pendingDeleteWebsiteDataCallbacks.take(callbackID);
270 callback();
271}
272
andersca@apple.comce927682015-02-27 20:14:22 +0000273void NetworkProcessProxy::didDeleteWebsiteDataForOrigins(uint64_t callbackID)
274{
275 auto callback = m_pendingDeleteWebsiteDataForOriginsCallbacks.take(callbackID);
276 callback();
277}
278
beidson@apple.com46303402016-04-08 16:57:29 +0000279void NetworkProcessProxy::grantSandboxExtensionsToDatabaseProcessForBlobs(uint64_t requestID, const Vector<String>& paths)
280{
annulen@yandex.ru6a854502016-05-01 21:08:52 +0000281#if ENABLE(DATABASE_PROCESS)
carlosgc@webkit.orgb48eddf2016-07-29 05:16:01 +0000282#if ENABLE(SANDBOX_EXTENSIONS)
beidson@apple.com46303402016-04-08 16:57:29 +0000283 SandboxExtension::HandleArray extensions;
284 extensions.allocate(paths.size());
285 for (size_t i = 0; i < paths.size(); ++i) {
286 // ReadWrite is required for creating hard links as well as deleting the temporary file, which the DatabaseProcess will do.
287 SandboxExtension::createHandle(paths[i], SandboxExtension::ReadWrite, extensions[i]);
288 }
289
290 m_processPool.sendToDatabaseProcessRelaunchingIfNecessary(Messages::DatabaseProcess::GrantSandboxExtensionsForBlobs(paths, extensions));
carlosgc@webkit.orgb48eddf2016-07-29 05:16:01 +0000291#endif
beidson@apple.com46303402016-04-08 16:57:29 +0000292 connection()->send(Messages::NetworkProcess::DidGrantSandboxExtensionsToDatabaseProcessForBlobs(requestID), 0);
annulen@yandex.ru6a854502016-05-01 21:08:52 +0000293#endif
beidson@apple.com46303402016-04-08 16:57:29 +0000294}
295
wilander@apple.com1bccb962017-03-09 04:02:14 +0000296#if HAVE(CFNETWORK_STORAGE_PARTITIONING)
wilander@apple.comfc67cb82017-04-25 17:05:04 +0000297void NetworkProcessProxy::shouldPartitionCookiesForTopPrivatelyOwnedDomains(const Vector<String>& domainsToRemove, const Vector<String>& domainsToAdd, bool clearFirst)
wilander@apple.com1bccb962017-03-09 04:02:14 +0000298{
wilander@apple.comfc67cb82017-04-25 17:05:04 +0000299 connection()->send(Messages::NetworkProcess::ShouldPartitionCookiesForTopPrivatelyOwnedDomains(domainsToRemove, domainsToAdd, clearFirst), 0);
wilander@apple.com1bccb962017-03-09 04:02:14 +0000300}
301#endif
302
andersca@apple.com69388f02013-12-30 20:20:02 +0000303void NetworkProcessProxy::didFinishLaunching(ProcessLauncher* launcher, IPC::Connection::Identifier connectionIdentifier)
beidson@apple.com21dd3ed2012-10-12 17:13:13 +0000304{
ap@apple.com10a670e2012-12-05 23:28:31 +0000305 ChildProcessProxy::didFinishLaunching(launcher, connectionIdentifier);
beidson@apple.com21dd3ed2012-10-12 17:13:13 +0000306
andersca@apple.com69388f02013-12-30 20:20:02 +0000307 if (IPC::Connection::identifierIsNull(connectionIdentifier)) {
andersca@apple.com7f6925c2016-08-12 18:50:02 +0000308 networkProcessCrashedOrFailedToLaunch();
beidson@apple.com21dd3ed2012-10-12 17:13:13 +0000309 return;
310 }
311
beidson@apple.comdfbdf942012-10-19 23:26:16 +0000312 for (unsigned i = 0; i < m_numPendingConnectionRequests; ++i)
ap@apple.com10a670e2012-12-05 23:28:31 +0000313 connection()->send(Messages::NetworkProcess::CreateNetworkConnectionToWebProcess(), 0);
beidson@apple.comdfbdf942012-10-19 23:26:16 +0000314
315 m_numPendingConnectionRequests = 0;
commit-queue@webkit.org948d5842012-11-07 01:17:53 +0000316
mitz@apple.com1b970882014-02-15 17:06:17 +0000317#if PLATFORM(COCOA)
weinig@apple.com9c5a3ea2014-12-23 20:29:26 +0000318 if (m_processPool.processSuppressionEnabled())
commit-queue@webkit.orgb1ebaef2013-01-29 22:52:19 +0000319 setProcessSuppressionEnabled(true);
commit-queue@webkit.org948d5842012-11-07 01:17:53 +0000320#endif
barraclough@apple.comd9151342014-04-17 01:40:04 +0000321
bdakin@apple.com1539c6c2015-01-28 22:22:16 +0000322#if PLATFORM(IOS)
simon.fraser@apple.comdd0dee12014-04-22 00:23:04 +0000323 if (xpc_connection_t connection = this->connection()->xpcConnection())
dbates@webkit.org3c7f0712015-05-12 22:06:44 +0000324 m_throttler.didConnectToProcess(xpc_connection_get_pid(connection));
barraclough@apple.comd9151342014-04-17 01:40:04 +0000325#endif
beidson@apple.com21dd3ed2012-10-12 17:13:13 +0000326}
327
cdumez@apple.com172b8902017-01-30 18:45:21 +0000328void NetworkProcessProxy::logDiagnosticMessage(uint64_t pageID, const String& message, const String& description, WebCore::ShouldSample shouldSample)
cdumez@apple.com35cab1d2015-02-11 23:57:31 +0000329{
330 WebPageProxy* page = WebProcessProxy::webPage(pageID);
331 // FIXME: We do this null-check because by the time the decision to log is made, the page may be gone. We should refactor to avoid this,
332 // but for now we simply drop the message in the rare case this happens.
333 if (!page)
334 return;
335
cdumez@apple.com172b8902017-01-30 18:45:21 +0000336 page->logDiagnosticMessage(message, description, shouldSample);
cdumez@apple.com35cab1d2015-02-11 23:57:31 +0000337}
338
cdumez@apple.com172b8902017-01-30 18:45:21 +0000339void NetworkProcessProxy::logDiagnosticMessageWithResult(uint64_t pageID, const String& message, const String& description, uint32_t result, WebCore::ShouldSample shouldSample)
cdumez@apple.com35cab1d2015-02-11 23:57:31 +0000340{
341 WebPageProxy* page = WebProcessProxy::webPage(pageID);
342 // FIXME: We do this null-check because by the time the decision to log is made, the page may be gone. We should refactor to avoid this,
343 // but for now we simply drop the message in the rare case this happens.
344 if (!page)
345 return;
346
cdumez@apple.com172b8902017-01-30 18:45:21 +0000347 page->logDiagnosticMessageWithResult(message, description, result, shouldSample);
cdumez@apple.com35cab1d2015-02-11 23:57:31 +0000348}
349
cdumez@apple.com172b8902017-01-30 18:45:21 +0000350void NetworkProcessProxy::logDiagnosticMessageWithValue(uint64_t pageID, const String& message, const String& description, double value, unsigned significantFigures, WebCore::ShouldSample shouldSample)
cdumez@apple.com35cab1d2015-02-11 23:57:31 +0000351{
352 WebPageProxy* page = WebProcessProxy::webPage(pageID);
353 // FIXME: We do this null-check because by the time the decision to log is made, the page may be gone. We should refactor to avoid this,
354 // but for now we simply drop the message in the rare case this happens.
355 if (!page)
356 return;
357
cdumez@apple.com172b8902017-01-30 18:45:21 +0000358 page->logDiagnosticMessageWithValue(message, description, value, significantFigures, shouldSample);
cdumez@apple.com35cab1d2015-02-11 23:57:31 +0000359}
360
commit-queue@webkit.orgec8a30a2016-06-27 20:59:27 +0000361#if USE(PROTECTION_SPACE_AUTH_CALLBACK)
362void NetworkProcessProxy::canAuthenticateAgainstProtectionSpace(uint64_t loaderID, uint64_t pageID, uint64_t frameID, const WebCore::ProtectionSpace& protectionSpace)
363{
364 WebPageProxy* page = WebProcessProxy::webPage(pageID);
365 if (!page)
366 return;
367
368 page->canAuthenticateAgainstProtectionSpace(loaderID, frameID, protectionSpace);
369}
370#endif
371
dbates@webkit.org4b41cef2015-05-11 17:27:13 +0000372void NetworkProcessProxy::sendProcessWillSuspendImminently()
373{
374 if (!canSendMessage())
375 return;
376
377 bool handled = false;
simon.fraser@apple.comcbeb30c32016-11-27 02:27:55 +0000378 sendSync(Messages::NetworkProcess::ProcessWillSuspendImminently(), Messages::NetworkProcess::ProcessWillSuspendImminently::Reply(handled), 0, 1_s);
dbates@webkit.org4b41cef2015-05-11 17:27:13 +0000379}
380
dbates@webkit.orgb89b1562015-05-14 03:07:25 +0000381void NetworkProcessProxy::sendPrepareToSuspend()
cdumez@apple.com7554d072015-03-31 19:03:40 +0000382{
383 if (canSendMessage())
dbates@webkit.orgb89b1562015-05-14 03:07:25 +0000384 send(Messages::NetworkProcess::PrepareToSuspend(), 0);
cdumez@apple.com7554d072015-03-31 19:03:40 +0000385}
386
dbates@webkit.orgb89b1562015-05-14 03:07:25 +0000387void NetworkProcessProxy::sendCancelPrepareToSuspend()
cdumez@apple.com7554d072015-03-31 19:03:40 +0000388{
389 if (canSendMessage())
dbates@webkit.orgb89b1562015-05-14 03:07:25 +0000390 send(Messages::NetworkProcess::CancelPrepareToSuspend(), 0);
cdumez@apple.com7554d072015-03-31 19:03:40 +0000391}
392
cdumez@apple.com7554d072015-03-31 19:03:40 +0000393void NetworkProcessProxy::sendProcessDidResume()
394{
395 if (canSendMessage())
396 send(Messages::NetworkProcess::ProcessDidResume(), 0);
397}
398
399void NetworkProcessProxy::processReadyToSuspend()
400{
dbates@webkit.org3c7f0712015-05-12 22:06:44 +0000401 m_throttler.processReadyToSuspend();
cdumez@apple.com7554d072015-03-31 19:03:40 +0000402}
403
barraclough@apple.com2b8cba62015-05-22 17:19:39 +0000404void NetworkProcessProxy::didSetAssertionState(AssertionState)
405{
406}
407
cdumez@apple.com9b21ebc2015-04-03 17:54:47 +0000408void NetworkProcessProxy::setIsHoldingLockedFiles(bool isHoldingLockedFiles)
409{
410 if (!isHoldingLockedFiles) {
krollin@apple.com03e63b12016-09-01 01:33:40 +0000411 RELEASE_LOG(ProcessSuspension, "UIProcess is releasing a background assertion because the Network process is no longer holding locked files");
cdumez@apple.com9b21ebc2015-04-03 17:54:47 +0000412 m_tokenForHoldingLockedFiles = nullptr;
413 return;
414 }
cdumez@apple.com7706fbe2016-06-22 17:00:23 +0000415 if (!m_tokenForHoldingLockedFiles) {
krollin@apple.com03e63b12016-09-01 01:33:40 +0000416 RELEASE_LOG(ProcessSuspension, "UIProcess is taking a background assertion because the Network process is holding locked files");
dbates@webkit.org3c7f0712015-05-12 22:06:44 +0000417 m_tokenForHoldingLockedFiles = m_throttler.backgroundActivityToken();
cdumez@apple.com7706fbe2016-06-22 17:00:23 +0000418 }
cdumez@apple.com9b21ebc2015-04-03 17:54:47 +0000419}
420
beidson@apple.com21dd3ed2012-10-12 17:13:13 +0000421} // namespace WebKit