⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 287763 in webkit


Ignore:
Timestamp:
Jan 7, 2022, 10:53:26 AM (5 years ago)
Author:
youenn@apple.com
Message:

Use completion handlers for takeAllMessagesForPort methods
https://bugs.webkit.org/show_bug.cgi?id=234947

Reviewed by Chris Dumez.

Source/WebCore:

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:

Source/WebKit:

  • NetworkProcess/NetworkConnectionToWebProcess.cpp:
  • NetworkProcess/NetworkConnectionToWebProcess.h:
  • WebProcess/WebCoreSupport/WebMessagePortChannelProvider.cpp:
  • WebProcess/WebCoreSupport/WebMessagePortChannelProvider.h:
Location:
trunk/Source
Files:
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r287762 r287763  
     12022-01-07  Youenn Fablet  <youenn@apple.com>
     2
     3        Use completion handlers for takeAllMessagesForPort methods
     4        https://bugs.webkit.org/show_bug.cgi?id=234947
     5
     6        Reviewed by Chris Dumez.
     7
     8        Covered by existing tests.
     9
     10        * dom/MessagePort.cpp:
     11        * dom/messageports/MessagePortChannel.cpp:
     12        * dom/messageports/MessagePortChannel.h:
     13        * dom/messageports/MessagePortChannelProvider.h:
     14        * dom/messageports/MessagePortChannelProviderImpl.cpp:
     15        * dom/messageports/MessagePortChannelProviderImpl.h:
     16        * dom/messageports/MessagePortChannelRegistry.cpp:
     17        * dom/messageports/MessagePortChannelRegistry.h:
     18        * dom/messageports/WorkerMessagePortChannelProvider.cpp:
     19        * dom/messageports/WorkerMessagePortChannelProvider.h:
     20
    1212022-01-07  Antoine Quint  <graouts@webkit.org>
    222
  • trunk/Source/WebCore/dom/MessagePort.cpp

    r287066 r287763  
    261261        return;
    262262
    263     auto messagesTakenHandler = [this, weakThis = WeakPtr { *this }](Vector<MessageWithMessagePorts>&& messages, Function<void()>&& completionCallback) mutable {
     263    auto messagesTakenHandler = [this, weakThis = WeakPtr { *this }](Vector<MessageWithMessagePorts>&& messages, CompletionHandler<void()>&& completionCallback) mutable {
    264264        auto scopeExit = makeScopeExit(WTFMove(completionCallback));
    265265
  • trunk/Source/WebCore/dom/messageports/MessagePortChannel.cpp

    r282755 r287763  
    148148}
    149149
    150 void MessagePortChannel::takeAllMessagesForPort(const MessagePortIdentifier& port, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, Function<void()>&&)>&& callback)
     150void MessagePortChannel::takeAllMessagesForPort(const MessagePortIdentifier& port, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, CompletionHandler<void()>&&)>&& callback)
    151151{
    152152    ASSERT(isMainThread());
  • trunk/Source/WebCore/dom/messageports/MessagePortChannel.h

    r278253 r287763  
    5454    bool postMessageToRemote(MessageWithMessagePorts&&, const MessagePortIdentifier& remoteTarget);
    5555
    56     void takeAllMessagesForPort(const MessagePortIdentifier&, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, Function<void()>&&)>&&);
     56    void takeAllMessagesForPort(const MessagePortIdentifier&, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, CompletionHandler<void()>&&)>&&);
    5757    void checkRemotePortForActivity(const MessagePortIdentifier&, CompletionHandler<void(MessagePortChannelProvider::HasActivity)>&& callback);
    5858
  • trunk/Source/WebCore/dom/messageports/MessagePortChannelProvider.h

    r253751 r287763  
    5050    virtual void messagePortClosed(const MessagePortIdentifier& local) = 0;
    5151   
    52     virtual void takeAllMessagesForPort(const MessagePortIdentifier&, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, Function<void()>&&)>&&) = 0;
     52    virtual void takeAllMessagesForPort(const MessagePortIdentifier&, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, CompletionHandler<void()>&&)>&&) = 0;
    5353
    5454    virtual void postMessageToRemote(MessageWithMessagePorts&&, const MessagePortIdentifier& remoteTarget) = 0;
  • trunk/Source/WebCore/dom/messageports/MessagePortChannelProviderImpl.cpp

    r274324 r287763  
    8787}
    8888
    89 void MessagePortChannelProviderImpl::takeAllMessagesForPort(const MessagePortIdentifier& port, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, Function<void()>&&)>&& outerCallback)
     89void MessagePortChannelProviderImpl::takeAllMessagesForPort(const MessagePortIdentifier& port, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, CompletionHandler<void()>&&)>&& outerCallback)
    9090{
    9191    // It is the responsibility of outerCallback to get itself to the appropriate thread (e.g. WebWorker thread)
    92     auto callback = [outerCallback = WTFMove(outerCallback)](Vector<MessageWithMessagePorts>&& messages, Function<void()>&& messageDeliveryCallback) mutable {
     92    auto callback = [outerCallback = WTFMove(outerCallback)](Vector<MessageWithMessagePorts>&& messages, CompletionHandler<void()>&& messageDeliveryCallback) mutable {
    9393        ASSERT(isMainThread());
    9494        outerCallback(WTFMove(messages), WTFMove(messageDeliveryCallback));
  • trunk/Source/WebCore/dom/messageports/MessagePortChannelProviderImpl.h

    r274324 r287763  
    4242    void messagePortClosed(const MessagePortIdentifier& local) final;
    4343    void postMessageToRemote(MessageWithMessagePorts&&, const MessagePortIdentifier& remoteTarget) final;
    44     void takeAllMessagesForPort(const MessagePortIdentifier&, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, Function<void()>&&)>&&) final;
     44    void takeAllMessagesForPort(const MessagePortIdentifier&, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, CompletionHandler<void()>&&)>&&) final;
    4545    void checkRemotePortForActivity(const MessagePortIdentifier& remoteTarget, CompletionHandler<void(HasActivity)>&& callback) final;
    4646
  • trunk/Source/WebCore/dom/messageports/MessagePortChannelRegistry.cpp

    r249637 r287763  
    142142}
    143143
    144 void MessagePortChannelRegistry::takeAllMessagesForPort(const MessagePortIdentifier& port, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, Function<void()>&&)>&& callback)
     144void MessagePortChannelRegistry::takeAllMessagesForPort(const MessagePortIdentifier& port, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, CompletionHandler<void()>&&)>&& callback)
    145145{
    146146    ASSERT(isMainThread());
  • trunk/Source/WebCore/dom/messageports/MessagePortChannelRegistry.h

    r249637 r287763  
    4646    WEBCORE_EXPORT void didCloseMessagePort(const MessagePortIdentifier& local);
    4747    WEBCORE_EXPORT bool didPostMessageToRemote(MessageWithMessagePorts&&, const MessagePortIdentifier& remoteTarget);
    48     WEBCORE_EXPORT void takeAllMessagesForPort(const MessagePortIdentifier&, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, Function<void()>&&)>&&);
     48    WEBCORE_EXPORT void takeAllMessagesForPort(const MessagePortIdentifier&, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, CompletionHandler<void()>&&)>&&);
    4949    WEBCORE_EXPORT void checkRemotePortForActivity(const MessagePortIdentifier& remoteTarget, CompletionHandler<void(MessagePortChannelProvider::HasActivity)>&& callback);
    5050
  • trunk/Source/WebCore/dom/messageports/WorkerMessagePortChannelProvider.cpp

    r287679 r287763  
    111111};
    112112
    113 void WorkerMessagePortChannelProvider::takeAllMessagesForPort(const MessagePortIdentifier& identifier, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, Function<void()>&&)>&& callback)
     113void WorkerMessagePortChannelProvider::takeAllMessagesForPort(const MessagePortIdentifier& identifier, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, CompletionHandler<void()>&&)>&& callback)
    114114{
    115115    uint64_t callbackIdentifier = ++m_lastCallbackIdentifier;
  • trunk/Source/WebCore/dom/messageports/WorkerMessagePortChannelProvider.h

    r268161 r287763  
    4747    void messagePortClosed(const MessagePortIdentifier& local) final;
    4848    void postMessageToRemote(MessageWithMessagePorts&&, const MessagePortIdentifier& remoteTarget) final;
    49     void takeAllMessagesForPort(const MessagePortIdentifier&, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, Function<void()>&&)>&&) final;
     49    void takeAllMessagesForPort(const MessagePortIdentifier&, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, CompletionHandler<void()>&&)>&&) final;
    5050    void checkRemotePortForActivity(const MessagePortIdentifier& remoteTarget, CompletionHandler<void(HasActivity)>&& callback) final;
    5151
  • trunk/Source/WebKit/ChangeLog

    r287755 r287763  
     12022-01-07  Youenn Fablet  <youenn@apple.com>
     2
     3        Use completion handlers for takeAllMessagesForPort methods
     4        https://bugs.webkit.org/show_bug.cgi?id=234947
     5
     6        Reviewed by Chris Dumez.
     7
     8        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
     9        * NetworkProcess/NetworkConnectionToWebProcess.h:
     10        * WebProcess/WebCoreSupport/WebMessagePortChannelProvider.cpp:
     11        * WebProcess/WebCoreSupport/WebMessagePortChannelProvider.h:
     12
    1132022-01-07  Peng Liu  <peng.liu6@apple.com>
    214
  • trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp

    r287731 r287763  
    143143        networkProcess().messagePortChannelRegistry().didCloseMessagePort(port);
    144144
     145    auto completionHandlers = std::exchange(m_messageBatchDeliveryCompletionHandlers, { });
     146    for (auto& completionHandler : completionHandlers.values())
     147        completionHandler();
     148
    145149#if HAVE(COOKIE_CHANGE_LISTENER_API)
    146150    if (auto* networkStorageSession = storageSession())
     
    12281232}
    12291233
    1230 uint64_t NetworkConnectionToWebProcess::nextMessageBatchIdentifier(Function<void()>&& deliveryCallback)
     1234uint64_t NetworkConnectionToWebProcess::nextMessageBatchIdentifier(CompletionHandler<void()>&& deliveryCallback)
    12311235{
    12321236    static uint64_t currentMessageBatchIdentifier;
     
    12381242void NetworkConnectionToWebProcess::takeAllMessagesForPort(const MessagePortIdentifier& port, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, uint64_t)>&& callback)
    12391243{
    1240     networkProcess().messagePortChannelRegistry().takeAllMessagesForPort(port, [this, protectedThis = Ref { *this }, callback = WTFMove(callback)](auto&& messages, Function<void()>&& deliveryCallback) mutable {
     1244    networkProcess().messagePortChannelRegistry().takeAllMessagesForPort(port, [this, protectedThis = Ref { *this }, callback = WTFMove(callback)](auto&& messages, auto&& deliveryCallback) mutable {
    12411245        callback(WTFMove(messages), nextMessageBatchIdentifier(WTFMove(deliveryCallback)));
    12421246    });
  • trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h

    r287611 r287763  
    304304    void resetOriginAccessAllowLists();
    305305
    306     uint64_t nextMessageBatchIdentifier(Function<void()>&&);
     306    uint64_t nextMessageBatchIdentifier(CompletionHandler<void()>&&);
    307307
    308308    void domCookiesForHost(const String& host, bool subscribeToCookieChangeNotifications, CompletionHandler<void(const Vector<WebCore::Cookie>&)>&&);
     
    411411
    412412    HashSet<WebCore::MessagePortIdentifier> m_processEntangledPorts;
    413     HashMap<uint64_t, Function<void()>> m_messageBatchDeliveryCompletionHandlers;
     413    HashMap<uint64_t, CompletionHandler<void()>> m_messageBatchDeliveryCompletionHandlers;
    414414    Ref<NetworkSchemeRegistry> m_schemeRegistry;
    415415       
  • trunk/Source/WebKit/WebProcess/WebCoreSupport/WebMessagePortChannelProvider.cpp

    r253751 r287763  
    7777}
    7878
    79 void WebMessagePortChannelProvider::takeAllMessagesForPort(const MessagePortIdentifier& port, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, Function<void()>&&)>&& completionHandler)
     79void WebMessagePortChannelProvider::takeAllMessagesForPort(const MessagePortIdentifier& port, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, CompletionHandler<void()>&&)>&& completionHandler)
    8080{
    8181    networkProcessConnection().sendWithAsyncReply(Messages::NetworkConnectionToWebProcess::TakeAllMessagesForPort { port }, [completionHandler = WTFMove(completionHandler)](auto&& messages, uint64_t messageBatchIdentifier) mutable {
  • trunk/Source/WebKit/WebProcess/WebCoreSupport/WebMessagePortChannelProvider.h

    r264598 r287763  
    4343    void messagePortDisentangled(const WebCore::MessagePortIdentifier& local) final;
    4444    void messagePortClosed(const WebCore::MessagePortIdentifier& local) final;
    45     void takeAllMessagesForPort(const WebCore::MessagePortIdentifier&, CompletionHandler<void(Vector<WebCore::MessageWithMessagePorts>&&, Function<void()>&&)>&&) final;
     45    void takeAllMessagesForPort(const WebCore::MessagePortIdentifier&, CompletionHandler<void(Vector<WebCore::MessageWithMessagePorts>&&, CompletionHandler<void()>&&)>&&) final;
    4646    void postMessageToRemote(WebCore::MessageWithMessagePorts&&, const WebCore::MessagePortIdentifier& remoteTarget) final;
    4747    void checkRemotePortForActivity(const WebCore::MessagePortIdentifier& remoteTarget, CompletionHandler<void(HasActivity)>&& callback) final;
Note: See TracChangeset for help on using the changeset viewer.