Changeset 252206 in webkit


Ignore:
Timestamp:
Nov 7, 2019 2:36:45 PM (4 years ago)
Author:
Chris Dumez
Message:

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

Reviewed by Ryosuke Niwa.

  • workers/service/ServiceWorkerContainer.cpp:

(WebCore::ServiceWorkerContainer::ServiceWorkerContainer):
(WebCore::ServiceWorkerContainer::startMessages):
(WebCore::ServiceWorkerContainer::postMessage):

  • workers/service/ServiceWorkerContainer.h:
Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r252205 r252206  
     12019-11-07  Chris Dumez  <cdumez@apple.com>
     2
     3        Port ServiceWorkerContainer to the HTML5 event loop
     4        https://bugs.webkit.org/show_bug.cgi?id=203963
     5
     6        Reviewed by Ryosuke Niwa.
     7
     8        * workers/service/ServiceWorkerContainer.cpp:
     9        (WebCore::ServiceWorkerContainer::ServiceWorkerContainer):
     10        (WebCore::ServiceWorkerContainer::startMessages):
     11        (WebCore::ServiceWorkerContainer::postMessage):
     12        * workers/service/ServiceWorkerContainer.h:
     13
    1142019-11-06  Ryosuke Niwa  <rniwa@webkit.org>
    215
  • trunk/Source/WebCore/workers/service/ServiceWorkerContainer.cpp

    r251999 r252206  
    7474    : ActiveDOMObject(context)
    7575    , m_navigator(navigator)
    76     , m_messageQueue(GenericEventQueue::create(*this))
    7776{
    7877    suspendIfNeeded();
     
    8079    // We should queue messages until the DOMContentLoaded event has fired or startMessages() has been called.
    8180    if (is<Document>(context) && downcast<Document>(*context).parsing())
    82         m_messageQueue->setPaused(true);
     81        m_shouldDeferMessageEvents = true;
    8382}
    8483
     
    315314void ServiceWorkerContainer::startMessages()
    316315{
    317     m_messageQueue->setPaused(false);
     316    m_shouldDeferMessageEvents = false;
     317    auto deferredMessageEvents = WTFMove(m_deferredMessageEvents);
     318    for (auto& messageEvent : deferredMessageEvents)
     319        queueTaskToDispatchEvent(*this, TaskSource::DOMManipulation, WTFMove(messageEvent));
    318320}
    319321
     
    405407
    406408    auto messageEvent = MessageEvent::create(MessagePort::entanglePorts(context, WTFMove(message.transferredPorts)), message.message.releaseNonNull(), sourceOrigin, { }, WTFMove(source));
    407    
    408     m_messageQueue->enqueueEvent(WTFMove(messageEvent));
     409    if (m_shouldDeferMessageEvents)
     410        m_deferredMessageEvents.append(WTFMove(messageEvent));
     411    else {
     412        ASSERT(m_deferredMessageEvents.isEmpty());
     413        queueTaskToDispatchEvent(*this, TaskSource::DOMManipulation, WTFMove(messageEvent));
     414    }
    409415}
    410416
  • trunk/Source/WebCore/workers/service/ServiceWorkerContainer.h

    r252036 r252206  
    3030#include "ActiveDOMObject.h"
    3131#include "EventTarget.h"
    32 #include "GenericEventQueue.h"
    3332#include "IDLTypes.h"
    3433#include "SWClientConnection.h"
     
    143142    uint64_t m_lastOngoingSettledRegistrationIdentifier { 0 };
    144143    HashMap<uint64_t, ServiceWorkerRegistrationKey> m_ongoingSettledRegistrations;
    145     UniqueRef<GenericEventQueue> m_messageQueue;
     144    bool m_shouldDeferMessageEvents { false };
     145    Vector<Ref<Event>> m_deferredMessageEvents;
    146146};
    147147
Note: See TracChangeset for help on using the changeset viewer.