Title: [255798] releases/WebKitGTK/webkit-2.28/Source
Revision
255798
Author
[email protected]
Date
2020-02-05 02:50:24 -0800 (Wed, 05 Feb 2020)

Log Message

Merge r255681 - NetworkProcess should be notified by UIProcess when its service worker process connection should be on
https://bugs.webkit.org/show_bug.cgi?id=207122
<rdar://problem/59089780>

Reviewed by Chris Dumez.

Source/WebCore:

Add a completion handler to the create context connection callback.
This is called when the context connection should have been created.
In case there is a context connection, completion handler does nothing.
Otherwise, SWServer will retry creating a context connection if needed.

The pending connection map entry is now removed in the completion handler instead of addContextConnection.
This ensures that only one connection request is sent by network process at a time.

Add extra logging to monitor creation of a context connection.

* workers/service/context/SWContextManager.h:
* workers/service/server/SWServer.cpp:
(WebCore::SWServer::addContextConnection):
(WebCore::SWServer::removeContextConnection):
(WebCore::SWServer::createContextConnectionFinished):
* workers/service/server/SWServer.h:

Source/WebKit:

Add completion handlers to the messaging from NetworkProcess -> UIProcess -> WebProcess -> NetworkProcess
used to create a service worker context connection.

This allows NetworkProcess to ask again for a connection if the connection is still needed but NetworkProcess did not find the context connection.

This is difficult to test since we would need for the process selected to host service workers to exit between the
time it is selected and the time it sends the message to Networking process.

To ensure that the context connection is created by WebProcess, WebProcessProxy takes a background assertion until WebProcess finishes
creating the context connection to Network process.

* NetworkProcess/NetworkConnectionToWebProcess.cpp:
(WebKit::NetworkConnectionToWebProcess::establishSWContextConnection):
* NetworkProcess/NetworkConnectionToWebProcess.h:
* NetworkProcess/NetworkConnectionToWebProcess.messages.in:
* NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::swServerForSession):
* NetworkProcess/NetworkProcess.h:
* UIProcess/Network/NetworkProcessProxy.cpp:
(WebKit::NetworkProcessProxy::establishWorkerContextConnectionToNetworkProcess):
* UIProcess/Network/NetworkProcessProxy.h:
* UIProcess/Network/NetworkProcessProxy.messages.in:
* UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::establishWorkerContextConnectionToNetworkProcess):
* UIProcess/WebProcessPool.h:
* UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::establishServiceWorkerContext):
* UIProcess/WebProcessProxy.h:
* WebProcess/Storage/WebSWContextManagerConnection.cpp:
(WebKit::m_userAgent):
(WebKit::WebSWContextManagerConnection::establishConnection):
* WebProcess/Storage/WebSWContextManagerConnection.h:
* WebProcess/WebProcess.cpp:
(WebKit::WebProcess::establishWorkerContextConnectionToNetworkProcess):
* WebProcess/WebProcess.h:
* WebProcess/WebProcess.messages.in:

Modified Paths

Diff

Modified: releases/WebKitGTK/webkit-2.28/Source/WebCore/ChangeLog (255797 => 255798)


--- releases/WebKitGTK/webkit-2.28/Source/WebCore/ChangeLog	2020-02-05 10:50:13 UTC (rev 255797)
+++ releases/WebKitGTK/webkit-2.28/Source/WebCore/ChangeLog	2020-02-05 10:50:24 UTC (rev 255798)
@@ -1,5 +1,30 @@
 2020-02-04  youenn fablet  <[email protected]>
 
+        NetworkProcess should be notified by UIProcess when its service worker process connection should be on
+        https://bugs.webkit.org/show_bug.cgi?id=207122
+        <rdar://problem/59089780>
+
+        Reviewed by Chris Dumez.
+
+        Add a completion handler to the create context connection callback.
+        This is called when the context connection should have been created.
+        In case there is a context connection, completion handler does nothing.
+        Otherwise, SWServer will retry creating a context connection if needed.
+
+        The pending connection map entry is now removed in the completion handler instead of addContextConnection.
+        This ensures that only one connection request is sent by network process at a time.
+
+        Add extra logging to monitor creation of a context connection.
+
+        * workers/service/context/SWContextManager.h:
+        * workers/service/server/SWServer.cpp:
+        (WebCore::SWServer::addContextConnection):
+        (WebCore::SWServer::removeContextConnection):
+        (WebCore::SWServer::createContextConnectionFinished):
+        * workers/service/server/SWServer.h:
+
+2020-02-04  youenn fablet  <[email protected]>
+
         Check for callback being null in Notification.requestPermission
         https://bugs.webkit.org/show_bug.cgi?id=207192
         <rdar://problem/59130804>

Modified: releases/WebKitGTK/webkit-2.28/Source/WebCore/workers/service/context/SWContextManager.h (255797 => 255798)


--- releases/WebKitGTK/webkit-2.28/Source/WebCore/workers/service/context/SWContextManager.h	2020-02-05 10:50:13 UTC (rev 255797)
+++ releases/WebKitGTK/webkit-2.28/Source/WebCore/workers/service/context/SWContextManager.h	2020-02-05 10:50:24 UTC (rev 255798)
@@ -49,6 +49,7 @@
     public:
         virtual ~Connection() { }
 
+        virtual void establishConnection(CompletionHandler<void()>&&) = 0;
         virtual void postMessageToServiceWorkerClient(const ServiceWorkerClientIdentifier& destinationIdentifier, const MessageWithMessagePorts&, ServiceWorkerIdentifier source, const String& sourceOrigin) = 0;
         virtual void serviceWorkerStarted(Optional<ServiceWorkerJobDataIdentifier>, ServiceWorkerIdentifier, bool doesHandleFetch) = 0;
         virtual void serviceWorkerFailedToStart(Optional<ServiceWorkerJobDataIdentifier>, ServiceWorkerIdentifier, const String& message) = 0;

Modified: releases/WebKitGTK/webkit-2.28/Source/WebCore/workers/service/server/SWServer.cpp (255797 => 255798)


--- releases/WebKitGTK/webkit-2.28/Source/WebCore/workers/service/server/SWServer.cpp	2020-02-05 10:50:13 UTC (rev 255797)
+++ releases/WebKitGTK/webkit-2.28/Source/WebCore/workers/service/server/SWServer.cpp	2020-02-05 10:50:24 UTC (rev 255798)
@@ -1020,9 +1020,10 @@
 
 void SWServer::addContextConnection(SWServerToContextConnection& connection)
 {
+    RELEASE_LOG(ServiceWorker, "SWServer::addContextConnection");
+
     ASSERT(!m_contextConnections.contains(connection.registrableDomain()));
 
-    m_pendingConnectionDomains.remove(connection.registrableDomain());
     m_contextConnections.add(connection.registrableDomain(), &connection);
 
     contextConnectionCreated(connection);
@@ -1030,6 +1031,8 @@
 
 void SWServer::removeContextConnection(SWServerToContextConnection& connection)
 {
+    RELEASE_LOG(ServiceWorker, "SWServer::removeContextConnection");
+
     auto& registrableDomain = connection.registrableDomain();
 
     ASSERT(m_contextConnections.get(registrableDomain) == &connection);
@@ -1046,8 +1049,24 @@
     if (m_pendingConnectionDomains.contains(registrableDomain))
         return;
 
+    RELEASE_LOG(ServiceWorker, "SWServer::createContextConnection will create a connection");
+
     m_pendingConnectionDomains.add(registrableDomain);
-    m_createContextConnectionCallback(registrableDomain);
+    m_createContextConnectionCallback(registrableDomain, [this, weakThis = makeWeakPtr(this), registrableDomain] {
+        if (!weakThis)
+            return;
+
+        RELEASE_LOG(ServiceWorker, "SWServer::createContextConnection should now have created a connection");
+
+        ASSERT(m_pendingConnectionDomains.contains(registrableDomain));
+        m_pendingConnectionDomains.remove(registrableDomain);
+
+        if (m_contextConnections.contains(registrableDomain))
+            return;
+
+        if (needsContextConnectionForRegistrableDomain(registrableDomain))
+            createContextConnection(registrableDomain);
+    });
 }
 
 bool SWServer::canHandleScheme(StringView scheme) const

Modified: releases/WebKitGTK/webkit-2.28/Source/WebCore/workers/service/server/SWServer.h (255797 => 255798)


--- releases/WebKitGTK/webkit-2.28/Source/WebCore/workers/service/server/SWServer.h	2020-02-05 10:50:13 UTC (rev 255797)
+++ releases/WebKitGTK/webkit-2.28/Source/WebCore/workers/service/server/SWServer.h	2020-02-05 10:50:24 UTC (rev 255798)
@@ -125,7 +125,7 @@
     };
 
     using SoftUpdateCallback = Function<void(ServiceWorkerJobData&& jobData, bool shouldRefreshCache, ResourceRequest&&, CompletionHandler<void(const ServiceWorkerFetchResult&)>&&)>;
-    using CreateContextConnectionCallback = Function<void(const WebCore::RegistrableDomain&)>;
+    using CreateContextConnectionCallback = Function<void(const WebCore::RegistrableDomain&, CompletionHandler<void()>&&)>;
     WEBCORE_EXPORT SWServer(UniqueRef<SWOriginStore>&&, bool processTerminationDelayEnabled, String&& registrationDatabaseDirectory, PAL::SessionID, SoftUpdateCallback&&, CreateContextConnectionCallback&&);
 
     WEBCORE_EXPORT ~SWServer();

Modified: releases/WebKitGTK/webkit-2.28/Source/WebKit/ChangeLog (255797 => 255798)


--- releases/WebKitGTK/webkit-2.28/Source/WebKit/ChangeLog	2020-02-05 10:50:13 UTC (rev 255797)
+++ releases/WebKitGTK/webkit-2.28/Source/WebKit/ChangeLog	2020-02-05 10:50:24 UTC (rev 255798)
@@ -1,3 +1,48 @@
+2020-02-04  youenn fablet  <[email protected]>
+
+        NetworkProcess should be notified by UIProcess when its service worker process connection should be on
+        https://bugs.webkit.org/show_bug.cgi?id=207122
+        <rdar://problem/59089780>
+
+        Reviewed by Chris Dumez.
+
+        Add completion handlers to the messaging from NetworkProcess -> UIProcess -> WebProcess -> NetworkProcess
+        used to create a service worker context connection.
+
+        This allows NetworkProcess to ask again for a connection if the connection is still needed but NetworkProcess did not find the context connection.
+
+        This is difficult to test since we would need for the process selected to host service workers to exit between the
+        time it is selected and the time it sends the message to Networking process.
+
+        To ensure that the context connection is created by WebProcess, WebProcessProxy takes a background assertion until WebProcess finishes
+        creating the context connection to Network process.
+
+        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
+        (WebKit::NetworkConnectionToWebProcess::establishSWContextConnection):
+        * NetworkProcess/NetworkConnectionToWebProcess.h:
+        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
+        * NetworkProcess/NetworkProcess.cpp:
+        (WebKit::NetworkProcess::swServerForSession):
+        * NetworkProcess/NetworkProcess.h:
+        * UIProcess/Network/NetworkProcessProxy.cpp:
+        (WebKit::NetworkProcessProxy::establishWorkerContextConnectionToNetworkProcess):
+        * UIProcess/Network/NetworkProcessProxy.h:
+        * UIProcess/Network/NetworkProcessProxy.messages.in:
+        * UIProcess/WebProcessPool.cpp:
+        (WebKit::WebProcessPool::establishWorkerContextConnectionToNetworkProcess):
+        * UIProcess/WebProcessPool.h:
+        * UIProcess/WebProcessProxy.cpp:
+        (WebKit::WebProcessProxy::establishServiceWorkerContext):
+        * UIProcess/WebProcessProxy.h:
+        * WebProcess/Storage/WebSWContextManagerConnection.cpp:
+        (WebKit::m_userAgent):
+        (WebKit::WebSWContextManagerConnection::establishConnection):
+        * WebProcess/Storage/WebSWContextManagerConnection.h:
+        * WebProcess/WebProcess.cpp:
+        (WebKit::WebProcess::establishWorkerContextConnectionToNetworkProcess):
+        * WebProcess/WebProcess.h:
+        * WebProcess/WebProcess.messages.in:
+
 2020-02-04  Chris Dumez  <[email protected]>
 
         Unreviewed, follow-up assertion fix after r255662.

Modified: releases/WebKitGTK/webkit-2.28/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp (255797 => 255798)


--- releases/WebKitGTK/webkit-2.28/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp	2020-02-05 10:50:13 UTC (rev 255797)
+++ releases/WebKitGTK/webkit-2.28/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp	2020-02-05 10:50:24 UTC (rev 255798)
@@ -917,10 +917,11 @@
     server.addConnection(WTFMove(connection));
 }
 
-void NetworkConnectionToWebProcess::establishSWContextConnection(RegistrableDomain&& registrableDomain)
+void NetworkConnectionToWebProcess::establishSWContextConnection(RegistrableDomain&& registrableDomain, CompletionHandler<void()>&& completionHandler)
 {
     if (auto* server = m_networkProcess->swServerForSessionIfExists(m_sessionID))
         m_swContextConnection = makeUnique<WebSWServerToContextConnection>(*this, WTFMove(registrableDomain), *server);
+    completionHandler();
 }
 
 void NetworkConnectionToWebProcess::closeSWContextConnection()

Modified: releases/WebKitGTK/webkit-2.28/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h (255797 => 255798)


--- releases/WebKitGTK/webkit-2.28/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h	2020-02-05 10:50:13 UTC (rev 255797)
+++ releases/WebKitGTK/webkit-2.28/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h	2020-02-05 10:50:24 UTC (rev 255798)
@@ -225,7 +225,7 @@
 
 #if ENABLE(SERVICE_WORKER)
     void establishSWServerConnection();
-    void establishSWContextConnection(WebCore::RegistrableDomain&&);
+    void establishSWContextConnection(WebCore::RegistrableDomain&&, CompletionHandler<void()>&&);
     void closeSWContextConnection();
     void unregisterSWConnection();
 #endif

Modified: releases/WebKitGTK/webkit-2.28/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in (255797 => 255798)


--- releases/WebKitGTK/webkit-2.28/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in	2020-02-05 10:50:13 UTC (rev 255797)
+++ releases/WebKitGTK/webkit-2.28/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in	2020-02-05 10:50:24 UTC (rev 255798)
@@ -74,7 +74,7 @@
     TakeNetworkLoadInformationMetrics(uint64_t resourceLoadIdentifier) -> (WebCore::NetworkLoadMetrics networkMetrics) Synchronous
 
 #if ENABLE(SERVICE_WORKER)
-    EstablishSWContextConnection(WebCore::RegistrableDomain domain)
+    EstablishSWContextConnection(WebCore::RegistrableDomain domain) -> () Async
     CloseSWContextConnection()
 #endif
 

Modified: releases/WebKitGTK/webkit-2.28/Source/WebKit/NetworkProcess/NetworkProcess.cpp (255797 => 255798)


--- releases/WebKitGTK/webkit-2.28/Source/WebKit/NetworkProcess/NetworkProcess.cpp	2020-02-05 10:50:13 UTC (rev 255797)
+++ releases/WebKitGTK/webkit-2.28/Source/WebKit/NetworkProcess/NetworkProcess.cpp	2020-02-05 10:50:24 UTC (rev 255798)
@@ -2401,9 +2401,9 @@
 
         return makeUnique<SWServer>(makeUniqueRef<WebSWOriginStore>(), info.processTerminationDelayEnabled, WTFMove(path), sessionID, [this, sessionID](auto&& jobData, bool shouldRefreshCache, auto&& request, auto&& completionHandler) mutable {
             ServiceWorkerSoftUpdateLoader::start(networkSession(sessionID), WTFMove(jobData), shouldRefreshCache, WTFMove(request), WTFMove(completionHandler));
-        }, [this, sessionID](auto& registrableDomain) {
+        }, [this, sessionID](auto& registrableDomain, auto&& completionHandler) {
             ASSERT(!registrableDomain.isEmpty());
-            parentProcessConnection()->send(Messages::NetworkProcessProxy::EstablishWorkerContextConnectionToNetworkProcess { registrableDomain, sessionID }, 0);
+            parentProcessConnection()->sendWithAsyncReply(Messages::NetworkProcessProxy::EstablishWorkerContextConnectionToNetworkProcess { registrableDomain, sessionID }, WTFMove(completionHandler), 0);
         });
     });
     return *result.iterator->value;

Modified: releases/WebKitGTK/webkit-2.28/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp (255797 => 255798)


--- releases/WebKitGTK/webkit-2.28/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp	2020-02-05 10:50:13 UTC (rev 255797)
+++ releases/WebKitGTK/webkit-2.28/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp	2020-02-05 10:50:24 UTC (rev 255798)
@@ -1299,9 +1299,9 @@
 #endif
 
 #if ENABLE(SERVICE_WORKER)
-void NetworkProcessProxy::establishWorkerContextConnectionToNetworkProcess(RegistrableDomain&& registrableDomain, PAL::SessionID sessionID)
+void NetworkProcessProxy::establishWorkerContextConnectionToNetworkProcess(RegistrableDomain&& registrableDomain, PAL::SessionID sessionID, CompletionHandler<void()>&& completionHandler)
 {
-    m_processPool.establishWorkerContextConnectionToNetworkProcess(*this, WTFMove(registrableDomain), sessionID);
+    m_processPool.establishWorkerContextConnectionToNetworkProcess(*this, WTFMove(registrableDomain), sessionID, WTFMove(completionHandler));
 }
 
 void NetworkProcessProxy::workerContextConnectionNoLongerNeeded(WebCore::ProcessIdentifier identifier)

Modified: releases/WebKitGTK/webkit-2.28/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h (255797 => 255798)


--- releases/WebKitGTK/webkit-2.28/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h	2020-02-05 10:50:13 UTC (rev 255797)
+++ releases/WebKitGTK/webkit-2.28/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h	2020-02-05 10:50:24 UTC (rev 255798)
@@ -262,7 +262,7 @@
 #endif
 
 #if ENABLE(SERVICE_WORKER)
-    void establishWorkerContextConnectionToNetworkProcess(WebCore::RegistrableDomain&&, PAL::SessionID);
+    void establishWorkerContextConnectionToNetworkProcess(WebCore::RegistrableDomain&&, PAL::SessionID, CompletionHandler<void()>&&);
     void workerContextConnectionNoLongerNeeded(WebCore::ProcessIdentifier);
     void registerServiceWorkerClientProcess(WebCore::ProcessIdentifier webProcessIdentifier, WebCore::ProcessIdentifier serviceWorkerProcessIdentifier);
     void unregisterServiceWorkerClientProcess(WebCore::ProcessIdentifier webProcessIdentifier, WebCore::ProcessIdentifier serviceWorkerProcessIdentifier);

Modified: releases/WebKitGTK/webkit-2.28/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in (255797 => 255798)


--- releases/WebKitGTK/webkit-2.28/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in	2020-02-05 10:50:13 UTC (rev 255797)
+++ releases/WebKitGTK/webkit-2.28/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in	2020-02-05 10:50:24 UTC (rev 255798)
@@ -62,7 +62,7 @@
 #endif
 
 #if ENABLE(SERVICE_WORKER)
-    EstablishWorkerContextConnectionToNetworkProcess(WebCore::RegistrableDomain registrableDomain, PAL::SessionID sessionID)
+    EstablishWorkerContextConnectionToNetworkProcess(WebCore::RegistrableDomain registrableDomain, PAL::SessionID sessionID) -> () Async
     WorkerContextConnectionNoLongerNeeded(WebCore::ProcessIdentifier identifier)
     RegisterServiceWorkerClientProcess(WebCore::ProcessIdentifier webProcessIdentifier, WebCore::ProcessIdentifier serviceWorkerProcessIdentifier)
     UnregisterServiceWorkerClientProcess(WebCore::ProcessIdentifier webProcessIdentifier, WebCore::ProcessIdentifier serviceWorkerProcessIdentifier)

Modified: releases/WebKitGTK/webkit-2.28/Source/WebKit/UIProcess/WebProcessPool.cpp (255797 => 255798)


--- releases/WebKitGTK/webkit-2.28/Source/WebKit/UIProcess/WebProcessPool.cpp	2020-02-05 10:50:13 UTC (rev 255797)
+++ releases/WebKitGTK/webkit-2.28/Source/WebKit/UIProcess/WebProcessPool.cpp	2020-02-05 10:50:24 UTC (rev 255798)
@@ -737,7 +737,7 @@
 #endif
 
 #if ENABLE(SERVICE_WORKER)
-void WebProcessPool::establishWorkerContextConnectionToNetworkProcess(NetworkProcessProxy& proxy, RegistrableDomain&& registrableDomain, PAL::SessionID sessionID)
+void WebProcessPool::establishWorkerContextConnectionToNetworkProcess(NetworkProcessProxy& proxy, RegistrableDomain&& registrableDomain, PAL::SessionID sessionID, CompletionHandler<void()>&& completionHandler)
 {
     ASSERT_UNUSED(proxy, &proxy == m_networkProcess.get());
 
@@ -752,6 +752,7 @@
     RegistrableDomainWithSessionID registrableDomainWithSessionID { RegistrableDomain { registrableDomain }, sessionID };
     if (m_serviceWorkerProcesses.contains(registrableDomainWithSessionID)) {
         WEBPROCESSPOOL_RELEASE_LOG_IF_ALLOWED(ServiceWorker, "establishWorkerContextConnectionToNetworkProcess process already created");
+        completionHandler();
         return;
     }
 
@@ -789,7 +790,7 @@
     ASSERT(!m_serviceWorkerProcesses.contains(registrableDomainWithSessionID));
     m_serviceWorkerProcesses.add(WTFMove(registrableDomainWithSessionID), makeWeakPtr(serviceWorkerProcessProxy));
 
-    serviceWorkerProcessProxy->establishServiceWorkerContext(m_serviceWorkerPreferences ? m_serviceWorkerPreferences.value() : m_defaultPageGroup->preferences().store());
+    serviceWorkerProcessProxy->establishServiceWorkerContext(m_serviceWorkerPreferences ? m_serviceWorkerPreferences.value() : m_defaultPageGroup->preferences().store(), WTFMove(completionHandler));
     if (!m_serviceWorkerUserAgent.isNull())
         serviceWorkerProcessProxy->setServiceWorkerUserAgent(m_serviceWorkerUserAgent);
 }

Modified: releases/WebKitGTK/webkit-2.28/Source/WebKit/UIProcess/WebProcessPool.h (255797 => 255798)


--- releases/WebKitGTK/webkit-2.28/Source/WebKit/UIProcess/WebProcessPool.h	2020-02-05 10:50:13 UTC (rev 255797)
+++ releases/WebKitGTK/webkit-2.28/Source/WebKit/UIProcess/WebProcessPool.h	2020-02-05 10:50:24 UTC (rev 255798)
@@ -398,7 +398,7 @@
 
     bool isServiceWorkerPageID(WebPageProxyIdentifier) const;
 #if ENABLE(SERVICE_WORKER)
-    void establishWorkerContextConnectionToNetworkProcess(NetworkProcessProxy&, WebCore::RegistrableDomain&&, PAL::SessionID);
+    void establishWorkerContextConnectionToNetworkProcess(NetworkProcessProxy&, WebCore::RegistrableDomain&&, PAL::SessionID, CompletionHandler<void()>&&);
     void removeFromServiceWorkerProcesses(WebProcessProxy&);
     size_t serviceWorkerProxiesCount() const { return m_serviceWorkerProcesses.size(); }
     void setAllowsAnySSLCertificateForServiceWorker(bool allows) { m_allowsAnySSLCertificateForServiceWorker = allows; }

Modified: releases/WebKitGTK/webkit-2.28/Source/WebKit/UIProcess/WebProcessProxy.cpp (255797 => 255798)


--- releases/WebKitGTK/webkit-2.28/Source/WebKit/UIProcess/WebProcessProxy.cpp	2020-02-05 10:50:13 UTC (rev 255797)
+++ releases/WebKitGTK/webkit-2.28/Source/WebKit/UIProcess/WebProcessProxy.cpp	2020-02-05 10:50:24 UTC (rev 255798)
@@ -1605,9 +1605,12 @@
 #endif
 
 #if ENABLE(SERVICE_WORKER)
-void WebProcessProxy::establishServiceWorkerContext(const WebPreferencesStore& store)
+void WebProcessProxy::establishServiceWorkerContext(const WebPreferencesStore& store, CompletionHandler<void()>&& completionHandler)
 {
-    send(Messages::WebProcess::EstablishWorkerContextConnectionToNetworkProcess { processPool().defaultPageGroup().pageGroupID(), m_serviceWorkerInformation->serviceWorkerPageProxyID, m_serviceWorkerInformation->serviceWorkerPageID, store, *m_registrableDomain, m_serviceWorkerInformation->initializationData }, 0);
+    sendWithAsyncReply(Messages::WebProcess::EstablishWorkerContextConnectionToNetworkProcess { processPool().defaultPageGroup().pageGroupID(), m_serviceWorkerInformation->serviceWorkerPageProxyID, m_serviceWorkerInformation->serviceWorkerPageID, store, *m_registrableDomain, m_serviceWorkerInformation->initializationData }, [activity = m_throttler.backgroundActivity("Establish Service Worker"_s), completionHandler = WTFMove(completionHandler)]() mutable {
+        RELEASE_LOG(Loading, "WebProcessProxy::establishServiceWorkerContext finished");
+        completionHandler();
+    }, 0);
 }
 
 void WebProcessProxy::setServiceWorkerUserAgent(const String& userAgent)

Modified: releases/WebKitGTK/webkit-2.28/Source/WebKit/UIProcess/WebProcessProxy.h (255797 => 255798)


--- releases/WebKitGTK/webkit-2.28/Source/WebKit/UIProcess/WebProcessProxy.h	2020-02-05 10:50:13 UTC (rev 255797)
+++ releases/WebKitGTK/webkit-2.28/Source/WebKit/UIProcess/WebProcessProxy.h	2020-02-05 10:50:24 UTC (rev 255798)
@@ -339,7 +339,7 @@
     void deref() final { ThreadSafeRefCounted::deref(); }
 
 #if ENABLE(SERVICE_WORKER)
-    void establishServiceWorkerContext(const WebPreferencesStore&);
+    void establishServiceWorkerContext(const WebPreferencesStore&, CompletionHandler<void()>&&);
     void setServiceWorkerUserAgent(const String&);
     void updateServiceWorkerPreferencesStore(const WebPreferencesStore&);
     bool hasServiceWorkerPageProxy(WebPageProxyIdentifier pageProxyID) { return m_serviceWorkerInformation && m_serviceWorkerInformation->serviceWorkerPageProxyID == pageProxyID; }

Modified: releases/WebKitGTK/webkit-2.28/Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.cpp (255797 => 255798)


--- releases/WebKitGTK/webkit-2.28/Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.cpp	2020-02-05 10:50:13 UTC (rev 255797)
+++ releases/WebKitGTK/webkit-2.28/Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.cpp	2020-02-05 10:50:24 UTC (rev 255798)
@@ -106,12 +106,16 @@
     }
 
     updatePreferencesStore(store);
-    m_connectionToNetworkProcess->send(Messages::NetworkConnectionToWebProcess::EstablishSWContextConnection { m_registrableDomain }, 0);
     WebProcess::singleton().disableTermination();
 }
 
 WebSWContextManagerConnection::~WebSWContextManagerConnection() = default;
 
+void WebSWContextManagerConnection::establishConnection(CompletionHandler<void()>&& completionHandler)
+{
+    m_connectionToNetworkProcess->sendWithAsyncReply(Messages::NetworkConnectionToWebProcess::EstablishSWContextConnection { m_registrableDomain }, WTFMove(completionHandler), 0);
+}
+
 void WebSWContextManagerConnection::updatePreferencesStore(const WebPreferencesStore& store)
 {
     RuntimeEnabledFeatures::sharedFeatures().setServiceWorkerEnabled(true);

Modified: releases/WebKitGTK/webkit-2.28/Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.h (255797 => 255798)


--- releases/WebKitGTK/webkit-2.28/Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.h	2020-02-05 10:50:13 UTC (rev 255797)
+++ releases/WebKitGTK/webkit-2.28/Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.h	2020-02-05 10:50:24 UTC (rev 255798)
@@ -68,6 +68,7 @@
     void updatePreferencesStore(const WebPreferencesStore&);
 
     // WebCore::SWContextManager::Connection.
+    void establishConnection(CompletionHandler<void()>&&) final;
     void postMessageToServiceWorkerClient(const WebCore::ServiceWorkerClientIdentifier& destinationIdentifier, const WebCore::MessageWithMessagePorts&, WebCore::ServiceWorkerIdentifier sourceIdentifier, const String& sourceOrigin) final;
     void didFinishInstall(Optional<WebCore::ServiceWorkerJobDataIdentifier>, WebCore::ServiceWorkerIdentifier, bool wasSuccessful) final;
     void didFinishActivation(WebCore::ServiceWorkerIdentifier) final;

Modified: releases/WebKitGTK/webkit-2.28/Source/WebKit/WebProcess/WebProcess.cpp (255797 => 255798)


--- releases/WebKitGTK/webkit-2.28/Source/WebKit/WebProcess/WebProcess.cpp	2020-02-05 10:50:13 UTC (rev 255797)
+++ releases/WebKitGTK/webkit-2.28/Source/WebKit/WebProcess/WebProcess.cpp	2020-02-05 10:50:24 UTC (rev 255798)
@@ -1850,7 +1850,7 @@
 }
 
 #if ENABLE(SERVICE_WORKER)
-void WebProcess::establishWorkerContextConnectionToNetworkProcess(uint64_t pageGroupID, WebPageProxyIdentifier webPageProxyID, PageIdentifier pageID, const WebPreferencesStore& store, RegistrableDomain&& registrableDomain, ServiceWorkerInitializationData&& initializationData)
+void WebProcess::establishWorkerContextConnectionToNetworkProcess(uint64_t pageGroupID, WebPageProxyIdentifier webPageProxyID, PageIdentifier pageID, const WebPreferencesStore& store, RegistrableDomain&& registrableDomain, ServiceWorkerInitializationData&& initializationData, CompletionHandler<void()>&& completionHandler)
 {
     // We are in the Service Worker context process and the call below establishes our connection to the Network Process
     // by calling ensureNetworkProcessConnection. SWContextManager needs to use the same underlying IPC::Connection as the
@@ -1857,6 +1857,7 @@
     // NetworkProcessConnection for synchronization purposes.
     auto& ipcConnection = ensureNetworkProcessConnection().connection();
     SWContextManager::singleton().setConnection(makeUnique<WebSWContextManagerConnection>(ipcConnection, WTFMove(registrableDomain), pageGroupID, webPageProxyID, pageID, store, WTFMove(initializationData)));
+    SWContextManager::singleton().connection()->establishConnection(WTFMove(completionHandler));
 }
 
 void WebProcess::registerServiceWorkerClients()

Modified: releases/WebKitGTK/webkit-2.28/Source/WebKit/WebProcess/WebProcess.h (255797 => 255798)


--- releases/WebKitGTK/webkit-2.28/Source/WebKit/WebProcess/WebProcess.h	2020-02-05 10:50:13 UTC (rev 255797)
+++ releases/WebKitGTK/webkit-2.28/Source/WebKit/WebProcess/WebProcess.h	2020-02-05 10:50:24 UTC (rev 255798)
@@ -400,7 +400,7 @@
 #endif
 
 #if ENABLE(SERVICE_WORKER)
-    void establishWorkerContextConnectionToNetworkProcess(uint64_t pageGroupID, WebPageProxyIdentifier, WebCore::PageIdentifier, const WebPreferencesStore&, WebCore::RegistrableDomain&&, ServiceWorkerInitializationData&&);
+    void establishWorkerContextConnectionToNetworkProcess(uint64_t pageGroupID, WebPageProxyIdentifier, WebCore::PageIdentifier, const WebPreferencesStore&, WebCore::RegistrableDomain&&, ServiceWorkerInitializationData&&, CompletionHandler<void()>&&);
     void registerServiceWorkerClients();
 #endif
 

Modified: releases/WebKitGTK/webkit-2.28/Source/WebKit/WebProcess/WebProcess.messages.in (255797 => 255798)


--- releases/WebKitGTK/webkit-2.28/Source/WebKit/WebProcess/WebProcess.messages.in	2020-02-05 10:50:13 UTC (rev 255797)
+++ releases/WebKitGTK/webkit-2.28/Source/WebKit/WebProcess/WebProcess.messages.in	2020-02-05 10:50:24 UTC (rev 255798)
@@ -106,7 +106,7 @@
 #endif
 
 #if ENABLE(SERVICE_WORKER)
-    EstablishWorkerContextConnectionToNetworkProcess(uint64_t pageGroupID, WebKit::WebPageProxyIdentifier webPageProxyID, WebCore::PageIdentifier pageID, struct WebKit::WebPreferencesStore store, WebCore::RegistrableDomain domain, struct WebKit::ServiceWorkerInitializationData initializationData)
+    EstablishWorkerContextConnectionToNetworkProcess(uint64_t pageGroupID, WebKit::WebPageProxyIdentifier webPageProxyID, WebCore::PageIdentifier pageID, struct WebKit::WebPreferencesStore store, WebCore::RegistrableDomain domain, struct WebKit::ServiceWorkerInitializationData initializationData) -> () Async
     RegisterServiceWorkerClients()
 #endif
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to