Diff
Modified: trunk/Source/WebKit/ChangeLog (225288 => 225289)
--- trunk/Source/WebKit/ChangeLog 2017-11-29 20:41:47 UTC (rev 225288)
+++ trunk/Source/WebKit/ChangeLog 2017-11-29 21:11:04 UTC (rev 225289)
@@ -1,5 +1,49 @@
2017-11-29 Chris Dumez <cdu...@apple.com>
+ StorageToWebProcessConnection & WebSWServerToContextConnection should use the same underlying IPC::Connection
+ https://bugs.webkit.org/show_bug.cgi?id=180147
+
+ Reviewed by Brady Eidson.
+
+ StorageToWebProcessConnection & WebSWServerToContextConnection should use the same underlying IPC::Connection.
+ Otherwise, we have with 2 IPC::Connections between the StorageProcess and the ServiceWorker (aka Context) process,
+ which makes synchronization of IPC messages difficult.
+
+ * StorageProcess/StorageProcess.cpp:
+ (WebKit::StorageProcess::createStorageToWebProcessConnection):
+ (WebKit::StorageProcess::createServerToContextConnection):
+ * StorageProcess/StorageProcess.h:
+ * StorageProcess/StorageProcess.messages.in:
+ * StorageProcess/StorageToWebProcessConnection.cpp:
+ (WebKit::StorageToWebProcessConnection::didReceiveMessage):
+ * UIProcess/ServiceWorkerProcessProxy.cpp:
+ (WebKit::ServiceWorkerProcessProxy::start):
+ * UIProcess/ServiceWorkerProcessProxy.h:
+ * UIProcess/Storage/StorageProcessProxy.cpp:
+ (WebKit::StorageProcessProxy::getStorageProcessConnection):
+ (WebKit::StorageProcessProxy::didFinishLaunching):
+ (WebKit::StorageProcessProxy::establishWorkerContextConnectionToStorageProcess):
+ * UIProcess/Storage/StorageProcessProxy.h:
+ * UIProcess/Storage/StorageProcessProxy.messages.in:
+ * UIProcess/WebProcessPool.cpp:
+ (WebKit::WebProcessPool::getStorageProcessConnection):
+ (WebKit::WebProcessPool::establishWorkerContextConnectionToStorageProcess):
+ * UIProcess/WebProcessPool.h:
+ * UIProcess/WebProcessProxy.cpp:
+ (WebKit::WebProcessProxy::getStorageProcessConnection):
+ * UIProcess/WebProcessProxy.h:
+ (WebKit::WebProcessProxy::isServiceWorkerProcess const):
+ * UIProcess/WebProcessProxy.messages.in:
+ * WebProcess/Storage/WebToStorageProcessConnection.cpp:
+ (WebKit::WebToStorageProcessConnection::didReceiveMessage):
+ * WebProcess/WebProcess.cpp:
+ (WebKit::WebProcess::didReceiveMessage):
+ (WebKit::WebProcess::establishWorkerContextConnectionToStorageProcess):
+ * WebProcess/WebProcess.h:
+ * WebProcess/WebProcess.messages.in:
+
+2017-11-29 Chris Dumez <cdu...@apple.com>
+
ensure*Connection() methods on WebProcess should return a reference
https://bugs.webkit.org/show_bug.cgi?id=180149
Modified: trunk/Source/WebKit/StorageProcess/StorageProcess.cpp (225288 => 225289)
--- trunk/Source/WebKit/StorageProcess/StorageProcess.cpp 2017-11-29 20:41:47 UTC (rev 225288)
+++ trunk/Source/WebKit/StorageProcess/StorageProcess.cpp 2017-11-29 21:11:04 UTC (rev 225289)
@@ -189,7 +189,7 @@
task.performTask();
}
-void StorageProcess::createStorageToWebProcessConnection()
+void StorageProcess::createStorageToWebProcessConnection(bool isServiceWorkerProcess)
{
#if USE(UNIX_DOMAIN_SOCKETS)
IPC::Connection::SocketPair socketPair = IPC::Connection::createPlatformConnection();
@@ -208,6 +208,19 @@
#else
notImplemented();
#endif
+
+#if ENABLE(SERVICE_WORKER)
+ if (isServiceWorkerProcess && !m_storageToWebProcessConnections.isEmpty()) {
+ ASSERT(m_waitingForServerToContextProcessConnection);
+ m_serverToContextConnection = WebSWServerToContextConnection::create(m_storageToWebProcessConnections.last()->connection());
+ m_waitingForServerToContextProcessConnection = false;
+
+ for (auto& connection : m_storageToWebProcessConnections)
+ connection->workerContextProcessConnectionCreated();
+ }
+#else
+ UNUSED_PARAM(isServiceWorkerProcess);
+#endif
}
void StorageProcess::fetchWebsiteData(PAL::SessionID sessionID, OptionSet<WebsiteDataType> websiteDataTypes, uint64_t callbackID)
@@ -381,35 +394,9 @@
return;
m_waitingForServerToContextProcessConnection = true;
- parentProcessConnection()->send(Messages::StorageProcessProxy::GetWorkerContextProcessConnection(), 0);
+ parentProcessConnection()->send(Messages::StorageProcessProxy::EstablishWorkerContextConnectionToStorageProcess(), 0);
}
-void StorageProcess::didGetWorkerContextProcessConnection(IPC::Attachment&& encodedConnectionIdentifier)
-{
- ASSERT(m_waitingForServerToContextProcessConnection);
- m_waitingForServerToContextProcessConnection = false;
-
-#if USE(UNIX_DOMAIN_SOCKETS)
- IPC::Connection::Identifier connectionIdentifier = encodedConnectionIdentifier.releaseFileDescriptor();
-#elif OS(DARWIN)
- IPC::Connection::Identifier connectionIdentifier(encodedConnectionIdentifier.port());
-#else
- ASSERT_NOT_REACHED();
-#endif
-
- if (IPC::Connection::identifierIsNull(connectionIdentifier)) {
- LOG_ERROR("StorageProcess::didGetWorkerContextProcessConnection - Received null connection identifier");
- return;
- }
-
- auto ipcConnection = IPC::Connection::createClientConnection(connectionIdentifier, *this);
- ipcConnection->open();
- m_serverToContextConnection = WebSWServerToContextConnection::create(WTFMove(ipcConnection));
-
- for (auto& connection : m_storageToWebProcessConnections)
- connection->workerContextProcessConnectionCreated();
-}
-
void StorageProcess::didFailFetch(SWServerConnectionIdentifier serverConnectionIdentifier, uint64_t fetchIdentifier)
{
if (auto* connection = m_swServerConnections.get(serverConnectionIdentifier))
Modified: trunk/Source/WebKit/StorageProcess/StorageProcess.h (225288 => 225289)
--- trunk/Source/WebKit/StorageProcess/StorageProcess.h 2017-11-29 20:41:47 UTC (rev 225288)
+++ trunk/Source/WebKit/StorageProcess/StorageProcess.h 2017-11-29 21:11:04 UTC (rev 225289)
@@ -96,6 +96,8 @@
void unregisterSWServerConnection(WebSWServerConnection&);
#endif
+ void didReceiveStorageProcessMessage(IPC::Connection&, IPC::Decoder&);
+
private:
StorageProcess();
@@ -109,11 +111,10 @@
// IPC::Connection::Client
void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override;
void didClose(IPC::Connection&) override;
- void didReceiveStorageProcessMessage(IPC::Connection&, IPC::Decoder&);
// Message Handlers
void initializeWebsiteDataStore(const StorageProcessCreationParameters&);
- void createStorageToWebProcessConnection();
+ void createStorageToWebProcessConnection(bool isServiceWorkerProcess);
void fetchWebsiteData(PAL::SessionID, OptionSet<WebsiteDataType> websiteDataTypes, uint64_t callbackID);
void deleteWebsiteData(PAL::SessionID, OptionSet<WebsiteDataType> websiteDataTypes, std::chrono::system_clock::time_point modifiedSince, uint64_t callbackID);
@@ -123,8 +124,6 @@
void didGetSandboxExtensionsForBlobFiles(uint64_t requestID, SandboxExtension::HandleArray&&);
#endif
#if ENABLE(SERVICE_WORKER)
- void didGetWorkerContextProcessConnection(IPC::Attachment&& encodedConnectionIdentifier);
-
void didReceiveFetchResponse(WebCore::SWServerConnectionIdentifier, uint64_t fetchIdentifier, const WebCore::ResourceResponse&);
void didReceiveFetchData(WebCore::SWServerConnectionIdentifier, uint64_t fetchIdentifier, const IPC::DataReference&, int64_t encodedDataLength);
void didReceiveFetchFormData(WebCore::SWServerConnectionIdentifier, uint64_t fetchIdentifier, const IPC::FormDataReference&);
Modified: trunk/Source/WebKit/StorageProcess/StorageProcess.messages.in (225288 => 225289)
--- trunk/Source/WebKit/StorageProcess/StorageProcess.messages.in 2017-11-29 20:41:47 UTC (rev 225288)
+++ trunk/Source/WebKit/StorageProcess/StorageProcess.messages.in 2017-11-29 21:11:04 UTC (rev 225289)
@@ -25,7 +25,7 @@
InitializeWebsiteDataStore(struct WebKit::StorageProcessCreationParameters processCreationParameters)
# Creates a connection for communication with a WebProcess
- CreateStorageToWebProcessConnection()
+ CreateStorageToWebProcessConnection(bool isServiceWorkerProcess)
FetchWebsiteData(PAL::SessionID sessionID, OptionSet<WebKit::WebsiteDataType> websiteDataTypes, uint64_t callbackID)
DeleteWebsiteData(PAL::SessionID sessionID, OptionSet<WebKit::WebsiteDataType> websiteDataTypes, std::chrono::system_clock::time_point modifiedSince, uint64_t callbackID)
@@ -36,8 +36,6 @@
#endif
#if ENABLE(SERVICE_WORKER)
- DidGetWorkerContextProcessConnection(IPC::Attachment connectionHandle)
-
DidNotHandleFetch(WebCore::SWServerConnectionIdentifier serverConnectionIdentifier, uint64_t fetchIdentifier)
DidFailFetch(WebCore::SWServerConnectionIdentifier serverConnectionIdentifier, uint64_t fetchIdentifier)
DidReceiveFetchResponse(WebCore::SWServerConnectionIdentifier serverConnectionIdentifier, uint64_t fetchIdentifier, WebCore::ResourceResponse response)
Modified: trunk/Source/WebKit/StorageProcess/StorageToWebProcessConnection.cpp (225288 => 225289)
--- trunk/Source/WebKit/StorageProcess/StorageToWebProcessConnection.cpp 2017-11-29 20:41:47 UTC (rev 225288)
+++ trunk/Source/WebKit/StorageProcess/StorageToWebProcessConnection.cpp 2017-11-29 21:11:04 UTC (rev 225289)
@@ -28,6 +28,7 @@
#include "Logging.h"
#include "StorageProcess.h"
+#include "StorageProcessMessages.h"
#include "StorageToWebProcessConnectionMessages.h"
#include "WebIDBConnectionToClient.h"
#include "WebIDBConnectionToClientMessages.h"
@@ -69,6 +70,11 @@
return;
}
+ if (decoder.messageReceiverName() == Messages::StorageProcess::messageReceiverName()) {
+ StorageProcess::singleton().didReceiveStorageProcessMessage(connection, decoder);
+ return;
+ }
+
#if ENABLE(INDEXED_DATABASE)
if (decoder.messageReceiverName() == Messages::WebIDBConnectionToClient::messageReceiverName()) {
auto iterator = m_webIDBConnections.find(decoder.destinationID());
Modified: trunk/Source/WebKit/UIProcess/ServiceWorkerProcessProxy.cpp (225288 => 225289)
--- trunk/Source/WebKit/UIProcess/ServiceWorkerProcessProxy.cpp 2017-11-29 20:41:47 UTC (rev 225288)
+++ trunk/Source/WebKit/UIProcess/ServiceWorkerProcessProxy.cpp 2017-11-29 21:11:04 UTC (rev 225289)
@@ -61,7 +61,7 @@
void ServiceWorkerProcessProxy::start(const WebPreferencesStore& store)
{
- send(Messages::WebProcess::GetWorkerContextConnection(m_serviceWorkerPageID, store), 0);
+ send(Messages::WebProcess::EstablishWorkerContextConnectionToStorageProcess(m_serviceWorkerPageID, store), 0);
}
void ServiceWorkerProcessProxy::didReceiveAuthenticationChallenge(uint64_t pageID, uint64_t frameID, Ref<AuthenticationChallengeProxy>&& challenge)
Modified: trunk/Source/WebKit/UIProcess/ServiceWorkerProcessProxy.h (225288 => 225289)
--- trunk/Source/WebKit/UIProcess/ServiceWorkerProcessProxy.h 2017-11-29 20:41:47 UTC (rev 225288)
+++ trunk/Source/WebKit/UIProcess/ServiceWorkerProcessProxy.h 2017-11-29 21:11:04 UTC (rev 225289)
@@ -41,11 +41,12 @@
void start(const WebPreferencesStore&);
uint64_t pageID() const { return m_serviceWorkerPageID; }
-protected:
+private:
// ChildProcessProxy
void getLaunchOptions(ProcessLauncher::LaunchOptions&) final;
-private:
+ bool isServiceWorkerProcess() const final { return true; }
+
ServiceWorkerProcessProxy(WebProcessPool&, WebsiteDataStore&);
uint64_t m_serviceWorkerPageID { 0 };
};
Modified: trunk/Source/WebKit/UIProcess/Storage/StorageProcessProxy.cpp (225288 => 225289)
--- trunk/Source/WebKit/UIProcess/Storage/StorageProcessProxy.cpp 2017-11-29 20:41:47 UTC (rev 225288)
+++ trunk/Source/WebKit/UIProcess/Storage/StorageProcessProxy.cpp 2017-11-29 21:11:04 UTC (rev 225289)
@@ -111,7 +111,7 @@
send(Messages::StorageProcess::DeleteWebsiteDataForOrigins(sessionID, dataTypes, origins, callbackID), 0);
}
-void StorageProcessProxy::getStorageProcessConnection(Ref<Messages::WebProcessProxy::GetStorageProcessConnection::DelayedReply>&& reply)
+void StorageProcessProxy::getStorageProcessConnection(bool isServiceWorkerProcess, Ref<Messages::WebProcessProxy::GetStorageProcessConnection::DelayedReply>&& reply)
{
m_pendingConnectionReplies.append(WTFMove(reply));
@@ -120,7 +120,7 @@
return;
}
- send(Messages::StorageProcess::CreateStorageToWebProcessConnection(), 0, IPC::SendOption::DispatchMessageEvenWhenWaitingForSyncReply);
+ send(Messages::StorageProcess::CreateStorageToWebProcessConnection(isServiceWorkerProcess), 0, IPC::SendOption::DispatchMessageEvenWhenWaitingForSyncReply);
}
void StorageProcessProxy::didClose(IPC::Connection&)
@@ -215,26 +215,16 @@
}
for (unsigned i = 0; i < m_numPendingConnectionRequests; ++i)
- send(Messages::StorageProcess::CreateStorageToWebProcessConnection(), 0);
+ send(Messages::StorageProcess::CreateStorageToWebProcessConnection(false), 0);
m_numPendingConnectionRequests = 0;
}
#if ENABLE(SERVICE_WORKER)
-void StorageProcessProxy::getWorkerContextProcessConnection()
+void StorageProcessProxy::establishWorkerContextConnectionToStorageProcess()
{
- ASSERT(!m_waitingOnWorkerContextProcessConnection);
- m_waitingOnWorkerContextProcessConnection = true;
-
- m_processPool.getWorkerContextProcessConnection(*this);
+ m_processPool.establishWorkerContextConnectionToStorageProcess(*this);
}
-
-void StorageProcessProxy::didGetWorkerContextProcessConnection(const IPC::Attachment& connection)
-{
- m_waitingOnWorkerContextProcessConnection = false;
- send(Messages::StorageProcess::DidGetWorkerContextProcessConnection(connection), 0);
-}
-
#endif
} // namespace WebKit
Modified: trunk/Source/WebKit/UIProcess/Storage/StorageProcessProxy.h (225288 => 225289)
--- trunk/Source/WebKit/UIProcess/Storage/StorageProcessProxy.h 2017-11-29 20:41:47 UTC (rev 225288)
+++ trunk/Source/WebKit/UIProcess/Storage/StorageProcessProxy.h 2017-11-29 21:11:04 UTC (rev 225289)
@@ -55,12 +55,8 @@
void deleteWebsiteData(PAL::SessionID, OptionSet<WebsiteDataType>, std::chrono::system_clock::time_point modifiedSince, WTF::Function<void()>&& completionHandler);
void deleteWebsiteDataForOrigins(PAL::SessionID, OptionSet<WebsiteDataType>, const Vector<WebCore::SecurityOriginData>&, WTF::Function<void()>&& completionHandler);
- void getStorageProcessConnection(Ref<Messages::WebProcessProxy::GetStorageProcessConnection::DelayedReply>&&);
+ void getStorageProcessConnection(bool isServiceWorkerProcess, Ref<Messages::WebProcessProxy::GetStorageProcessConnection::DelayedReply>&&);
-#if ENABLE(SERVICE_WORKER)
- void didGetWorkerContextProcessConnection(const IPC::Attachment& connection);
-#endif
-
private:
StorageProcessProxy(WebProcessPool&);
@@ -84,8 +80,7 @@
void getSandboxExtensionsForBlobFiles(uint64_t requestID, const Vector<String>& paths);
#endif
#if ENABLE(SERVICE_WORKER)
- void getWorkerContextProcessConnection();
- bool m_waitingOnWorkerContextProcessConnection { false };
+ void establishWorkerContextConnectionToStorageProcess();
#endif
// ProcessLauncher::Client
Modified: trunk/Source/WebKit/UIProcess/Storage/StorageProcessProxy.messages.in (225288 => 225289)
--- trunk/Source/WebKit/UIProcess/Storage/StorageProcessProxy.messages.in 2017-11-29 20:41:47 UTC (rev 225288)
+++ trunk/Source/WebKit/UIProcess/Storage/StorageProcessProxy.messages.in 2017-11-29 21:11:04 UTC (rev 225289)
@@ -32,6 +32,6 @@
#endif
#if ENABLE(SERVICE_WORKER)
- GetWorkerContextProcessConnection()
+ EstablishWorkerContextConnectionToStorageProcess()
#endif
}
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (225288 => 225289)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2017-11-29 20:41:47 UTC (rev 225288)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2017-11-29 21:11:04 UTC (rev 225289)
@@ -566,11 +566,11 @@
m_storageProcess->send(Messages::StorageProcess::InitializeWebsiteDataStore(relevantDataStore->storageProcessParameters()), 0);
}
-void WebProcessPool::getStorageProcessConnection(Ref<Messages::WebProcessProxy::GetStorageProcessConnection::DelayedReply>&& reply)
+void WebProcessPool::getStorageProcessConnection(bool isServiceWorkerProcess, Ref<Messages::WebProcessProxy::GetStorageProcessConnection::DelayedReply>&& reply)
{
ensureStorageProcessAndWebsiteDataStore(nullptr);
- m_storageProcess->getStorageProcessConnection(WTFMove(reply));
+ m_storageProcess->getStorageProcessConnection(isServiceWorkerProcess, WTFMove(reply));
}
void WebProcessPool::storageProcessCrashed(StorageProcessProxy* storageProcessProxy)
@@ -586,7 +586,7 @@
}
#if ENABLE(SERVICE_WORKER)
-void WebProcessPool::getWorkerContextProcessConnection(StorageProcessProxy& proxy)
+void WebProcessPool::establishWorkerContextConnectionToStorageProcess(StorageProcessProxy& proxy)
{
ASSERT_UNUSED(proxy, &proxy == m_storageProcess);
@@ -602,13 +602,6 @@
m_processes.append(WTFMove(serviceWorkerProcessProxy));
m_serviceWorkerProcess->start(m_defaultPageGroup->preferences().store());
}
-
-void WebProcessPool::didGetWorkerContextProcessConnection(const IPC::Attachment& connection)
-{
- if (!m_storageProcess)
- return;
- m_storageProcess->didGetWorkerContextProcessConnection(connection);
-}
#endif
void WebProcessPool::willStartUsingPrivateBrowsing()
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.h (225288 => 225289)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.h 2017-11-29 20:41:47 UTC (rev 225288)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.h 2017-11-29 21:11:04 UTC (rev 225289)
@@ -319,10 +319,10 @@
void ensureStorageProcessAndWebsiteDataStore(WebsiteDataStore* relevantDataStore);
StorageProcessProxy* storageProcess() { return m_storageProcess.get(); }
- void getStorageProcessConnection(Ref<Messages::WebProcessProxy::GetStorageProcessConnection::DelayedReply>&&);
+ void getStorageProcessConnection(bool isServiceWorkerProcess, Ref<Messages::WebProcessProxy::GetStorageProcessConnection::DelayedReply>&&);
void storageProcessCrashed(StorageProcessProxy*);
#if ENABLE(SERVICE_WORKER)
- void getWorkerContextProcessConnection(StorageProcessProxy&);
+ void establishWorkerContextConnectionToStorageProcess(StorageProcessProxy&);
bool isServiceWorker(uint64_t pageID) const { return m_serviceWorkerProcess && m_serviceWorkerProcess->pageID() == pageID; }
ServiceWorkerProcessProxy* serviceWorkerProxy() const { return m_serviceWorkerProcess; }
void setAllowsAnySSLCertificateForServiceWorker(bool allows) { m_allowsAnySSLCertificateForServiceWorker = allows; }
@@ -422,10 +422,6 @@
static uint64_t registerProcessPoolCreationListener(Function<void(WebProcessPool&)>&&);
static void unregisterProcessPoolCreationListener(uint64_t identifier);
-#if ENABLE(SERVICE_WORKER)
- void didGetWorkerContextProcessConnection(const IPC::Attachment& connection);
-#endif
-
private:
void platformInitialize();
Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp (225288 => 225289)
--- trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp 2017-11-29 20:41:47 UTC (rev 225288)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp 2017-11-29 21:11:04 UTC (rev 225289)
@@ -573,7 +573,7 @@
void WebProcessProxy::getStorageProcessConnection(Ref<Messages::WebProcessProxy::GetStorageProcessConnection::DelayedReply>&& reply)
{
- m_processPool->getStorageProcessConnection(WTFMove(reply));
+ m_processPool->getStorageProcessConnection(isServiceWorkerProcess(), WTFMove(reply));
}
#if !PLATFORM(COCOA)
@@ -1227,11 +1227,4 @@
}
#endif
-#if ENABLE(SERVICE_WORKER)
-void WebProcessProxy::didGetWorkerContextConnection(const IPC::Attachment& connection)
-{
- m_processPool->didGetWorkerContextProcessConnection(connection);
-}
-#endif
-
} // namespace WebKit
Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.h (225288 => 225289)
--- trunk/Source/WebKit/UIProcess/WebProcessProxy.h 2017-11-29 20:41:47 UTC (rev 225288)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.h 2017-11-29 21:11:04 UTC (rev 225289)
@@ -103,6 +103,8 @@
unsigned pageCount() const { return m_pageMap.size(); }
unsigned visiblePageCount() const { return m_visiblePageCounter.value(); }
+ virtual bool isServiceWorkerProcess() const { return false; }
+
void addVisitedLinkStore(VisitedLinkStore&);
void addWebUserContentControllerProxy(WebUserContentControllerProxy&, WebPageCreationParameters&);
void didDestroyVisitedLinkStore(VisitedLinkStore&);
@@ -182,10 +184,6 @@
bool isUnderMemoryPressure() const { return m_isUnderMemoryPressure; }
void didExceedInactiveMemoryLimitWhileActive();
-#if ENABLE(SERVICE_WORKER)
- void didGetWorkerContextConnection(const IPC::Attachment& connection);
-#endif
-
void processTerminated();
void didExceedCPULimit();
Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.messages.in (225288 => 225289)
--- trunk/Source/WebKit/UIProcess/WebProcessProxy.messages.in 2017-11-29 20:41:47 UTC (rev 225288)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.messages.in 2017-11-29 21:11:04 UTC (rev 225289)
@@ -54,8 +54,4 @@
MemoryPressureStatusChanged(bool isUnderMemoryPressure)
DidExceedInactiveMemoryLimitWhileActive()
-
-#if ENABLE(SERVICE_WORKER)
- DidGetWorkerContextConnection(IPC::Attachment connection)
-#endif
}
Modified: trunk/Source/WebKit/WebProcess/Storage/WebToStorageProcessConnection.cpp (225288 => 225289)
--- trunk/Source/WebKit/WebProcess/Storage/WebToStorageProcessConnection.cpp 2017-11-29 20:41:47 UTC (rev 225288)
+++ trunk/Source/WebKit/WebProcess/Storage/WebToStorageProcessConnection.cpp 2017-11-29 21:11:04 UTC (rev 225289)
@@ -33,7 +33,10 @@
#include "WebProcess.h"
#include "WebSWClientConnection.h"
#include "WebSWClientConnectionMessages.h"
+#include "WebSWContextManagerConnection.h"
+#include "WebSWContextManagerConnectionMessages.h"
#include "WebServiceWorkerProvider.h"
+#include <WebCore/SWContextManager.h>
using namespace PAL;
using namespace WebCore;
@@ -73,6 +76,12 @@
WebServiceWorkerProvider::singleton().didReceiveServiceWorkerClientFetchMessage(connection, decoder);
return;
}
+ if (decoder.messageReceiverName() == Messages::WebSWContextManagerConnection::messageReceiverName()) {
+ ASSERT(SWContextManager::singleton().connection());
+ if (auto* contextManagerConnection = SWContextManager::singleton().connection())
+ static_cast<WebSWContextManagerConnection&>(*contextManagerConnection).didReceiveMessage(connection, decoder);
+ return;
+ }
#endif
ASSERT_NOT_REACHED();
}
Modified: trunk/Source/WebKit/WebProcess/WebProcess.cpp (225288 => 225289)
--- trunk/Source/WebKit/WebProcess/WebProcess.cpp 2017-11-29 20:41:47 UTC (rev 225288)
+++ trunk/Source/WebKit/WebProcess/WebProcess.cpp 2017-11-29 21:11:04 UTC (rev 225289)
@@ -646,6 +646,7 @@
}
#if ENABLE(SERVICE_WORKER)
+ // FIXME: Remove?
if (decoder.messageReceiverName() == Messages::WebSWContextManagerConnection::messageReceiverName()) {
ASSERT(SWContextManager::singleton().connection());
if (auto* contextManagerConnection = SWContextManager::singleton().connection())
@@ -1616,30 +1617,13 @@
#endif
#if ENABLE(SERVICE_WORKER)
-void WebProcess::getWorkerContextConnection(uint64_t pageID, const WebPreferencesStore& store)
+void WebProcess::establishWorkerContextConnectionToStorageProcess(uint64_t pageID, const WebPreferencesStore& store)
{
-#if USE(UNIX_DOMAIN_SOCKETS)
- IPC::Connection::SocketPair socketPair = IPC::Connection::createPlatformConnection();
- IPC::Connection::Identifier connectionIdentifier(socketPair.server);
- IPC::Attachment connectionClientPort(socketPair.client);
-#elif OS(DARWIN)
- mach_port_t listeningPort;
- if (mach_port_allocate(mach_task_self(), MACH_PORT_RIGHT_RECEIVE, &listeningPort) != KERN_SUCCESS)
- CRASH();
-
- if (mach_port_insert_right(mach_task_self(), listeningPort, listeningPort, MACH_MSG_TYPE_MAKE_SEND) != KERN_SUCCESS)
- CRASH();
-
- IPC::Connection::Identifier connectionIdentifier(listeningPort);
- IPC::Attachment connectionClientPort(listeningPort, MACH_MSG_TYPE_MOVE_SEND);
-#else
- RELEASE_ASSERT_NOT_REACHED();
-#endif
-
- auto workerContextConnection = IPC::Connection::createServerConnection(connectionIdentifier, *this);
- workerContextConnection->open();
- SWContextManager::singleton().setConnection(std::make_unique<WebSWContextManagerConnection>(WTFMove(workerContextConnection), pageID, store));
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebProcessProxy::DidGetWorkerContextConnection(connectionClientPort), 0);
+ // We are in the Service Worker context process and the call below establishes our connection to the Storage Process
+ // by calling webToStorageProcessConnection. SWContextManager needs to use the same underlying IPC::Connection as the
+ // WebToStorageProcessConnection for synchronization purposes.
+ auto& ipcConnection = ensureWebToStorageProcessConnection().connection();
+ SWContextManager::singleton().setConnection(std::make_unique<WebSWContextManagerConnection>(ipcConnection, pageID, store));
}
#endif
Modified: trunk/Source/WebKit/WebProcess/WebProcess.h (225288 => 225289)
--- trunk/Source/WebKit/WebProcess/WebProcess.h 2017-11-29 20:41:47 UTC (rev 225288)
+++ trunk/Source/WebKit/WebProcess/WebProcess.h 2017-11-29 21:11:04 UTC (rev 225289)
@@ -297,7 +297,7 @@
void setNetworkProxySettings(const WebCore::SoupNetworkProxySettings&);
#endif
#if ENABLE(SERVICE_WORKER)
- void getWorkerContextConnection(uint64_t pageID, const WebPreferencesStore&);
+ void establishWorkerContextConnectionToStorageProcess(uint64_t pageID, const WebPreferencesStore&);
#endif
void releasePageCache();
Modified: trunk/Source/WebKit/WebProcess/WebProcess.messages.in (225288 => 225289)
--- trunk/Source/WebKit/WebProcess/WebProcess.messages.in 2017-11-29 20:41:47 UTC (rev 225288)
+++ trunk/Source/WebKit/WebProcess/WebProcess.messages.in 2017-11-29 21:11:04 UTC (rev 225289)
@@ -114,6 +114,6 @@
#endif
#if ENABLE(SERVICE_WORKER)
- GetWorkerContextConnection(uint64_t pageID, struct WebKit::WebPreferencesStore store)
+ EstablishWorkerContextConnectionToStorageProcess(uint64_t pageID, struct WebKit::WebPreferencesStore store)
#endif
}