Title: [228706] branches/safari-605-branch/Source/WebKit

Diff

Modified: branches/safari-605-branch/Source/WebKit/ChangeLog (228705 => 228706)


--- branches/safari-605-branch/Source/WebKit/ChangeLog	2018-02-19 20:16:54 UTC (rev 228705)
+++ branches/safari-605-branch/Source/WebKit/ChangeLog	2018-02-19 20:56:38 UTC (rev 228706)
@@ -1,3 +1,37 @@
+2018-02-19  Jason Marcell  <jmarc...@apple.com>
+
+        Cherry-pick r228564. rdar://problem/37675352
+
+    2018-02-16  Chris Dumez  <cdu...@apple.com>
+
+            ASSERTION FAILED: !m_processes[i] || *m_processes[i] == process in MessagePortChannel::entanglePortWithProcess()
+            https://bugs.webkit.org/show_bug.cgi?id=182054
+            <rdar://problem/36871207>
+
+            Reviewed by Brady Eidson.
+
+            Pipe postMessage messages to and from service workers via the UIProcess instead of going
+            directly to the StorageProcess. This is temporarily needed to avoid races due to the
+            MessagePort registry currently living in the UIProcess and postMessage messages potentially
+            sending MessagePort objects.
+
+            This change is covered by tests on the bots that currently flakily crash in debug.
+
+            * StorageProcess/ServiceWorker/WebSWServerConnection.h:
+            * StorageProcess/StorageProcess.cpp:
+            (WebKit::StorageProcess::postMessageToServiceWorker):
+            * StorageProcess/StorageProcess.h:
+            * StorageProcess/StorageProcess.messages.in:
+            * UIProcess/WebProcessPool.cpp:
+            (WebKit::WebProcessPool::postMessageToServiceWorkerClient):
+            (WebKit::WebProcessPool::postMessageToServiceWorker):
+            * UIProcess/WebProcessPool.h:
+            * UIProcess/WebProcessPool.messages.in:
+            * WebProcess/Storage/WebSWClientConnection.cpp:
+            (WebKit::WebSWClientConnection::postMessageToServiceWorker):
+            * WebProcess/Storage/WebSWContextManagerConnection.cpp:
+            (WebKit::WebSWContextManagerConnection::postMessageToServiceWorkerClient):
+
 2018-02-16  Jason Marcell  <jmarc...@apple.com>
 
         Cherry-pick r228551. rdar://problem/37615430

Modified: branches/safari-605-branch/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.h (228705 => 228706)


--- branches/safari-605-branch/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.h	2018-02-19 20:16:54 UTC (rev 228705)
+++ branches/safari-605-branch/Source/WebKit/StorageProcess/ServiceWorker/WebSWServerConnection.h	2018-02-19 20:56:38 UTC (rev 228706)
@@ -69,6 +69,7 @@
     void didNotHandleFetch(uint64_t fetchIdentifier);
 
     void postMessageToServiceWorkerClient(WebCore::DocumentIdentifier destinationContextIdentifier, WebCore::MessageWithMessagePorts&&, WebCore::ServiceWorkerIdentifier sourceServiceWorkerIdentifier, const String& sourceOrigin);
+    void postMessageToServiceWorker(WebCore::ServiceWorkerIdentifier destination, WebCore::MessageWithMessagePorts&&, const WebCore::ServiceWorkerOrClientIdentifier& source);
 
 private:
     // Implement SWServer::Connection (Messages to the client WebProcess)
@@ -88,8 +89,6 @@
 
     void startFetch(uint64_t fetchIdentifier, WebCore::ServiceWorkerRegistrationIdentifier, WebCore::ResourceRequest&&, WebCore::FetchOptions&&, IPC::FormDataReference&&, String&& referrer);
 
-    void postMessageToServiceWorker(WebCore::ServiceWorkerIdentifier destination, WebCore::MessageWithMessagePorts&&, const WebCore::ServiceWorkerOrClientIdentifier& source);
-
     void matchRegistration(uint64_t registrationMatchRequestIdentifier, const WebCore::SecurityOriginData& topOrigin, const WebCore::URL& clientURL);
     void getRegistrations(uint64_t registrationMatchRequestIdentifier, const WebCore::SecurityOriginData& topOrigin, const WebCore::URL& clientURL);
 

Modified: branches/safari-605-branch/Source/WebKit/StorageProcess/StorageProcess.cpp (228705 => 228706)


--- branches/safari-605-branch/Source/WebKit/StorageProcess/StorageProcess.cpp	2018-02-19 20:16:54 UTC (rev 228705)
+++ branches/safari-605-branch/Source/WebKit/StorageProcess/StorageProcess.cpp	2018-02-19 20:56:38 UTC (rev 228706)
@@ -484,6 +484,12 @@
         connection->postMessageToServiceWorkerClient(destinationIdentifier.contextIdentifier, WTFMove(message), sourceIdentifier, sourceOrigin);
 }
 
+void StorageProcess::postMessageToServiceWorker(WebCore::ServiceWorkerIdentifier destination, WebCore::MessageWithMessagePorts&& message, const WebCore::ServiceWorkerOrClientIdentifier& source, SWServerConnectionIdentifier connectionIdentifier)
+{
+    if (auto* connection = m_swServerConnections.get(connectionIdentifier))
+        connection->postMessageToServiceWorker(destination, WTFMove(message), source);
+}
+
 void StorageProcess::registerSWServerConnection(WebSWServerConnection& connection)
 {
     ASSERT(!m_swServerConnections.contains(connection.identifier()));

Modified: branches/safari-605-branch/Source/WebKit/StorageProcess/StorageProcess.h (228705 => 228706)


--- branches/safari-605-branch/Source/WebKit/StorageProcess/StorageProcess.h	2018-02-19 20:16:54 UTC (rev 228705)
+++ branches/safari-605-branch/Source/WebKit/StorageProcess/StorageProcess.h	2018-02-19 20:56:38 UTC (rev 228706)
@@ -137,6 +137,8 @@
     void didNotHandleFetch(WebCore::SWServerConnectionIdentifier, uint64_t fetchIdentifier);
 
     void postMessageToServiceWorkerClient(const WebCore::ServiceWorkerClientIdentifier& destinationIdentifier, WebCore::MessageWithMessagePorts&&, WebCore::ServiceWorkerIdentifier sourceIdentifier, const String& sourceOrigin);
+    void postMessageToServiceWorker(WebCore::ServiceWorkerIdentifier destination, WebCore::MessageWithMessagePorts&&, const WebCore::ServiceWorkerOrClientIdentifier& source, WebCore::SWServerConnectionIdentifier);
+
     WebSWOriginStore& swOriginStoreForSession(PAL::SessionID);
     bool needsServerToContextConnection() const;
 #endif

Modified: branches/safari-605-branch/Source/WebKit/StorageProcess/StorageProcess.messages.in (228705 => 228706)


--- branches/safari-605-branch/Source/WebKit/StorageProcess/StorageProcess.messages.in	2018-02-19 20:16:54 UTC (rev 228705)
+++ branches/safari-605-branch/Source/WebKit/StorageProcess/StorageProcess.messages.in	2018-02-19 20:56:38 UTC (rev 228706)
@@ -43,5 +43,7 @@
     DidReceiveFetchFormData(WebCore::SWServerConnectionIdentifier serverConnectionIdentifier, uint64_t fetchIdentifier, IPC::FormDataReference data)
     DidFinishFetch(WebCore::SWServerConnectionIdentifier serverConnectionIdentifier, uint64_t fetchIdentifier)
     PostMessageToServiceWorkerClient(struct WebCore::ServiceWorkerClientIdentifier destinationIdentifier, struct WebCore::MessageWithMessagePorts message, WebCore::ServiceWorkerIdentifier sourceIdentifier, String sourceOrigin)
+
+    PostMessageToServiceWorker(WebCore::ServiceWorkerIdentifier destination, struct WebCore::MessageWithMessagePorts message, WebCore::ServiceWorkerOrClientIdentifier source, WebCore::SWServerConnectionIdentifier connectionIdentifier)
 #endif
 }

Modified: branches/safari-605-branch/Source/WebKit/UIProcess/WebProcessPool.cpp (228705 => 228706)


--- branches/safari-605-branch/Source/WebKit/UIProcess/WebProcessPool.cpp	2018-02-19 20:16:54 UTC (rev 228705)
+++ branches/safari-605-branch/Source/WebKit/UIProcess/WebProcessPool.cpp	2018-02-19 20:56:38 UTC (rev 228706)
@@ -1848,6 +1848,18 @@
 #endif
 }
 
+#if ENABLE(SERVICE_WORKER)
+void WebProcessPool::postMessageToServiceWorkerClient(const ServiceWorkerClientIdentifier& destination, MessageWithMessagePorts&& message, ServiceWorkerIdentifier source, const String& sourceOrigin)
+{
+    sendToStorageProcessRelaunchingIfNecessary(Messages::StorageProcess::PostMessageToServiceWorkerClient(destination, WTFMove(message), source, sourceOrigin));
+}
+
+void WebProcessPool::postMessageToServiceWorker(ServiceWorkerIdentifier destination, MessageWithMessagePorts&& message, const ServiceWorkerOrClientIdentifier& source, SWServerConnectionIdentifier connectionIdentifier)
+{
+    sendToStorageProcessRelaunchingIfNecessary(Messages::StorageProcess::PostMessageToServiceWorker(destination, WTFMove(message), source, connectionIdentifier));
+}
+#endif
+
 void WebProcessPool::reinstateNetworkProcessAssertionState(NetworkProcessProxy& newNetworkProcessProxy)
 {
 #if PLATFORM(IOS)

Modified: branches/safari-605-branch/Source/WebKit/UIProcess/WebProcessPool.h (228705 => 228706)


--- branches/safari-605-branch/Source/WebKit/UIProcess/WebProcessPool.h	2018-02-19 20:16:54 UTC (rev 228705)
+++ branches/safari-605-branch/Source/WebKit/UIProcess/WebProcessPool.h	2018-02-19 20:56:38 UTC (rev 228706)
@@ -425,6 +425,11 @@
     void setStorageAccessAPIEnabled(bool);
 #endif
 
+#if ENABLE(SERVICE_WORKER)
+    void postMessageToServiceWorkerClient(const WebCore::ServiceWorkerClientIdentifier& destinationIdentifier, WebCore::MessageWithMessagePorts&&, WebCore::ServiceWorkerIdentifier sourceIdentifier, const String& sourceOrigin);
+    void postMessageToServiceWorker(WebCore::ServiceWorkerIdentifier destination, WebCore::MessageWithMessagePorts&&, const WebCore::ServiceWorkerOrClientIdentifier& source, WebCore::SWServerConnectionIdentifier);
+#endif
+
     static uint64_t registerProcessPoolCreationListener(Function<void(WebProcessPool&)>&&);
     static void unregisterProcessPoolCreationListener(uint64_t identifier);
 

Modified: branches/safari-605-branch/Source/WebKit/UIProcess/WebProcessPool.messages.in (228705 => 228706)


--- branches/safari-605-branch/Source/WebKit/UIProcess/WebProcessPool.messages.in	2018-02-19 20:16:54 UTC (rev 228705)
+++ branches/safari-605-branch/Source/WebKit/UIProcess/WebProcessPool.messages.in	2018-02-19 20:56:38 UTC (rev 228706)
@@ -36,4 +36,9 @@
     void PlugInDidReceiveUserInteraction(uint32_t hash, PAL::SessionID sessionID)
 
     ReportWebContentCPUTime(Seconds cpuTime, uint64_t activityState)
+
+#if ENABLE(SERVICE_WORKER)
+    PostMessageToServiceWorkerClient(struct WebCore::ServiceWorkerClientIdentifier destinationIdentifier, struct WebCore::MessageWithMessagePorts message, WebCore::ServiceWorkerIdentifier sourceIdentifier, String sourceOrigin)
+    PostMessageToServiceWorker(WebCore::ServiceWorkerIdentifier destination, struct WebCore::MessageWithMessagePorts message, WebCore::ServiceWorkerOrClientIdentifier source, WebCore::SWServerConnectionIdentifier connectionIdentifier)
+#endif
 }

Modified: branches/safari-605-branch/Source/WebKit/WebProcess/Storage/WebSWClientConnection.cpp (228705 => 228706)


--- branches/safari-605-branch/Source/WebKit/WebProcess/Storage/WebSWClientConnection.cpp	2018-02-19 20:16:54 UTC (rev 228705)
+++ branches/safari-605-branch/Source/WebKit/WebProcess/Storage/WebSWClientConnection.cpp	2018-02-19 20:56:38 UTC (rev 228706)
@@ -34,6 +34,8 @@
 #include "ServiceWorkerClientFetch.h"
 #include "StorageToWebProcessConnectionMessages.h"
 #include "WebCoreArgumentCoders.h"
+#include "WebProcess.h"
+#include "WebProcessPoolMessages.h"
 #include "WebSWOriginTable.h"
 #include "WebSWServerConnectionMessages.h"
 #include <WebCore/Document.h>
@@ -85,7 +87,9 @@
 
 void WebSWClientConnection::postMessageToServiceWorker(ServiceWorkerIdentifier destinationIdentifier, MessageWithMessagePorts&& message, const ServiceWorkerOrClientIdentifier& sourceIdentifier)
 {
-    send(Messages::WebSWServerConnection::PostMessageToServiceWorker(destinationIdentifier, WTFMove(message), sourceIdentifier) );
+    // FIXME: Temporarily pipe the SW postMessage messages via the UIProcess since this is where the MessagePort registry lives
+    // and this avoids races.
+    WebProcess::singleton().send(Messages::WebProcessPool::PostMessageToServiceWorker(destinationIdentifier, WTFMove(message), sourceIdentifier, serverConnectionIdentifier()), 0);
 }
 
 void WebSWClientConnection::registerServiceWorkerClient(const SecurityOrigin& topOrigin, const WebCore::ServiceWorkerClientData& data, const std::optional<WebCore::ServiceWorkerIdentifier>& controllingServiceWorkerIdentifier)

Modified: branches/safari-605-branch/Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.cpp (228705 => 228706)


--- branches/safari-605-branch/Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.cpp	2018-02-19 20:16:54 UTC (rev 228705)
+++ branches/safari-605-branch/Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.cpp	2018-02-19 20:56:38 UTC (rev 228706)
@@ -39,6 +39,7 @@
 #include "WebPreferencesKeys.h"
 #include "WebPreferencesStore.h"
 #include "WebProcess.h"
+#include "WebProcessPoolMessages.h"
 #include "WebSWServerToContextConnectionMessages.h"
 #include "WebServiceWorkerFetchTaskClient.h"
 #include "WebSocketProvider.h"
@@ -219,7 +220,9 @@
 
 void WebSWContextManagerConnection::postMessageToServiceWorkerClient(const ServiceWorkerClientIdentifier& destinationIdentifier, MessageWithMessagePorts&& message, ServiceWorkerIdentifier sourceIdentifier, const String& sourceOrigin)
 {
-    m_connectionToStorageProcess->send(Messages::StorageProcess::PostMessageToServiceWorkerClient(destinationIdentifier, WTFMove(message), sourceIdentifier, sourceOrigin), 0);
+    // FIXME: Temporarily pipe the SW postMessage messages via the UIProcess since this is where the MessagePort registry lives
+    // and this avoids races.
+    WebProcess::singleton().send(Messages::WebProcessPool::PostMessageToServiceWorkerClient(destinationIdentifier, WTFMove(message), sourceIdentifier, sourceOrigin), 0);
 }
 
 void WebSWContextManagerConnection::didFinishInstall(std::optional<ServiceWorkerJobDataIdentifier> jobDataIdentifier, ServiceWorkerIdentifier serviceWorkerIdentifier, bool wasSuccessful)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to