Diff
Modified: trunk/Source/WebCore/ChangeLog (287762 => 287763)
--- trunk/Source/WebCore/ChangeLog 2022-01-07 18:48:40 UTC (rev 287762)
+++ trunk/Source/WebCore/ChangeLog 2022-01-07 18:53:26 UTC (rev 287763)
@@ -1,3 +1,23 @@
+2022-01-07 Youenn Fablet <you...@apple.com>
+
+ Use completion handlers for takeAllMessagesForPort methods
+ https://bugs.webkit.org/show_bug.cgi?id=234947
+
+ Reviewed by Chris Dumez.
+
+ Covered by existing tests.
+
+ * dom/MessagePort.cpp:
+ * dom/messageports/MessagePortChannel.cpp:
+ * dom/messageports/MessagePortChannel.h:
+ * dom/messageports/MessagePortChannelProvider.h:
+ * dom/messageports/MessagePortChannelProviderImpl.cpp:
+ * dom/messageports/MessagePortChannelProviderImpl.h:
+ * dom/messageports/MessagePortChannelRegistry.cpp:
+ * dom/messageports/MessagePortChannelRegistry.h:
+ * dom/messageports/WorkerMessagePortChannelProvider.cpp:
+ * dom/messageports/WorkerMessagePortChannelProvider.h:
+
2022-01-07 Antoine Quint <grao...@webkit.org>
Expose iterators on AnimationList
Modified: trunk/Source/WebCore/dom/MessagePort.cpp (287762 => 287763)
--- trunk/Source/WebCore/dom/MessagePort.cpp 2022-01-07 18:48:40 UTC (rev 287762)
+++ trunk/Source/WebCore/dom/MessagePort.cpp 2022-01-07 18:53:26 UTC (rev 287763)
@@ -260,7 +260,7 @@
if (!context || context->activeDOMObjectsAreSuspended() || !isEntangled())
return;
- auto messagesTakenHandler = [this, weakThis = WeakPtr { *this }](Vector<MessageWithMessagePorts>&& messages, Function<void()>&& completionCallback) mutable {
+ auto messagesTakenHandler = [this, weakThis = WeakPtr { *this }](Vector<MessageWithMessagePorts>&& messages, CompletionHandler<void()>&& completionCallback) mutable {
auto scopeExit = makeScopeExit(WTFMove(completionCallback));
if (!weakThis)
Modified: trunk/Source/WebCore/dom/messageports/MessagePortChannel.cpp (287762 => 287763)
--- trunk/Source/WebCore/dom/messageports/MessagePortChannel.cpp 2022-01-07 18:48:40 UTC (rev 287762)
+++ trunk/Source/WebCore/dom/messageports/MessagePortChannel.cpp 2022-01-07 18:53:26 UTC (rev 287763)
@@ -147,7 +147,7 @@
return false;
}
-void MessagePortChannel::takeAllMessagesForPort(const MessagePortIdentifier& port, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, Function<void()>&&)>&& callback)
+void MessagePortChannel::takeAllMessagesForPort(const MessagePortIdentifier& port, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, CompletionHandler<void()>&&)>&& callback)
{
ASSERT(isMainThread());
Modified: trunk/Source/WebCore/dom/messageports/MessagePortChannel.h (287762 => 287763)
--- trunk/Source/WebCore/dom/messageports/MessagePortChannel.h 2022-01-07 18:48:40 UTC (rev 287762)
+++ trunk/Source/WebCore/dom/messageports/MessagePortChannel.h 2022-01-07 18:53:26 UTC (rev 287763)
@@ -53,7 +53,7 @@
void closePort(const MessagePortIdentifier&);
bool postMessageToRemote(MessageWithMessagePorts&&, const MessagePortIdentifier& remoteTarget);
- void takeAllMessagesForPort(const MessagePortIdentifier&, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, Function<void()>&&)>&&);
+ void takeAllMessagesForPort(const MessagePortIdentifier&, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, CompletionHandler<void()>&&)>&&);
void checkRemotePortForActivity(const MessagePortIdentifier&, CompletionHandler<void(MessagePortChannelProvider::HasActivity)>&& callback);
WEBCORE_EXPORT bool hasAnyMessagesPendingOrInFlight() const;
Modified: trunk/Source/WebCore/dom/messageports/MessagePortChannelProvider.h (287762 => 287763)
--- trunk/Source/WebCore/dom/messageports/MessagePortChannelProvider.h 2022-01-07 18:48:40 UTC (rev 287762)
+++ trunk/Source/WebCore/dom/messageports/MessagePortChannelProvider.h 2022-01-07 18:53:26 UTC (rev 287763)
@@ -49,7 +49,7 @@
virtual void messagePortDisentangled(const MessagePortIdentifier& local) = 0;
virtual void messagePortClosed(const MessagePortIdentifier& local) = 0;
- virtual void takeAllMessagesForPort(const MessagePortIdentifier&, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, Function<void()>&&)>&&) = 0;
+ virtual void takeAllMessagesForPort(const MessagePortIdentifier&, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, CompletionHandler<void()>&&)>&&) = 0;
virtual void postMessageToRemote(MessageWithMessagePorts&&, const MessagePortIdentifier& remoteTarget) = 0;
Modified: trunk/Source/WebCore/dom/messageports/MessagePortChannelProviderImpl.cpp (287762 => 287763)
--- trunk/Source/WebCore/dom/messageports/MessagePortChannelProviderImpl.cpp 2022-01-07 18:48:40 UTC (rev 287762)
+++ trunk/Source/WebCore/dom/messageports/MessagePortChannelProviderImpl.cpp 2022-01-07 18:53:26 UTC (rev 287763)
@@ -86,10 +86,10 @@
});
}
-void MessagePortChannelProviderImpl::takeAllMessagesForPort(const MessagePortIdentifier& port, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, Function<void()>&&)>&& outerCallback)
+void MessagePortChannelProviderImpl::takeAllMessagesForPort(const MessagePortIdentifier& port, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, CompletionHandler<void()>&&)>&& outerCallback)
{
// It is the responsibility of outerCallback to get itself to the appropriate thread (e.g. WebWorker thread)
- auto callback = [outerCallback = WTFMove(outerCallback)](Vector<MessageWithMessagePorts>&& messages, Function<void()>&& messageDeliveryCallback) mutable {
+ auto callback = [outerCallback = WTFMove(outerCallback)](Vector<MessageWithMessagePorts>&& messages, CompletionHandler<void()>&& messageDeliveryCallback) mutable {
ASSERT(isMainThread());
outerCallback(WTFMove(messages), WTFMove(messageDeliveryCallback));
};
Modified: trunk/Source/WebCore/dom/messageports/MessagePortChannelProviderImpl.h (287762 => 287763)
--- trunk/Source/WebCore/dom/messageports/MessagePortChannelProviderImpl.h 2022-01-07 18:48:40 UTC (rev 287762)
+++ trunk/Source/WebCore/dom/messageports/MessagePortChannelProviderImpl.h 2022-01-07 18:53:26 UTC (rev 287763)
@@ -41,7 +41,7 @@
void messagePortDisentangled(const MessagePortIdentifier& local) final;
void messagePortClosed(const MessagePortIdentifier& local) final;
void postMessageToRemote(MessageWithMessagePorts&&, const MessagePortIdentifier& remoteTarget) final;
- void takeAllMessagesForPort(const MessagePortIdentifier&, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, Function<void()>&&)>&&) final;
+ void takeAllMessagesForPort(const MessagePortIdentifier&, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, CompletionHandler<void()>&&)>&&) final;
void checkRemotePortForActivity(const MessagePortIdentifier& remoteTarget, CompletionHandler<void(HasActivity)>&& callback) final;
MessagePortChannelRegistry m_registry;
Modified: trunk/Source/WebCore/dom/messageports/MessagePortChannelRegistry.cpp (287762 => 287763)
--- trunk/Source/WebCore/dom/messageports/MessagePortChannelRegistry.cpp 2022-01-07 18:48:40 UTC (rev 287762)
+++ trunk/Source/WebCore/dom/messageports/MessagePortChannelRegistry.cpp 2022-01-07 18:53:26 UTC (rev 287763)
@@ -141,7 +141,7 @@
return channel->postMessageToRemote(WTFMove(message), remoteTarget);
}
-void MessagePortChannelRegistry::takeAllMessagesForPort(const MessagePortIdentifier& port, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, Function<void()>&&)>&& callback)
+void MessagePortChannelRegistry::takeAllMessagesForPort(const MessagePortIdentifier& port, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, CompletionHandler<void()>&&)>&& callback)
{
ASSERT(isMainThread());
Modified: trunk/Source/WebCore/dom/messageports/MessagePortChannelRegistry.h (287762 => 287763)
--- trunk/Source/WebCore/dom/messageports/MessagePortChannelRegistry.h 2022-01-07 18:48:40 UTC (rev 287762)
+++ trunk/Source/WebCore/dom/messageports/MessagePortChannelRegistry.h 2022-01-07 18:53:26 UTC (rev 287763)
@@ -45,7 +45,7 @@
WEBCORE_EXPORT void didDisentangleMessagePort(const MessagePortIdentifier& local);
WEBCORE_EXPORT void didCloseMessagePort(const MessagePortIdentifier& local);
WEBCORE_EXPORT bool didPostMessageToRemote(MessageWithMessagePorts&&, const MessagePortIdentifier& remoteTarget);
- WEBCORE_EXPORT void takeAllMessagesForPort(const MessagePortIdentifier&, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, Function<void()>&&)>&&);
+ WEBCORE_EXPORT void takeAllMessagesForPort(const MessagePortIdentifier&, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, CompletionHandler<void()>&&)>&&);
WEBCORE_EXPORT void checkRemotePortForActivity(const MessagePortIdentifier& remoteTarget, CompletionHandler<void(MessagePortChannelProvider::HasActivity)>&& callback);
WEBCORE_EXPORT MessagePortChannel* existingChannelContainingPort(const MessagePortIdentifier&);
Modified: trunk/Source/WebCore/dom/messageports/WorkerMessagePortChannelProvider.cpp (287762 => 287763)
--- trunk/Source/WebCore/dom/messageports/WorkerMessagePortChannelProvider.cpp 2022-01-07 18:48:40 UTC (rev 287762)
+++ trunk/Source/WebCore/dom/messageports/WorkerMessagePortChannelProvider.cpp 2022-01-07 18:53:26 UTC (rev 287763)
@@ -110,7 +110,7 @@
CompletionHandler<void()> m_completionHandler;
};
-void WorkerMessagePortChannelProvider::takeAllMessagesForPort(const MessagePortIdentifier& identifier, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, Function<void()>&&)>&& callback)
+void WorkerMessagePortChannelProvider::takeAllMessagesForPort(const MessagePortIdentifier& identifier, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, CompletionHandler<void()>&&)>&& callback)
{
uint64_t callbackIdentifier = ++m_lastCallbackIdentifier;
m_takeAllMessagesCallbacks.add(callbackIdentifier, WTFMove(callback));
Modified: trunk/Source/WebCore/dom/messageports/WorkerMessagePortChannelProvider.h (287762 => 287763)
--- trunk/Source/WebCore/dom/messageports/WorkerMessagePortChannelProvider.h 2022-01-07 18:48:40 UTC (rev 287762)
+++ trunk/Source/WebCore/dom/messageports/WorkerMessagePortChannelProvider.h 2022-01-07 18:53:26 UTC (rev 287763)
@@ -46,7 +46,7 @@
void messagePortDisentangled(const MessagePortIdentifier& local) final;
void messagePortClosed(const MessagePortIdentifier& local) final;
void postMessageToRemote(MessageWithMessagePorts&&, const MessagePortIdentifier& remoteTarget) final;
- void takeAllMessagesForPort(const MessagePortIdentifier&, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, Function<void()>&&)>&&) final;
+ void takeAllMessagesForPort(const MessagePortIdentifier&, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, CompletionHandler<void()>&&)>&&) final;
void checkRemotePortForActivity(const MessagePortIdentifier& remoteTarget, CompletionHandler<void(HasActivity)>&& callback) final;
WorkerOrWorkletGlobalScope& m_scope;
Modified: trunk/Source/WebKit/ChangeLog (287762 => 287763)
--- trunk/Source/WebKit/ChangeLog 2022-01-07 18:48:40 UTC (rev 287762)
+++ trunk/Source/WebKit/ChangeLog 2022-01-07 18:53:26 UTC (rev 287763)
@@ -1,3 +1,15 @@
+2022-01-07 Youenn Fablet <you...@apple.com>
+
+ Use completion handlers for takeAllMessagesForPort methods
+ https://bugs.webkit.org/show_bug.cgi?id=234947
+
+ Reviewed by Chris Dumez.
+
+ * NetworkProcess/NetworkConnectionToWebProcess.cpp:
+ * NetworkProcess/NetworkConnectionToWebProcess.h:
+ * WebProcess/WebCoreSupport/WebMessagePortChannelProvider.cpp:
+ * WebProcess/WebCoreSupport/WebMessagePortChannelProvider.h:
+
2022-01-07 Peng Liu <peng.l...@apple.com>
Clean up FullscreenClient
Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp (287762 => 287763)
--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp 2022-01-07 18:48:40 UTC (rev 287762)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp 2022-01-07 18:53:26 UTC (rev 287763)
@@ -142,6 +142,10 @@
for (auto& port : m_processEntangledPorts)
networkProcess().messagePortChannelRegistry().didCloseMessagePort(port);
+ auto completionHandlers = std::exchange(m_messageBatchDeliveryCompletionHandlers, { });
+ for (auto& completionHandler : completionHandlers.values())
+ completionHandler();
+
#if HAVE(COOKIE_CHANGE_LISTENER_API)
if (auto* networkStorageSession = storageSession())
networkStorageSession->stopListeningForCookieChangeNotifications(*this, m_hostsWithCookieListeners);
@@ -1227,7 +1231,7 @@
networkProcess().messagePortChannelRegistry().didCloseMessagePort(port);
}
-uint64_t NetworkConnectionToWebProcess::nextMessageBatchIdentifier(Function<void()>&& deliveryCallback)
+uint64_t NetworkConnectionToWebProcess::nextMessageBatchIdentifier(CompletionHandler<void()>&& deliveryCallback)
{
static uint64_t currentMessageBatchIdentifier;
ASSERT(!m_messageBatchDeliveryCompletionHandlers.contains(currentMessageBatchIdentifier + 1));
@@ -1237,7 +1241,7 @@
void NetworkConnectionToWebProcess::takeAllMessagesForPort(const MessagePortIdentifier& port, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, uint64_t)>&& callback)
{
- networkProcess().messagePortChannelRegistry().takeAllMessagesForPort(port, [this, protectedThis = Ref { *this }, callback = WTFMove(callback)](auto&& messages, Function<void()>&& deliveryCallback) mutable {
+ networkProcess().messagePortChannelRegistry().takeAllMessagesForPort(port, [this, protectedThis = Ref { *this }, callback = WTFMove(callback)](auto&& messages, auto&& deliveryCallback) mutable {
callback(WTFMove(messages), nextMessageBatchIdentifier(WTFMove(deliveryCallback)));
});
}
Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h (287762 => 287763)
--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h 2022-01-07 18:48:40 UTC (rev 287762)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h 2022-01-07 18:53:26 UTC (rev 287763)
@@ -303,7 +303,7 @@
void removeOriginAccessAllowListEntry(const String& sourceOrigin, const String& destinationProtocol, const String& destinationHost, bool allowDestinationSubdomains);
void resetOriginAccessAllowLists();
- uint64_t nextMessageBatchIdentifier(Function<void()>&&);
+ uint64_t nextMessageBatchIdentifier(CompletionHandler<void()>&&);
void domCookiesForHost(const String& host, bool subscribeToCookieChangeNotifications, CompletionHandler<void(const Vector<WebCore::Cookie>&)>&&);
@@ -410,7 +410,7 @@
const WebCore::ProcessIdentifier m_webProcessIdentifier;
HashSet<WebCore::MessagePortIdentifier> m_processEntangledPorts;
- HashMap<uint64_t, Function<void()>> m_messageBatchDeliveryCompletionHandlers;
+ HashMap<uint64_t, CompletionHandler<void()>> m_messageBatchDeliveryCompletionHandlers;
Ref<NetworkSchemeRegistry> m_schemeRegistry;
HashSet<URL> m_blobURLs;
Modified: trunk/Source/WebKit/WebProcess/WebCoreSupport/WebMessagePortChannelProvider.cpp (287762 => 287763)
--- trunk/Source/WebKit/WebProcess/WebCoreSupport/WebMessagePortChannelProvider.cpp 2022-01-07 18:48:40 UTC (rev 287762)
+++ trunk/Source/WebKit/WebProcess/WebCoreSupport/WebMessagePortChannelProvider.cpp 2022-01-07 18:53:26 UTC (rev 287763)
@@ -76,7 +76,7 @@
networkProcessConnection().send(Messages::NetworkConnectionToWebProcess::MessagePortClosed { port }, 0);
}
-void WebMessagePortChannelProvider::takeAllMessagesForPort(const MessagePortIdentifier& port, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, Function<void()>&&)>&& completionHandler)
+void WebMessagePortChannelProvider::takeAllMessagesForPort(const MessagePortIdentifier& port, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, CompletionHandler<void()>&&)>&& completionHandler)
{
networkProcessConnection().sendWithAsyncReply(Messages::NetworkConnectionToWebProcess::TakeAllMessagesForPort { port }, [completionHandler = WTFMove(completionHandler)](auto&& messages, uint64_t messageBatchIdentifier) mutable {
completionHandler(WTFMove(messages), [messageBatchIdentifier] {
Modified: trunk/Source/WebKit/WebProcess/WebCoreSupport/WebMessagePortChannelProvider.h (287762 => 287763)
--- trunk/Source/WebKit/WebProcess/WebCoreSupport/WebMessagePortChannelProvider.h 2022-01-07 18:48:40 UTC (rev 287762)
+++ trunk/Source/WebKit/WebProcess/WebCoreSupport/WebMessagePortChannelProvider.h 2022-01-07 18:53:26 UTC (rev 287763)
@@ -42,7 +42,7 @@
void entangleLocalPortInThisProcessToRemote(const WebCore::MessagePortIdentifier& local, const WebCore::MessagePortIdentifier& remote) final;
void messagePortDisentangled(const WebCore::MessagePortIdentifier& local) final;
void messagePortClosed(const WebCore::MessagePortIdentifier& local) final;
- void takeAllMessagesForPort(const WebCore::MessagePortIdentifier&, CompletionHandler<void(Vector<WebCore::MessageWithMessagePorts>&&, Function<void()>&&)>&&) final;
+ void takeAllMessagesForPort(const WebCore::MessagePortIdentifier&, CompletionHandler<void(Vector<WebCore::MessageWithMessagePorts>&&, CompletionHandler<void()>&&)>&&) final;
void postMessageToRemote(WebCore::MessageWithMessagePorts&&, const WebCore::MessagePortIdentifier& remoteTarget) final;
void checkRemotePortForActivity(const WebCore::MessagePortIdentifier& remoteTarget, CompletionHandler<void(HasActivity)>&& callback) final;
};