Changeset 250573 in webkit


Ignore:
Timestamp:
Oct 1, 2019, 12:21:07 PM (6 years ago)
Author:
youenn@apple.com
Message:

RTCDataChannel should not prevent entering page cache except if in open state
https://bugs.webkit.org/show_bug.cgi?id=202395

Reviewed by Chris Dumez.

Only prevent entering page cache in open state.
Enqueue message through the document event queue to handle suspension properly.

We cannot yet write page cache tests as a data channel requires a peer connection which
currently forbids entering page cache.

  • Modules/mediastream/RTCDataChannel.cpp:

(WebCore::RTCDataChannel::RTCDataChannel):
(WebCore::RTCDataChannel::didReceiveStringData):
(WebCore::RTCDataChannel::didReceiveRawData):
(WebCore::RTCDataChannel::didDetectError):
(WebCore::RTCDataChannel::bufferedAmountIsDecreasing):
(WebCore::RTCDataChannel::scheduleDispatchEvent):
(WebCore::RTCDataChannel::scheduledEventTimerFired): Deleted.

  • Modules/mediastream/RTCDataChannel.h:
Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r250570 r250573  
     12019-10-01  youenn fablet  <youenn@apple.com>
     2
     3        RTCDataChannel should not prevent entering page cache except if in open state
     4        https://bugs.webkit.org/show_bug.cgi?id=202395
     5
     6        Reviewed by Chris Dumez.
     7
     8        Only prevent entering page cache in open state.
     9        Enqueue message through the document event queue to handle suspension properly.
     10
     11        We cannot yet write page cache tests as a data channel requires a peer connection which
     12        currently forbids entering page cache.
     13
     14        * Modules/mediastream/RTCDataChannel.cpp:
     15        (WebCore::RTCDataChannel::RTCDataChannel):
     16        (WebCore::RTCDataChannel::didReceiveStringData):
     17        (WebCore::RTCDataChannel::didReceiveRawData):
     18        (WebCore::RTCDataChannel::didDetectError):
     19        (WebCore::RTCDataChannel::bufferedAmountIsDecreasing):
     20        (WebCore::RTCDataChannel::scheduleDispatchEvent):
     21        (WebCore::RTCDataChannel::scheduledEventTimerFired): Deleted.
     22        * Modules/mediastream/RTCDataChannel.h:
     23
    1242019-10-01  Rob Buis  <rbuis@igalia.com>
    225
  • trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.cpp

    r250061 r250573  
    8282    : ActiveDOMObject(document)
    8383    , m_handler(WTFMove(handler))
    84     , m_scheduledEventTimer(*this, &RTCDataChannel::scheduledEventTimerFired)
    8584    , m_label(WTFMove(label))
    8685    , m_options(WTFMove(options))
     
    195194void RTCDataChannel::didReceiveStringData(const String& text)
    196195{
    197     if (m_stopped)
    198         return;
    199 
    200196    scheduleDispatchEvent(MessageEvent::create(text));
    201197}
     
    203199void RTCDataChannel::didReceiveRawData(const char* data, size_t dataLength)
    204200{
    205     if (m_stopped)
    206         return;
    207 
    208201    switch (m_binaryType) {
    209202    case BinaryType::Blob:
     
    219212void RTCDataChannel::didDetectError()
    220213{
    221     if (m_stopped)
    222         return;
    223 
    224214    scheduleDispatchEvent(Event::create(eventNames().errorEvent, Event::CanBubble::No, Event::IsCancelable::No));
    225215}
     
    227217void RTCDataChannel::bufferedAmountIsDecreasing(size_t amount)
    228218{
    229     if (m_stopped)
    230         return;
    231 
    232219    if (amount <= m_bufferedAmountLowThreshold)
    233220        scheduleDispatchEvent(Event::create(eventNames().bufferedamountlowEvent, Event::CanBubble::No, Event::IsCancelable::No));
     
    241228void RTCDataChannel::scheduleDispatchEvent(Ref<Event>&& event)
    242229{
    243     m_scheduledEvents.append(WTFMove(event));
    244 
    245     if (!m_scheduledEventTimer.isActive())
    246         m_scheduledEventTimer.startOneShot(0_s);
    247 }
    248 
    249 void RTCDataChannel::scheduledEventTimerFired()
    250 {
    251230    if (m_stopped)
    252231        return;
    253232
    254     Vector<Ref<Event>> events;
    255     events.swap(m_scheduledEvents);
    256 
    257     for (auto& event : events)
    258         dispatchEvent(event);
     233    event->setTarget(this);
     234    scriptExecutionContext()->eventQueue().enqueueEvent(WTFMove(event));
    259235}
    260236
  • trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.h

    r249722 r250573  
    8585
    8686    void scheduleDispatchEvent(Ref<Event>&&);
    87     void scheduledEventTimerFired();
    8887
    8988    EventTargetInterface eventTargetInterface() const final { return RTCDataChannelEventTargetInterfaceType; }
     
    9695    void stop() final;
    9796    const char* activeDOMObjectName() const final { return "RTCDataChannel"; }
    98     bool canSuspendForDocumentSuspension() const final { return m_readyState == RTCDataChannelState::Closed; }
     97    bool canSuspendForDocumentSuspension() const final { return m_readyState != RTCDataChannelState::Open; }
    9998
    10099    // RTCDataChannelHandlerClient API
     
    114113    BinaryType m_binaryType { BinaryType::ArrayBuffer };
    115114
    116     Timer m_scheduledEventTimer;
    117     Vector<Ref<Event>> m_scheduledEvents;
    118 
    119115    String m_label;
    120116    RTCDataChannelInit m_options;
Note: See TracChangeset for help on using the changeset viewer.