Changeset 131494 in webkit


Ignore:
Timestamp:
Oct 16, 2012 1:41:36 PM (12 years ago)
Author:
tommyw@google.com
Message:

MediaStream API: Add the chromium API for RTCDataChannel
https://bugs.webkit.org/show_bug.cgi?id=99435

Reviewed by Adam Barth.

Source/Platform:

Adding WebRTCDataChannel.

  • Platform.gypi:
  • chromium/public/WebRTCDataChannel.h: Added.

(WebCore):
(WebKit):
(WebRTCDataChannel):
(ExtraData):
(WebKit::WebRTCDataChannel::ExtraData::~ExtraData):
(WebKit::WebRTCDataChannel::WebRTCDataChannel):
(WebKit::WebRTCDataChannel::~WebRTCDataChannel):
(WebKit::WebRTCDataChannel::operator=):
(WebKit::WebRTCDataChannel::isNull):

  • chromium/public/WebRTCPeerConnectionHandler.h:

(WebKit):
(WebRTCPeerConnectionHandler):
(WebKit::WebRTCPeerConnectionHandler::openDataChannel):
(WebKit::WebRTCPeerConnectionHandler::sendStringData):
(WebKit::WebRTCPeerConnectionHandler::sendRawData):
(WebKit::WebRTCPeerConnectionHandler::closeDataChannel):

Source/WebCore:

Adding WebRTCDataChannel.

Test: fast/mediastream/RTCPeerConnection-datachannel.html

  • WebCore.gypi:
  • platform/chromium/support/WebRTCDataChannel.cpp: Added.

(WebKit):
(ExtraDataContainer):
(WebKit::ExtraDataContainer::ExtraDataContainer):
(WebKit::ExtraDataContainer::extraData):
(WebKit::WebRTCDataChannel::WebRTCDataChannel):
(WebKit::WebRTCDataChannel::initialize):
(WebKit::WebRTCDataChannel::assign):
(WebKit::WebRTCDataChannel::reset):
(WebKit::WebRTCDataChannel::operator PassRefPtr<WebCore::RTCDataChannelDescriptor>):
(WebKit::WebRTCDataChannel::operator WebCore::RTCDataChannelDescriptor*):
(WebKit::WebRTCDataChannel::extraData):
(WebKit::WebRTCDataChannel::setExtraData):
(WebKit::WebRTCDataChannel::label):
(WebKit::WebRTCDataChannel::reliable):
(WebKit::WebRTCDataChannel::setBufferedAmount):
(WebKit::WebRTCDataChannel::readyStateChanged):
(WebKit::WebRTCDataChannel::dataArrived):
(WebKit::WebRTCDataChannel::error):

  • platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.cpp:

(WebCore::RTCPeerConnectionHandlerChromium::negotiationNeeded):
(WebCore::RTCPeerConnectionHandlerChromium::didGenerateICECandidate):
(WebCore):
(WebCore::RTCPeerConnectionHandlerChromium::didChangeReadyState):
(WebCore::RTCPeerConnectionHandlerChromium::didChangeICEState):
(WebCore::RTCPeerConnectionHandlerChromium::didRemoveRemoteStream):

Source/WebKit/chromium:

Adding checks for RTCDataChannel.

  • src/AssertMatchingEnums.cpp:

Tools:

Adding mock support for WebRTCDataChannel.

  • DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:

(StringDataTask):
(StringDataTask::StringDataTask):
(CharPtrDataTask):
(CharPtrDataTask::CharPtrDataTask):
(DataChannelReadyStateTask):
(DataChannelReadyStateTask::DataChannelReadyStateTask):
(RTCPeerConnectionReadyStateTask):
(RTCPeerConnectionReadyStateTask::RTCPeerConnectionReadyStateTask):
(MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler):
(MockWebRTCPeerConnectionHandler::initialize):
(MockWebRTCPeerConnectionHandler::stop):
(MockWebRTCPeerConnectionHandler::openDataChannel):
(MockWebRTCPeerConnectionHandler::closeDataChannel):
(MockWebRTCPeerConnectionHandler::sendStringData):
(MockWebRTCPeerConnectionHandler::sendRawData):

  • DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h:

(MockWebRTCPeerConnectionHandler):

LayoutTests:

Adding tests for RTCDataChannel.

  • fast/mediastream/RTCPeerConnection-datachannel-expected.txt: Added.
  • fast/mediastream/RTCPeerConnection-datachannel.html: Added.
Location:
trunk
Files:
4 added
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r131491 r131494  
     12012-10-16  Tommy Widenflycht  <tommyw@google.com>
     2
     3        MediaStream API: Add the chromium API for RTCDataChannel
     4        https://bugs.webkit.org/show_bug.cgi?id=99435
     5
     6        Reviewed by Adam Barth.
     7
     8        Adding tests for RTCDataChannel.
     9
     10        * fast/mediastream/RTCPeerConnection-datachannel-expected.txt: Added.
     11        * fast/mediastream/RTCPeerConnection-datachannel.html: Added.
     12
    1132012-10-16  Tony Chang  <tony@chromium.org>
    214
  • trunk/Source/Platform/ChangeLog

    r131262 r131494  
     12012-10-16  Tommy Widenflycht  <tommyw@google.com>
     2
     3        MediaStream API: Add the chromium API for RTCDataChannel
     4        https://bugs.webkit.org/show_bug.cgi?id=99435
     5
     6        Reviewed by Adam Barth.
     7
     8        Adding WebRTCDataChannel.
     9
     10        * Platform.gypi:
     11        * chromium/public/WebRTCDataChannel.h: Added.
     12        (WebCore):
     13        (WebKit):
     14        (WebRTCDataChannel):
     15        (ExtraData):
     16        (WebKit::WebRTCDataChannel::ExtraData::~ExtraData):
     17        (WebKit::WebRTCDataChannel::WebRTCDataChannel):
     18        (WebKit::WebRTCDataChannel::~WebRTCDataChannel):
     19        (WebKit::WebRTCDataChannel::operator=):
     20        (WebKit::WebRTCDataChannel::isNull):
     21        * chromium/public/WebRTCPeerConnectionHandler.h:
     22        (WebKit):
     23        (WebRTCPeerConnectionHandler):
     24        (WebKit::WebRTCPeerConnectionHandler::openDataChannel):
     25        (WebKit::WebRTCPeerConnectionHandler::sendStringData):
     26        (WebKit::WebRTCPeerConnectionHandler::sendRawData):
     27        (WebKit::WebRTCPeerConnectionHandler::closeDataChannel):
     28
    1292012-10-13  Chris Rogers  <crogers@google.com>
    230
  • trunk/Source/Platform/Platform.gypi

    r130260 r131494  
    108108            'chromium/public/WebPrivatePtr.h',
    109109            'chromium/public/WebRTCConfiguration.h',
     110            'chromium/public/WebRTCDataChannel.h',
    110111            'chromium/public/WebRTCICECandidate.h',
    111112            'chromium/public/WebRTCPeerConnectionHandler.h',
  • trunk/Source/Platform/chromium/public/WebRTCPeerConnectionHandler.h

    r129908 r131494  
    3636class WebMediaStreamDescriptor;
    3737class WebRTCConfiguration;
     38class WebRTCDataChannel;
    3839class WebRTCICECandidate;
    3940class WebRTCPeerConnectionHandlerClient;
     
    4243class WebRTCStatsRequest;
    4344class WebRTCVoidRequest;
     45class WebString;
    4446
    4547class WebRTCPeerConnectionHandler {
     
    6264    virtual void getStats(const WebRTCStatsRequest&) { }
    6365    virtual void stop() = 0;
     66
     67    // RTCDataChannel
     68    virtual bool openDataChannel(const WebRTCDataChannel&) { return false; }
     69    virtual bool sendStringData(const WebRTCDataChannel&, const WebString&) { return false; }
     70    virtual bool sendRawData(const WebRTCDataChannel&, const char*, size_t) { return false; }
     71    virtual void closeDataChannel(const WebRTCDataChannel&) { }
    6472};
    6573
  • trunk/Source/WebCore/ChangeLog

    r131492 r131494  
     12012-10-16  Tommy Widenflycht  <tommyw@google.com>
     2
     3        MediaStream API: Add the chromium API for RTCDataChannel
     4        https://bugs.webkit.org/show_bug.cgi?id=99435
     5
     6        Reviewed by Adam Barth.
     7
     8        Adding WebRTCDataChannel.
     9
     10        Test: fast/mediastream/RTCPeerConnection-datachannel.html
     11
     12        * WebCore.gypi:
     13        * platform/chromium/support/WebRTCDataChannel.cpp: Added.
     14        (WebKit):
     15        (ExtraDataContainer):
     16        (WebKit::ExtraDataContainer::ExtraDataContainer):
     17        (WebKit::ExtraDataContainer::extraData):
     18        (WebKit::WebRTCDataChannel::WebRTCDataChannel):
     19        (WebKit::WebRTCDataChannel::initialize):
     20        (WebKit::WebRTCDataChannel::assign):
     21        (WebKit::WebRTCDataChannel::reset):
     22        (WebKit::WebRTCDataChannel::operator PassRefPtr<WebCore::RTCDataChannelDescriptor>):
     23        (WebKit::WebRTCDataChannel::operator WebCore::RTCDataChannelDescriptor*):
     24        (WebKit::WebRTCDataChannel::extraData):
     25        (WebKit::WebRTCDataChannel::setExtraData):
     26        (WebKit::WebRTCDataChannel::label):
     27        (WebKit::WebRTCDataChannel::reliable):
     28        (WebKit::WebRTCDataChannel::setBufferedAmount):
     29        (WebKit::WebRTCDataChannel::readyStateChanged):
     30        (WebKit::WebRTCDataChannel::dataArrived):
     31        (WebKit::WebRTCDataChannel::error):
     32        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.cpp:
     33        (WebCore::RTCPeerConnectionHandlerChromium::negotiationNeeded):
     34        (WebCore::RTCPeerConnectionHandlerChromium::didGenerateICECandidate):
     35        (WebCore):
     36        (WebCore::RTCPeerConnectionHandlerChromium::didChangeReadyState):
     37        (WebCore::RTCPeerConnectionHandlerChromium::didChangeICEState):
     38        (WebCore::RTCPeerConnectionHandlerChromium::didRemoveRemoteStream):
     39
    1402012-10-16  Brady Eidson  <beidson@apple.com>
    241
  • trunk/Source/WebCore/WebCore.gypi

    r131486 r131494  
    83928392            'platform/chromium/support/WebPrerender.cpp',
    83938393            'platform/chromium/support/WebRTCConfiguration.cpp',
     8394            'platform/chromium/support/WebRTCDataChannel.cpp',
    83948395            'platform/chromium/support/WebRTCICECandidate.cpp',
    83958396            'platform/chromium/support/WebRTCSessionDescription.cpp',
  • trunk/Source/WebCore/platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.cpp

    r131372 r131494  
    4848#include <public/WebMediaStreamDescriptor.h>
    4949#include <public/WebRTCConfiguration.h>
     50#include <public/WebRTCDataChannel.h>
    5051#include <public/WebRTCICECandidate.h>
    5152#include <public/WebRTCSessionDescription.h>
     
    176177}
    177178
     179bool RTCPeerConnectionHandlerChromium::openDataChannel(PassRefPtr<RTCDataChannelDescriptor> dataChannel)
     180{
     181    if (!m_webHandler)
     182        return false;
     183
     184    return m_webHandler->openDataChannel(dataChannel);
     185}
     186
     187bool RTCPeerConnectionHandlerChromium::sendStringData(PassRefPtr<RTCDataChannelDescriptor> dataChannel, const String& data)
     188{
     189    if (!m_webHandler)
     190        return false;
     191
     192    return m_webHandler->sendStringData(dataChannel, data);
     193}
     194
     195bool RTCPeerConnectionHandlerChromium::sendRawData(PassRefPtr<RTCDataChannelDescriptor> dataChannel, const char* data, size_t dataLength)
     196{
     197    if (!m_webHandler)
     198        return false;
     199
     200    return m_webHandler->sendRawData(dataChannel, data, dataLength);
     201}
     202
     203void RTCPeerConnectionHandlerChromium::closeDataChannel(PassRefPtr<RTCDataChannelDescriptor> dataChannel)
     204{
     205    if (!m_webHandler)
     206        return;
     207
     208    return m_webHandler->closeDataChannel(dataChannel);
     209}
     210
    178211void RTCPeerConnectionHandlerChromium::stop()
    179212{
     
    214247}
    215248
    216 bool RTCPeerConnectionHandlerChromium::openDataChannel(PassRefPtr<RTCDataChannelDescriptor> dataChannel)
    217 {
    218     // FIXME: Implement when WebKit changes have landed.
    219     return false;
    220 }
    221 
    222 bool RTCPeerConnectionHandlerChromium::sendStringData(PassRefPtr<RTCDataChannelDescriptor> dataChannel, const String& data)
    223 {
    224     // FIXME: Implement when WebKit changes have landed.
    225     return false;
    226 }
    227 
    228 bool RTCPeerConnectionHandlerChromium::sendRawData(PassRefPtr<RTCDataChannelDescriptor> dataChannel, const char* data, size_t dataLength)
    229 {
    230     // FIXME: Implement when WebKit changes have landed.
    231     return false;
    232 }
    233 
    234 void RTCPeerConnectionHandlerChromium::closeDataChannel(PassRefPtr<RTCDataChannelDescriptor> dataChannel)
    235 {
    236     // FIXME: Implement when WebKit changes have landed.
    237 }
    238 
    239249} // namespace WebCore
    240250
  • trunk/Source/WebKit/chromium/ChangeLog

    r131493 r131494  
     12012-10-16  Tommy Widenflycht  <tommyw@google.com>
     2
     3        MediaStream API: Add the chromium API for RTCDataChannel
     4        https://bugs.webkit.org/show_bug.cgi?id=99435
     5
     6        Reviewed by Adam Barth.
     7
     8        Adding checks for RTCDataChannel.
     9
     10        * src/AssertMatchingEnums.cpp:
     11
    1122012-10-16  Sheriff Bot  <webkit.review.bot@gmail.com>
    213
  • trunk/Source/WebKit/chromium/src/AssertMatchingEnums.cpp

    r129799 r131494  
    6565#include "PeerConnection00.h"
    6666#include "PlatformCursor.h"
     67#include "RTCDataChannelDescriptor.h"
    6768#include "RTCPeerConnectionHandlerClient.h"
    6869#include "ReferrerPolicy.h"
     
    117118#include <public/WebPeerConnection00Handler.h>
    118119#include <public/WebPeerConnection00HandlerClient.h>
     120#include <public/WebRTCDataChannel.h>
    119121#include <public/WebRTCPeerConnectionHandler.h>
    120122#include <public/WebRTCPeerConnectionHandlerClient.h>
     
    592594COMPILE_ASSERT_MATCHING_ENUM(WebRTCPeerConnectionHandlerClient::ICEStateFailed, RTCPeerConnectionHandlerClient::IceStateFailed);
    593595COMPILE_ASSERT_MATCHING_ENUM(WebRTCPeerConnectionHandlerClient::ICEStateClosed, RTCPeerConnectionHandlerClient::IceStateClosed);
     596
     597COMPILE_ASSERT_MATCHING_ENUM(WebRTCDataChannel::ReadyStateConnecting, RTCDataChannelDescriptor::ReadyStateConnecting);
     598COMPILE_ASSERT_MATCHING_ENUM(WebRTCDataChannel::ReadyStateOpen, RTCDataChannelDescriptor::ReadyStateOpen);
     599COMPILE_ASSERT_MATCHING_ENUM(WebRTCDataChannel::ReadyStateClosing, RTCDataChannelDescriptor::ReadyStateClosing);
     600COMPILE_ASSERT_MATCHING_ENUM(WebRTCDataChannel::ReadyStateClosed, RTCDataChannelDescriptor::ReadyStateClosed);
    594601#endif
    595602
  • trunk/Tools/ChangeLog

    r131486 r131494  
     12012-10-16  Tommy Widenflycht  <tommyw@google.com>
     2
     3        MediaStream API: Add the chromium API for RTCDataChannel
     4        https://bugs.webkit.org/show_bug.cgi?id=99435
     5
     6        Reviewed by Adam Barth.
     7
     8        Adding mock support for WebRTCDataChannel.
     9
     10        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
     11        (StringDataTask):
     12        (StringDataTask::StringDataTask):
     13        (CharPtrDataTask):
     14        (CharPtrDataTask::CharPtrDataTask):
     15        (DataChannelReadyStateTask):
     16        (DataChannelReadyStateTask::DataChannelReadyStateTask):
     17        (RTCPeerConnectionReadyStateTask):
     18        (RTCPeerConnectionReadyStateTask::RTCPeerConnectionReadyStateTask):
     19        (MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler):
     20        (MockWebRTCPeerConnectionHandler::initialize):
     21        (MockWebRTCPeerConnectionHandler::stop):
     22        (MockWebRTCPeerConnectionHandler::openDataChannel):
     23        (MockWebRTCPeerConnectionHandler::closeDataChannel):
     24        (MockWebRTCPeerConnectionHandler::sendStringData):
     25        (MockWebRTCPeerConnectionHandler::sendRawData):
     26        * DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h:
     27        (MockWebRTCPeerConnectionHandler):
     28
    1292012-10-16  Chris Rogers  <crogers@google.com>
    230
  • trunk/Tools/DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp

    r130768 r131494  
    125125};
    126126
     127class StringDataTask : public MethodTask<MockWebRTCPeerConnectionHandler> {
     128public:
     129    StringDataTask(MockWebRTCPeerConnectionHandler* object, const WebRTCDataChannel& dataChannel, const WebString& data)
     130        : MethodTask<MockWebRTCPeerConnectionHandler>(object)
     131        , m_dataChannel(dataChannel)
     132        , m_data(data)
     133    {
     134    }
     135
     136    virtual void runIfValid() OVERRIDE
     137    {
     138        m_dataChannel.dataArrived(m_data);
     139    }
     140
     141private:
     142    WebRTCDataChannel m_dataChannel;
     143    WebString m_data;
     144};
     145
     146class CharPtrDataTask : public MethodTask<MockWebRTCPeerConnectionHandler> {
     147public:
     148    CharPtrDataTask(MockWebRTCPeerConnectionHandler* object, const WebRTCDataChannel& dataChannel, const char* data, size_t length)
     149        : MethodTask<MockWebRTCPeerConnectionHandler>(object)
     150        , m_dataChannel(dataChannel)
     151        , m_length(length)
     152    {
     153        m_data = new char[m_length];
     154        memcpy(m_data, data, m_length);
     155    }
     156
     157    virtual void runIfValid() OVERRIDE
     158    {
     159        m_dataChannel.dataArrived(m_data, m_length);
     160        delete m_data;
     161    }
     162
     163private:
     164    WebRTCDataChannel m_dataChannel;
     165    char* m_data;
     166    size_t m_length;
     167};
     168
     169class DataChannelReadyStateTask : public MethodTask<MockWebRTCPeerConnectionHandler> {
     170public:
     171    DataChannelReadyStateTask(MockWebRTCPeerConnectionHandler* object, const WebRTCDataChannel& dataChannel, WebRTCDataChannel::ReadyState state)
     172        : MethodTask<MockWebRTCPeerConnectionHandler>(object)
     173        , m_dataChannel(dataChannel)
     174        , m_state(state)
     175    {
     176    }
     177
     178    virtual void runIfValid() OVERRIDE
     179    {
     180        m_dataChannel.readyStateChanged(m_state);
     181    }
     182
     183private:
     184    WebRTCDataChannel m_dataChannel;
     185    WebRTCDataChannel::ReadyState m_state;
     186};
     187
     188class RTCPeerConnectionReadyStateTask : public MethodTask<MockWebRTCPeerConnectionHandler> {
     189public:
     190    RTCPeerConnectionReadyStateTask(MockWebRTCPeerConnectionHandler* object, WebRTCPeerConnectionHandlerClient* client, WebRTCPeerConnectionHandlerClient::ReadyState state)
     191        : MethodTask<MockWebRTCPeerConnectionHandler>(object)
     192        , m_client(client)
     193        , m_state(state)
     194    {
     195    }
     196
     197    virtual void runIfValid() OVERRIDE
     198    {
     199        m_client->didChangeReadyState(m_state);
     200    }
     201
     202private:
     203    WebRTCPeerConnectionHandlerClient* m_client;
     204    WebRTCPeerConnectionHandlerClient::ReadyState m_state;
     205};
     206
    127207/////////////////////
    128208
    129209MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler(WebRTCPeerConnectionHandlerClient* client)
    130210    : m_client(client)
     211    , m_stopped(false)
    131212    , m_streamCount(0)
    132213{
     
    135216bool MockWebRTCPeerConnectionHandler::initialize(const WebRTCConfiguration&, const WebMediaConstraints& constraints)
    136217{
    137     return MockConstraints::verifyConstraints(constraints);
     218    if (MockConstraints::verifyConstraints(constraints)) {
     219        postTask(new RTCPeerConnectionReadyStateTask(this, m_client, WebRTCPeerConnectionHandlerClient::ReadyStateActive));
     220        return true;
     221    }
     222
     223    return false;
    138224}
    139225
     
    231317void MockWebRTCPeerConnectionHandler::stop()
    232318{
     319    m_stopped = true;
     320}
     321
     322bool MockWebRTCPeerConnectionHandler::openDataChannel(const WebRTCDataChannel& dataChannel)
     323{
     324    if (m_stopped)
     325        return false;
     326
     327    postTask(new DataChannelReadyStateTask(this, dataChannel, WebRTCDataChannel::ReadyStateOpen));
     328    return true;
     329}
     330
     331void MockWebRTCPeerConnectionHandler::closeDataChannel(const WebRTCDataChannel& dataChannel)
     332{
     333    postTask(new DataChannelReadyStateTask(this, dataChannel, WebRTCDataChannel::ReadyStateClosed));
     334}
     335
     336bool MockWebRTCPeerConnectionHandler::sendStringData(const WebRTCDataChannel& dataChannel, const WebString& data)
     337{
     338    if (m_stopped)
     339        return false;
     340
     341    postTask(new StringDataTask(this, dataChannel, data));
     342    return true;
     343}
     344
     345bool MockWebRTCPeerConnectionHandler::sendRawData(const WebRTCDataChannel& dataChannel, const char* data, size_t length)
     346{
     347    if (m_stopped)
     348        return false;
     349
     350    postTask(new CharPtrDataTask(this, dataChannel, data, length));
     351    return true;
    233352}
    234353
  • trunk/Tools/DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h

    r130260 r131494  
    3535
    3636#include "Task.h"
     37#include <public/WebRTCDataChannel.h>
    3738#include <public/WebRTCPeerConnectionHandler.h>
    3839#include <public/WebRTCSessionDescription.h>
     
    6364    virtual void stop() OVERRIDE;
    6465
     66    virtual bool openDataChannel(const WebKit::WebRTCDataChannel&) OVERRIDE;
     67    virtual bool sendStringData(const WebKit::WebRTCDataChannel&, const WebKit::WebString&) OVERRIDE;
     68    virtual bool sendRawData(const WebKit::WebRTCDataChannel&, const char*, size_t) OVERRIDE;
     69    virtual void closeDataChannel(const WebKit::WebRTCDataChannel&) OVERRIDE;
     70
    6571    // Task related methods
    6672    TaskList* taskList() { return &m_taskList; }
     
    7076
    7177    WebKit::WebRTCPeerConnectionHandlerClient* m_client;
     78    bool m_stopped;
    7279    TaskList m_taskList;
    7380    WebKit::WebRTCSessionDescription m_localDescription;
Note: See TracChangeset for help on using the changeset viewer.