Changeset 252209 in webkit


Ignore:
Timestamp:
Nov 7, 2019 3:16:07 PM (4 years ago)
Author:
Chris Dumez
Message:

Port MessagePort to the HTML5 event loop
https://bugs.webkit.org/show_bug.cgi?id=203960

Reviewed by Ryosuke Niwa.

  • dom/MessagePort.cpp:

(WebCore::MessagePort::MessagePort):
(WebCore::MessagePort::close):
(WebCore::MessagePort::dispatchMessages):
(WebCore::MessagePort::dispatchEvent):

  • dom/MessagePort.h:
  • dom/TaskSource.h:
Location:
trunk/Source/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r252208 r252209  
     12019-11-07  Chris Dumez  <cdumez@apple.com>
     2
     3        Port MessagePort to the HTML5 event loop
     4        https://bugs.webkit.org/show_bug.cgi?id=203960
     5
     6        Reviewed by Ryosuke Niwa.
     7
     8        * dom/MessagePort.cpp:
     9        (WebCore::MessagePort::MessagePort):
     10        (WebCore::MessagePort::close):
     11        (WebCore::MessagePort::dispatchMessages):
     12        (WebCore::MessagePort::dispatchEvent):
     13        * dom/MessagePort.h:
     14        * dom/TaskSource.h:
     15
    1162019-11-07  Antti Koivisto  <antti@apple.com>
    217
  • trunk/Source/WebCore/dom/MessagePort.cpp

    r252056 r252209  
    9999    , m_identifier(local)
    100100    , m_remoteIdentifier(remote)
    101     , m_eventQueue(GenericEventQueue::create(*this))
    102101{
    103102    LOG(MessagePorts, "Created MessagePort %s (%p) in process %" PRIu64, m_identifier.logString().utf8().data(), this, Process::identifier().toUInt64());
     
    236235
    237236    removeAllEventListeners();
    238     m_eventQueue->close();
    239237}
    240238
     
    278276                return;
    279277            auto ports = MessagePort::entanglePorts(*m_scriptExecutionContext, WTFMove(message.transferredPorts));
    280             m_eventQueue->enqueueEvent(MessageEvent::create(WTFMove(ports), message.message.releaseNonNull()));
     278            // Per specification, each MessagePort object has a task source called the port message queue.
     279            queueTaskToDispatchEvent(*this, TaskSource::PostedMessageQueue, MessageEvent::create(WTFMove(ports), message.message.releaseNonNull()));
    281280        }
    282281    };
    283282
    284283    MessagePortChannelProvider::fromContext(*m_scriptExecutionContext).takeAllMessagesForPort(m_identifier, WTFMove(messagesTakenHandler));
     284}
     285
     286void MessagePort::dispatchEvent(Event& event)
     287{
     288    if (m_closed)
     289        return;
     290
     291    EventTarget::dispatchEvent(event);
    285292}
    286293
  • trunk/Source/WebCore/dom/MessagePort.h

    r251425 r252209  
    3030#include "EventTarget.h"
    3131#include "ExceptionOr.h"
    32 #include "GenericEventQueue.h"
    3332#include "MessagePortChannel.h"
    3433#include "MessagePortIdentifier.h"
     
    9796    void derefEventTarget() final { deref(); }
    9897
     98    void dispatchEvent(Event&) final;
     99
    99100private:
    100101    explicit MessagePort(ScriptExecutionContext&, const MessagePortIdentifier& local, const MessagePortIdentifier& remote);
     
    127128
    128129    mutable std::atomic<unsigned> m_refCount { 1 };
    129     UniqueRef<GenericEventQueue> m_eventQueue;
    130130};
    131131
  • trunk/Source/WebCore/dom/TaskSource.h

    r252016 r252209  
    3434    IdleTask,
    3535    Networking,
     36    PostedMessageQueue,
    3637    UserInteraction
    3738};
Note: See TracChangeset for help on using the changeset viewer.