Title: [134207] trunk
Revision
134207
Author
[email protected]
Date
2012-11-12 04:24:50 -0800 (Mon, 12 Nov 2012)

Log 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:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (134206 => 134207)


--- trunk/LayoutTests/ChangeLog	2012-11-12 12:21:44 UTC (rev 134206)
+++ trunk/LayoutTests/ChangeLog	2012-11-12 12:24:50 UTC (rev 134207)
@@ -1,3 +1,15 @@
+2012-11-12  Tommy Widenflycht  <[email protected]>
+
+        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.
+
+        Adding shouldNotTrow to the send() calls.
+
+        * fast/mediastream/RTCPeerConnection-datachannel-expected.txt:
+        * fast/mediastream/RTCPeerConnection-datachannel.html:
+
 2012-11-12  Mihnea Ovidenie  <[email protected]>
 
         [CSSRegions]Add support for text-shadow in region styling

Modified: trunk/LayoutTests/fast/mediastream/RTCPeerConnection-datachannel-expected.txt (134206 => 134207)


--- trunk/LayoutTests/fast/mediastream/RTCPeerConnection-datachannel-expected.txt	2012-11-12 12:21:44 UTC (rev 134206)
+++ trunk/LayoutTests/fast/mediastream/RTCPeerConnection-datachannel-expected.txt	2012-11-12 12:24:50 UTC (rev 134207)
@@ -12,12 +12,15 @@
 PASS dc_onopen was called
 PASS dc.readyState is 'open'
 PASS dc.label is 'label'
+PASS dc.send('xyzzy'); did not throw exception.
 PASS dc_onmessage_string was called
 PASS data is 'xyzzy'
+PASS dc.send(buffer); did not throw exception.
 PASS dc_onmessage_arraybuffer was called
 PASS data.byteLength is 2
 PASS array[0] is 17
 PASS array[1] is 19
+PASS dc.send(array); did not throw exception.
 PASS dc_onmessage_arraybufferview was called
 PASS data.byteLength is 2
 PASS array[0] is 11

Modified: trunk/LayoutTests/fast/mediastream/RTCPeerConnection-datachannel.html (134206 => 134207)


--- trunk/LayoutTests/fast/mediastream/RTCPeerConnection-datachannel.html	2012-11-12 12:21:44 UTC (rev 134206)
+++ trunk/LayoutTests/fast/mediastream/RTCPeerConnection-datachannel.html	2012-11-12 12:24:50 UTC (rev 134207)
@@ -42,7 +42,7 @@
     array[0] = 11;
     array[1] = 13;
     dc._onmessage_ = dc_onmessage_arraybufferview;
-    dc.send(array);
+    shouldNotThrow("dc.send(array);");
 }
 
 function dc_onmessage_string(e) {
@@ -51,12 +51,12 @@
     shouldBe("data", "'xyzzy'");
 
     dc.binaryType = "arraybuffer";
-    var buffer = new ArrayBuffer(2);
+    buffer = new ArrayBuffer(2);
     var array = new Int8Array(buffer);
     array[0] = 17;
     array[1] = 19;
     dc._onmessage_ = dc_onmessage_arraybuffer;
-    dc.send(buffer);
+    shouldNotThrow("dc.send(buffer);");
 }
 
 function dc_onopen() {
@@ -65,7 +65,7 @@
     shouldBe("dc.label", "'label'");
 
     dc._onmessage_ = dc_onmessage_string;
-    dc.send("xyzzy");
+    shouldNotThrow("dc.send('xyzzy');");
 }
 
 function pc_onopen() {

Modified: trunk/Source/Platform/ChangeLog (134206 => 134207)


--- trunk/Source/Platform/ChangeLog	2012-11-12 12:21:44 UTC (rev 134206)
+++ trunk/Source/Platform/ChangeLog	2012-11-12 12:24:50 UTC (rev 134207)
@@ -1,3 +1,15 @@
+2012-11-12  Tommy Widenflycht  <[email protected]>
+
+        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.
+
+        Making some WebRTCDataChannel methods const.
+
+        * chromium/public/WebRTCDataChannel.h:
+        (WebRTCDataChannel):
+
 2012-11-09  Tommy Widenflycht  <[email protected]>
 
         MediaStream API: Deleting all files relating to the deprecated PeerConnection00

Modified: trunk/Source/Platform/chromium/public/WebRTCDataChannel.h (134206 => 134207)


--- trunk/Source/Platform/chromium/public/WebRTCDataChannel.h	2012-11-12 12:21:44 UTC (rev 134206)
+++ trunk/Source/Platform/chromium/public/WebRTCDataChannel.h	2012-11-12 12:24:50 UTC (rev 134207)
@@ -69,11 +69,11 @@
     WEBKIT_EXPORT WebString label() const;
     WEBKIT_EXPORT bool reliable() const;
 
-    WEBKIT_EXPORT void setBufferedAmount(unsigned long);
-    WEBKIT_EXPORT void readyStateChanged(ReadyState);
-    WEBKIT_EXPORT void dataArrived(const WebString&);
-    WEBKIT_EXPORT void dataArrived(const char*, size_t);
-    WEBKIT_EXPORT void error();
+    WEBKIT_EXPORT void setBufferedAmount(unsigned long) const;
+    WEBKIT_EXPORT void readyStateChanged(ReadyState) const;
+    WEBKIT_EXPORT void dataArrived(const WebString&) const;
+    WEBKIT_EXPORT void dataArrived(const char*, size_t) const;
+    WEBKIT_EXPORT void error() const;
 
     // Extra data associated with this WebRTCDataChannel.
     // If non-null, the extra data pointer will be deleted when the object is destroyed.

Modified: trunk/Source/WebCore/ChangeLog (134206 => 134207)


--- trunk/Source/WebCore/ChangeLog	2012-11-12 12:21:44 UTC (rev 134206)
+++ trunk/Source/WebCore/ChangeLog	2012-11-12 12:24:50 UTC (rev 134207)
@@ -1,3 +1,30 @@
+2012-11-12  Tommy Widenflycht  <[email protected]>
+
+        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.
+
+        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):
+
 2012-11-12  Kunihiko Sakamoto  <[email protected]>
 
         Remove HTMLInputElement dependency from PickerIndicatorElement

Modified: trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.cpp (134206 => 134207)


--- trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.cpp	2012-11-12 12:21:44 UTC (rev 134206)
+++ trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.cpp	2012-11-12 12:24:50 UTC (rev 134207)
@@ -63,6 +63,7 @@
     , m_descriptor(descriptor)
     , m_binaryType(BinaryTypeArrayBuffer)
     , m_handler(handler)
+    , m_scheduledEventTimer(this, &RTCDataChannel::scheduledEventTimerFired)
 {
     m_descriptor->setClient(this);
 }
@@ -186,10 +187,10 @@
 
     switch (m_descriptor->readyState()) {
     case RTCDataChannelDescriptor::ReadyStateOpen:
-        dispatchEvent(Event::create(eventNames().openEvent, false, false));
+        scheduleDispatchEvent(Event::create(eventNames().openEvent, false, false));
         break;
     case RTCDataChannelDescriptor::ReadyStateClosed:
-        dispatchEvent(Event::create(eventNames().closeEvent, false, false));
+        scheduleDispatchEvent(Event::create(eventNames().closeEvent, false, false));
         break;
     default:
         break;
@@ -201,7 +202,7 @@
     if (m_stopped)
         return;
 
-    dispatchEvent(MessageEvent::create(text));
+    scheduleDispatchEvent(MessageEvent::create(text));
 }
 
 void RTCDataChannel::dataArrived(const char* data, size_t dataLength)
@@ -215,7 +216,7 @@
     }
     if (m_binaryType == BinaryTypeArrayBuffer) {
         RefPtr<ArrayBuffer> buffer = ArrayBuffer::create(data, dataLength);
-        dispatchEvent(MessageEvent::create(buffer.release()));
+        scheduleDispatchEvent(MessageEvent::create(buffer.release()));
         return;
     }
     ASSERT_NOT_REACHED();
@@ -226,7 +227,7 @@
     if (m_stopped)
         return;
 
-    dispatchEvent(Event::create(eventNames().errorEvent, false, false));
+    scheduleDispatchEvent(Event::create(eventNames().errorEvent, false, false));
 }
 
 RTCDataChannelDescriptor* RTCDataChannel::descriptor()
@@ -262,6 +263,29 @@
     return &m_eventTargetData;
 }
 
+void RTCDataChannel::scheduleDispatchEvent(PassRefPtr<Event> event)
+{
+    m_scheduledEvents.append(event);
+
+    if (!m_scheduledEventTimer.isActive())
+        m_scheduledEventTimer.startOneShot(0);
+}
+
+void RTCDataChannel::scheduledEventTimerFired(Timer<RTCDataChannel>*)
+{
+    if (m_stopped)
+        return;
+
+    Vector<RefPtr<Event> > events;
+    events.swap(m_scheduledEvents);
+
+    Vector<RefPtr<Event> >::iterator it = events.begin();
+    for (; it != events.end(); ++it)
+        dispatchEvent((*it).release());
+
+    events.clear();
+}
+
 } // namespace WebCore
 
 #endif // ENABLE(MEDIA_STREAM)

Modified: trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.h (134206 => 134207)


--- trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.h	2012-11-12 12:21:44 UTC (rev 134206)
+++ trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.h	2012-11-12 12:24:50 UTC (rev 134207)
@@ -30,6 +30,7 @@
 #include "ActiveDOMObject.h"
 #include "EventTarget.h"
 #include "RTCDataChannelDescriptor.h"
+#include "Timer.h"
 #include <wtf/RefCounted.h>
 
 namespace WebCore {
@@ -78,6 +79,9 @@
 private:
     RTCDataChannel(ScriptExecutionContext*, RTCPeerConnectionHandler*, PassRefPtr<RTCDataChannelDescriptor>);
 
+    void scheduleDispatchEvent(PassRefPtr<Event>);
+    void scheduledEventTimerFired(Timer<RTCDataChannel>*);
+
     // EventTarget
     virtual EventTargetData* eventTargetData();
     virtual EventTargetData* ensureEventTargetData();
@@ -103,6 +107,9 @@
 
     // Not owned by this class.
     RTCPeerConnectionHandler* m_handler;
+
+    Timer<RTCDataChannel> m_scheduledEventTimer;
+    Vector<RefPtr<Event> > m_scheduledEvents;
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/platform/chromium/support/WebRTCDataChannel.cpp (134206 => 134207)


--- trunk/Source/WebCore/platform/chromium/support/WebRTCDataChannel.cpp	2012-11-12 12:21:44 UTC (rev 134206)
+++ trunk/Source/WebCore/platform/chromium/support/WebRTCDataChannel.cpp	2012-11-12 12:24:50 UTC (rev 134207)
@@ -106,31 +106,31 @@
     return m_private->reliable();
 }
 
-void WebRTCDataChannel::setBufferedAmount(unsigned long bufferedAmount)
+void WebRTCDataChannel::setBufferedAmount(unsigned long bufferedAmount) const
 {
     ASSERT(!isNull());
     m_private->setBufferedAmount(bufferedAmount);
 }
 
-void WebRTCDataChannel::readyStateChanged(ReadyState state)
+void WebRTCDataChannel::readyStateChanged(ReadyState state) const
 {
     ASSERT(!isNull());
     m_private->readyStateChanged(static_cast<RTCDataChannelDescriptor::ReadyState>(state));
 }
 
-void WebRTCDataChannel::dataArrived(const WebString& data)
+void WebRTCDataChannel::dataArrived(const WebString& data) const
 {
     ASSERT(!isNull());
     m_private->dataArrived(data);
 }
 
-void WebRTCDataChannel::dataArrived(const char* data, size_t dataLength)
+void WebRTCDataChannel::dataArrived(const char* data, size_t dataLength) const
 {
     ASSERT(!isNull());
     m_private->dataArrived(data, dataLength);
 }
 
-void WebRTCDataChannel::error()
+void WebRTCDataChannel::error() const
 {
     ASSERT(!isNull());
     m_private->error();

Modified: trunk/Tools/ChangeLog (134206 => 134207)


--- trunk/Tools/ChangeLog	2012-11-12 12:21:44 UTC (rev 134206)
+++ trunk/Tools/ChangeLog	2012-11-12 12:24:50 UTC (rev 134207)
@@ -1,3 +1,17 @@
+2012-11-12  Tommy Widenflycht  <[email protected]>
+
+        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.
+
+        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):
+
 2012-11-12  Jochen Eisinger  <[email protected]>
 
         [chromium] move TestRunner implementation into WebTestRunner namespace

Modified: trunk/Tools/DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp (134206 => 134207)


--- trunk/Tools/DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp	2012-11-12 12:21:44 UTC (rev 134206)
+++ trunk/Tools/DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp	2012-11-12 12:24:50 UTC (rev 134207)
@@ -351,7 +351,7 @@
     if (m_stopped)
         return false;
 
-    postTask(new StringDataTask(this, dataChannel, data));
+    dataChannel.dataArrived(data);
     return true;
 }
 
@@ -360,7 +360,7 @@
     if (m_stopped)
         return false;
 
-    postTask(new CharPtrDataTask(this, dataChannel, data, length));
+    dataChannel.dataArrived(data, length);
     return true;
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to