Changeset 134207 in webkit


Ignore:
Timestamp:
Nov 12, 2012 4:24:50 AM (11 years ago)
Author:
tommyw@google.com
Message:

MediaStream API: Schedule the RTCDataChannel events to be triggered at idle state
https://bugs.webkit.org/show_bug.cgi?id=101751

Reviewed by Adam Barth.

Source/Platform:

Making some WebRTCDataChannel methods const.

  • chromium/public/WebRTCDataChannel.h:

(WebRTCDataChannel):

Source/WebCore:

This patch queues the events until the JS interpreter is in an idle state.

Existing tests cover this patch.

  • Modules/mediastream/RTCDataChannel.cpp:

(WebCore::RTCDataChannel::RTCDataChannel):
(WebCore::RTCDataChannel::readyStateChanged):
(WebCore::RTCDataChannel::dataArrived):
(WebCore::RTCDataChannel::error):
(WebCore::RTCDataChannel::scheduleDispatchEvent):
(WebCore):
(WebCore::RTCDataChannel::scheduledEventTimerFired):

  • Modules/mediastream/RTCDataChannel.h:

(RTCDataChannel):

  • platform/chromium/support/WebRTCDataChannel.cpp:

(WebKit::WebRTCDataChannel::setBufferedAmount):
(WebKit::WebRTCDataChannel::readyStateChanged):
(WebKit::WebRTCDataChannel::dataArrived):
(WebKit::WebRTCDataChannel::error):

Tools:

Makes the data channel mocks to be synchronous instead of asynchronous to be able to
properly test RTCDataChannel event handling.

  • DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:

(MockWebRTCPeerConnectionHandler::sendStringData):
(MockWebRTCPeerConnectionHandler::sendRawData):

LayoutTests:

Adding shouldNotTrow to the send() calls.

  • fast/mediastream/RTCPeerConnection-datachannel-expected.txt:
  • fast/mediastream/RTCPeerConnection-datachannel.html:
Location:
trunk
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r134205 r134207  
     12012-11-12  Tommy Widenflycht  <tommyw@google.com>
     2
     3        MediaStream API: Schedule the RTCDataChannel events to be triggered at idle state
     4        https://bugs.webkit.org/show_bug.cgi?id=101751
     5
     6        Reviewed by Adam Barth.
     7
     8        Adding shouldNotTrow to the send() calls.
     9
     10        * fast/mediastream/RTCPeerConnection-datachannel-expected.txt:
     11        * fast/mediastream/RTCPeerConnection-datachannel.html:
     12
    1132012-11-12  Mihnea Ovidenie  <mihnea@adobe.com>
    214
  • trunk/LayoutTests/fast/mediastream/RTCPeerConnection-datachannel-expected.txt

    r131494 r134207  
    1313PASS dc.readyState is 'open'
    1414PASS dc.label is 'label'
     15PASS dc.send('xyzzy'); did not throw exception.
    1516PASS dc_onmessage_string was called
    1617PASS data is 'xyzzy'
     18PASS dc.send(buffer); did not throw exception.
    1719PASS dc_onmessage_arraybuffer was called
    1820PASS data.byteLength is 2
    1921PASS array[0] is 17
    2022PASS array[1] is 19
     23PASS dc.send(array); did not throw exception.
    2124PASS dc_onmessage_arraybufferview was called
    2225PASS data.byteLength is 2
  • trunk/LayoutTests/fast/mediastream/RTCPeerConnection-datachannel.html

    r131494 r134207  
    4343    array[1] = 13;
    4444    dc.onmessage = dc_onmessage_arraybufferview;
    45     dc.send(array);
     45    shouldNotThrow("dc.send(array);");
    4646}
    4747
     
    5252
    5353    dc.binaryType = "arraybuffer";
    54     var buffer = new ArrayBuffer(2);
     54    buffer = new ArrayBuffer(2);
    5555    var array = new Int8Array(buffer);
    5656    array[0] = 17;
    5757    array[1] = 19;
    5858    dc.onmessage = dc_onmessage_arraybuffer;
    59     dc.send(buffer);
     59    shouldNotThrow("dc.send(buffer);");
    6060}
    6161
     
    6666
    6767    dc.onmessage = dc_onmessage_string;
    68     dc.send("xyzzy");
     68    shouldNotThrow("dc.send('xyzzy');");
    6969}
    7070
  • trunk/Source/Platform/ChangeLog

    r134084 r134207  
     12012-11-12  Tommy Widenflycht  <tommyw@google.com>
     2
     3        MediaStream API: Schedule the RTCDataChannel events to be triggered at idle state
     4        https://bugs.webkit.org/show_bug.cgi?id=101751
     5
     6        Reviewed by Adam Barth.
     7
     8        Making some WebRTCDataChannel methods const.
     9
     10        * chromium/public/WebRTCDataChannel.h:
     11        (WebRTCDataChannel):
     12
    1132012-11-09  Tommy Widenflycht  <tommyw@google.com>
    214
  • trunk/Source/Platform/chromium/public/WebRTCDataChannel.h

    r131494 r134207  
    7070    WEBKIT_EXPORT bool reliable() const;
    7171
    72     WEBKIT_EXPORT void setBufferedAmount(unsigned long);
    73     WEBKIT_EXPORT void readyStateChanged(ReadyState);
    74     WEBKIT_EXPORT void dataArrived(const WebString&);
    75     WEBKIT_EXPORT void dataArrived(const char*, size_t);
    76     WEBKIT_EXPORT void error();
     72    WEBKIT_EXPORT void setBufferedAmount(unsigned long) const;
     73    WEBKIT_EXPORT void readyStateChanged(ReadyState) const;
     74    WEBKIT_EXPORT void dataArrived(const WebString&) const;
     75    WEBKIT_EXPORT void dataArrived(const char*, size_t) const;
     76    WEBKIT_EXPORT void error() const;
    7777
    7878    // Extra data associated with this WebRTCDataChannel.
  • trunk/Source/WebCore/ChangeLog

    r134206 r134207  
     12012-11-12  Tommy Widenflycht  <tommyw@google.com>
     2
     3        MediaStream API: Schedule the RTCDataChannel events to be triggered at idle state
     4        https://bugs.webkit.org/show_bug.cgi?id=101751
     5
     6        Reviewed by Adam Barth.
     7
     8        This patch queues the events until the JS interpreter is in an idle state.
     9
     10        Existing tests cover this patch.
     11
     12        * Modules/mediastream/RTCDataChannel.cpp:
     13        (WebCore::RTCDataChannel::RTCDataChannel):
     14        (WebCore::RTCDataChannel::readyStateChanged):
     15        (WebCore::RTCDataChannel::dataArrived):
     16        (WebCore::RTCDataChannel::error):
     17        (WebCore::RTCDataChannel::scheduleDispatchEvent):
     18        (WebCore):
     19        (WebCore::RTCDataChannel::scheduledEventTimerFired):
     20        * Modules/mediastream/RTCDataChannel.h:
     21        (RTCDataChannel):
     22        * platform/chromium/support/WebRTCDataChannel.cpp:
     23        (WebKit::WebRTCDataChannel::setBufferedAmount):
     24        (WebKit::WebRTCDataChannel::readyStateChanged):
     25        (WebKit::WebRTCDataChannel::dataArrived):
     26        (WebKit::WebRTCDataChannel::error):
     27
    1282012-11-12  Kunihiko Sakamoto  <ksakamoto@chromium.org>
    229
  • trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.cpp

    r131372 r134207  
    6464    , m_binaryType(BinaryTypeArrayBuffer)
    6565    , m_handler(handler)
     66    , m_scheduledEventTimer(this, &RTCDataChannel::scheduledEventTimerFired)
    6667{
    6768    m_descriptor->setClient(this);
     
    187188    switch (m_descriptor->readyState()) {
    188189    case RTCDataChannelDescriptor::ReadyStateOpen:
    189         dispatchEvent(Event::create(eventNames().openEvent, false, false));
     190        scheduleDispatchEvent(Event::create(eventNames().openEvent, false, false));
    190191        break;
    191192    case RTCDataChannelDescriptor::ReadyStateClosed:
    192         dispatchEvent(Event::create(eventNames().closeEvent, false, false));
     193        scheduleDispatchEvent(Event::create(eventNames().closeEvent, false, false));
    193194        break;
    194195    default:
     
    202203        return;
    203204
    204     dispatchEvent(MessageEvent::create(text));
     205    scheduleDispatchEvent(MessageEvent::create(text));
    205206}
    206207
     
    216217    if (m_binaryType == BinaryTypeArrayBuffer) {
    217218        RefPtr<ArrayBuffer> buffer = ArrayBuffer::create(data, dataLength);
    218         dispatchEvent(MessageEvent::create(buffer.release()));
     219        scheduleDispatchEvent(MessageEvent::create(buffer.release()));
    219220        return;
    220221    }
     
    227228        return;
    228229
    229     dispatchEvent(Event::create(eventNames().errorEvent, false, false));
     230    scheduleDispatchEvent(Event::create(eventNames().errorEvent, false, false));
    230231}
    231232
     
    263264}
    264265
     266void RTCDataChannel::scheduleDispatchEvent(PassRefPtr<Event> event)
     267{
     268    m_scheduledEvents.append(event);
     269
     270    if (!m_scheduledEventTimer.isActive())
     271        m_scheduledEventTimer.startOneShot(0);
     272}
     273
     274void RTCDataChannel::scheduledEventTimerFired(Timer<RTCDataChannel>*)
     275{
     276    if (m_stopped)
     277        return;
     278
     279    Vector<RefPtr<Event> > events;
     280    events.swap(m_scheduledEvents);
     281
     282    Vector<RefPtr<Event> >::iterator it = events.begin();
     283    for (; it != events.end(); ++it)
     284        dispatchEvent((*it).release());
     285
     286    events.clear();
     287}
     288
    265289} // namespace WebCore
    266290
  • trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.h

    r131372 r134207  
    3131#include "EventTarget.h"
    3232#include "RTCDataChannelDescriptor.h"
     33#include "Timer.h"
    3334#include <wtf/RefCounted.h>
    3435
     
    7980    RTCDataChannel(ScriptExecutionContext*, RTCPeerConnectionHandler*, PassRefPtr<RTCDataChannelDescriptor>);
    8081
     82    void scheduleDispatchEvent(PassRefPtr<Event>);
     83    void scheduledEventTimerFired(Timer<RTCDataChannel>*);
     84
    8185    // EventTarget
    8286    virtual EventTargetData* eventTargetData();
     
    104108    // Not owned by this class.
    105109    RTCPeerConnectionHandler* m_handler;
     110
     111    Timer<RTCDataChannel> m_scheduledEventTimer;
     112    Vector<RefPtr<Event> > m_scheduledEvents;
    106113};
    107114
  • trunk/Source/WebCore/platform/chromium/support/WebRTCDataChannel.cpp

    r131494 r134207  
    107107}
    108108
    109 void WebRTCDataChannel::setBufferedAmount(unsigned long bufferedAmount)
     109void WebRTCDataChannel::setBufferedAmount(unsigned long bufferedAmount) const
    110110{
    111111    ASSERT(!isNull());
     
    113113}
    114114
    115 void WebRTCDataChannel::readyStateChanged(ReadyState state)
     115void WebRTCDataChannel::readyStateChanged(ReadyState state) const
    116116{
    117117    ASSERT(!isNull());
     
    119119}
    120120
    121 void WebRTCDataChannel::dataArrived(const WebString& data)
     121void WebRTCDataChannel::dataArrived(const WebString& data) const
    122122{
    123123    ASSERT(!isNull());
     
    125125}
    126126
    127 void WebRTCDataChannel::dataArrived(const char* data, size_t dataLength)
     127void WebRTCDataChannel::dataArrived(const char* data, size_t dataLength) const
    128128{
    129129    ASSERT(!isNull());
     
    131131}
    132132
    133 void WebRTCDataChannel::error()
     133void WebRTCDataChannel::error() const
    134134{
    135135    ASSERT(!isNull());
  • trunk/Tools/ChangeLog

    r134203 r134207  
     12012-11-12  Tommy Widenflycht  <tommyw@google.com>
     2
     3        MediaStream API: Schedule the RTCDataChannel events to be triggered at idle state
     4        https://bugs.webkit.org/show_bug.cgi?id=101751
     5
     6        Reviewed by Adam Barth.
     7
     8        Makes the data channel mocks to be synchronous instead of asynchronous to be able to
     9        properly test RTCDataChannel event handling.
     10
     11        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
     12        (MockWebRTCPeerConnectionHandler::sendStringData):
     13        (MockWebRTCPeerConnectionHandler::sendRawData):
     14
    1152012-11-12  Jochen Eisinger  <jochen@chromium.org>
    216
  • trunk/Tools/DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp

    r133626 r134207  
    352352        return false;
    353353
    354     postTask(new StringDataTask(this, dataChannel, data));
     354    dataChannel.dataArrived(data);
    355355    return true;
    356356}
     
    361361        return false;
    362362
    363     postTask(new CharPtrDataTask(this, dataChannel, data, length));
     363    dataChannel.dataArrived(data, length);
    364364    return true;
    365365}
Note: See TracChangeset for help on using the changeset viewer.