Changeset 131372 in webkit
- Timestamp:
- Oct 15, 2012 3:21:07 PM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 8 added
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/CMakeLists.txt
r131137 r131372 225 225 Modules/mediastream/NavigatorUserMediaSuccessCallback.idl 226 226 Modules/mediastream/PeerConnection00.idl 227 Modules/mediastream/RTCDataChannel.idl 228 Modules/mediastream/RTCDataChannelEvent.idl 227 229 Modules/mediastream/RTCErrorCallback.idl 228 230 Modules/mediastream/RTCIceCandidate.idl … … 863 865 Modules/mediastream/NavigatorMediaStream.cpp 864 866 Modules/mediastream/PeerConnection00.cpp 867 Modules/mediastream/RTCDataChannel.cpp 868 Modules/mediastream/RTCDataChannelEvent.cpp 865 869 Modules/mediastream/RTCIceCandidate.cpp 866 870 Modules/mediastream/RTCIceCandidateEvent.cpp … … 1960 1964 platform/mediastream/MediaStreamSource.cpp 1961 1965 platform/mediastream/PeerConnection00Handler.cpp 1966 platform/mediastream/RTCDataChannelDescriptor.cpp 1962 1967 platform/mediastream/RTCIceCandidateDescriptor.cpp 1963 1968 platform/mediastream/RTCPeerConnectionHandler.cpp -
trunk/Source/WebCore/ChangeLog
r131371 r131372 1 2012-10-15 Tommy Widenflycht <tommyw@google.com> 2 3 MediaStream API: Implement RTCDataChannel 4 https://bugs.webkit.org/show_bug.cgi?id=99080 5 6 Reviewed by Adam Barth. 7 8 This patch introduces RTCDataChannel which is a pipe for sending data between two RTCPeerConnections. 9 Since the data channel belongs to a peer connection object I have reused part of its infrastructure. 10 11 Not currently testable. My next patch will add the chromium WebKit functionality, together with mocks and tests. 12 13 * CMakeLists.txt: 14 * GNUmakefile.list.am: 15 * Modules/mediastream/RTCDataChannel.cpp: Added. 16 (WebCore): 17 (WebCore::RTCDataChannel::create): 18 (WebCore::RTCDataChannel::RTCDataChannel): 19 (WebCore::RTCDataChannel::~RTCDataChannel): 20 (WebCore::RTCDataChannel::label): 21 (WebCore::RTCDataChannel::reliable): 22 (WebCore::RTCDataChannel::readyState): 23 (WebCore::RTCDataChannel::bufferedAmount): 24 (WebCore::RTCDataChannel::binaryType): 25 (WebCore::RTCDataChannel::setBinaryType): 26 (WebCore::RTCDataChannel::send): 27 (WebCore::RTCDataChannel::close): 28 (WebCore::RTCDataChannel::readyStateChanged): 29 (WebCore::RTCDataChannel::dataArrived): 30 (WebCore::RTCDataChannel::error): 31 (WebCore::RTCDataChannel::descriptor): 32 (WebCore::RTCDataChannel::interfaceName): 33 (WebCore::RTCDataChannel::scriptExecutionContext): 34 (WebCore::RTCDataChannel::stop): 35 (WebCore::RTCDataChannel::eventTargetData): 36 (WebCore::RTCDataChannel::ensureEventTargetData): 37 * Modules/mediastream/RTCDataChannel.h: Added. 38 (WebCore): 39 (RTCDataChannel): 40 (WebCore::RTCDataChannel::refEventTarget): 41 (WebCore::RTCDataChannel::derefEventTarget): 42 * Modules/mediastream/RTCDataChannel.idl: Added. 43 * Modules/mediastream/RTCDataChannelEvent.cpp: Added. 44 (WebCore): 45 (WebCore::RTCDataChannelEvent::create): 46 (WebCore::RTCDataChannelEvent::RTCDataChannelEvent): 47 (WebCore::RTCDataChannelEvent::~RTCDataChannelEvent): 48 (WebCore::RTCDataChannelEvent::channel): 49 (WebCore::RTCDataChannelEvent::interfaceName): 50 * Modules/mediastream/RTCDataChannelEvent.h: Added. 51 (WebCore): 52 (RTCDataChannelEvent): 53 * Modules/mediastream/RTCDataChannelEvent.idl: Added. 54 * Modules/mediastream/RTCPeerConnection.cpp: 55 (WebCore::RTCPeerConnection::createDataChannel): 56 (WebCore): 57 (WebCore::RTCPeerConnection::close): 58 (WebCore::RTCPeerConnection::didAddRemoteDataChannel): 59 (WebCore::RTCPeerConnection::stop): 60 * Modules/mediastream/RTCPeerConnection.h: 61 (WebCore): 62 (RTCPeerConnection): 63 * Modules/mediastream/RTCPeerConnection.idl: 64 * WebCore.gypi: 65 * dom/EventNames.h: 66 (WebCore): 67 * dom/EventNames.in: 68 * dom/EventTargetFactory.in: 69 * platform/mediastream/RTCDataChannelDescriptor.cpp: Added. 70 (WebCore): 71 (WebCore::RTCDataChannelDescriptor::create): 72 (WebCore::RTCDataChannelDescriptor::RTCDataChannelDescriptor): 73 (WebCore::RTCDataChannelDescriptor::~RTCDataChannelDescriptor): 74 (WebCore::RTCDataChannelDescriptor::readyStateChanged): 75 (WebCore::RTCDataChannelDescriptor::dataArrived): 76 (WebCore::RTCDataChannelDescriptor::error): 77 * platform/mediastream/RTCDataChannelDescriptor.h: Added. 78 (WebCore): 79 (RTCDataChannelDescriptorClient): 80 (WebCore::RTCDataChannelDescriptorClient::~RTCDataChannelDescriptorClient): 81 (RTCDataChannelDescriptor): 82 (ExtraData): 83 (WebCore::RTCDataChannelDescriptor::ExtraData::~ExtraData): 84 (WebCore::RTCDataChannelDescriptor::client): 85 (WebCore::RTCDataChannelDescriptor::setClient): 86 (WebCore::RTCDataChannelDescriptor::label): 87 (WebCore::RTCDataChannelDescriptor::reliable): 88 (WebCore::RTCDataChannelDescriptor::readyState): 89 (WebCore::RTCDataChannelDescriptor::bufferedAmount): 90 (WebCore::RTCDataChannelDescriptor::setBufferedAmount): 91 (WebCore::RTCDataChannelDescriptor::extraData): 92 (WebCore::RTCDataChannelDescriptor::setExtraData): 93 * platform/mediastream/RTCPeerConnectionHandler.cpp: 94 (RTCPeerConnectionHandlerDummy): 95 (WebCore::RTCPeerConnectionHandlerDummy::openDataChannel): 96 (WebCore): 97 (WebCore::RTCPeerConnectionHandlerDummy::sendStringData): 98 (WebCore::RTCPeerConnectionHandlerDummy::sendRawData): 99 (WebCore::RTCPeerConnectionHandlerDummy::closeDataChannel): 100 * platform/mediastream/RTCPeerConnectionHandler.h: 101 (WebCore): 102 (RTCPeerConnectionHandler): 103 * platform/mediastream/RTCPeerConnectionHandlerClient.h: 104 (WebCore): 105 (RTCPeerConnectionHandlerClient): 106 * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.cpp: 107 (WebCore::RTCPeerConnectionHandlerChromium::openDataChannel): 108 (WebCore): 109 (WebCore::RTCPeerConnectionHandlerChromium::sendStringData): 110 (WebCore::RTCPeerConnectionHandlerChromium::sendRawData): 111 (WebCore::RTCPeerConnectionHandlerChromium::closeDataChannel): 112 * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.h: 113 (RTCPeerConnectionHandlerChromium): 114 1 115 2012-10-15 Joshua Bell <jsbell@chromium.org> 2 116 -
trunk/Source/WebCore/GNUmakefile.list.am
r131137 r131372 628 628 DerivedSources/WebCore/JSRGBColor.cpp \ 629 629 DerivedSources/WebCore/JSRGBColor.h \ 630 DerivedSources/WebCore/JSRTCDataChannel.cpp \ 631 DerivedSources/WebCore/JSRTCDataChannel.h \ 632 DerivedSources/WebCore/JSRTCDataChannelEvent.cpp \ 633 DerivedSources/WebCore/JSRTCDataChannelEvent.h \ 630 634 DerivedSources/WebCore/JSRTCErrorCallback.cpp \ 631 635 DerivedSources/WebCore/JSRTCErrorCallback.h \ … … 1237 1241 $(WebCore)/Modules/mediastream/NavigatorUserMediaSuccessCallback.idl \ 1238 1242 $(WebCore)/Modules/mediastream/PeerConnection00.idl \ 1243 $(WebCore)/Modules/mediastream/RTCDataChannel.idl \ 1244 $(WebCore)/Modules/mediastream/RTCDataChannelEvent.idl \ 1239 1245 $(WebCore)/Modules/mediastream/RTCErrorCallback.idl \ 1240 1246 $(WebCore)/Modules/mediastream/RTCIceCandidate.idl \ … … 1935 1941 Source/WebCore/Modules/mediastream/PeerConnection00.cpp \ 1936 1942 Source/WebCore/Modules/mediastream/PeerConnection00.h \ 1943 Source/WebCore/Modules/mediastream/RTCDataChannel.cpp \ 1944 Source/WebCore/Modules/mediastream/RTCDataChannel.h \ 1945 Source/WebCore/Modules/mediastream/RTCDataChannelEvent.cpp \ 1946 Source/WebCore/Modules/mediastream/RTCDataChannelEvent.h \ 1937 1947 Source/WebCore/Modules/mediastream/RTCErrorCallback.h \ 1938 1948 Source/WebCore/Modules/mediastream/RTCIceCandidate.cpp \ … … 4613 4623 Source/WebCore/platform/mediastream/PeerConnection00HandlerClient.h \ 4614 4624 Source/WebCore/platform/mediastream/RTCConfiguration.h \ 4625 Source/WebCore/platform/mediastream/RTCDataChannelDescriptor.cpp \ 4626 Source/WebCore/platform/mediastream/RTCDataChannelDescriptor.h \ 4615 4627 Source/WebCore/platform/mediastream/RTCIceCandidateDescriptor.cpp \ 4616 4628 Source/WebCore/platform/mediastream/RTCIceCandidateDescriptor.h \ 4617 Source/WebCore/platform/mediastream/SessionDescriptionDescriptor.h \4618 4629 Source/WebCore/platform/mediastream/RTCPeerConnectionHandler.cpp \ 4619 4630 Source/WebCore/platform/mediastream/RTCPeerConnectionHandler.h \ -
trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp
r130270 r131372 44 44 #include "MediaStreamEvent.h" 45 45 #include "RTCConfiguration.h" 46 #include "RTCDataChannel.h" 47 #include "RTCDataChannelEvent.h" 46 48 #include "RTCErrorCallback.h" 47 49 #include "RTCIceCandidate.h" … … 409 411 } 410 412 413 PassRefPtr<RTCDataChannel> RTCPeerConnection::createDataChannel(String label, const Dictionary& options, ExceptionCode& ec) 414 { 415 if (m_readyState == ReadyStateClosed) { 416 ec = INVALID_STATE_ERR; 417 return 0; 418 } 419 420 bool reliable = true; 421 options.get("reliable", reliable); 422 RefPtr<RTCDataChannel> channel = RTCDataChannel::create(scriptExecutionContext(), m_peerHandler.get(), label, reliable, ec); 423 if (ec) 424 return 0; 425 m_dataChannels.append(channel); 426 return channel.release(); 427 } 428 411 429 void RTCPeerConnection::close(ExceptionCode& ec) 412 430 { … … 415 433 return; 416 434 } 435 436 m_peerHandler->stop(); 417 437 418 438 changeIceState(IceStateClosed); 419 439 changeReadyState(ReadyStateClosed); 420 stop();421 440 } 422 441 … … 479 498 } 480 499 500 void RTCPeerConnection::didAddRemoteDataChannel(PassRefPtr<RTCDataChannelDescriptor> channelDescriptor) 501 { 502 ASSERT(scriptExecutionContext()->isContextThread()); 503 504 if (m_readyState == ReadyStateClosed) 505 return; 506 507 RefPtr<RTCDataChannel> channel = RTCDataChannel::create(scriptExecutionContext(), m_peerHandler.get(), channelDescriptor); 508 m_dataChannels.append(channel); 509 510 dispatchEvent(RTCDataChannelEvent::create(eventNames().datachannelEvent, false, false, channel.release())); 511 } 512 481 513 const AtomicString& RTCPeerConnection::interfaceName() const 482 514 { … … 491 523 void RTCPeerConnection::stop() 492 524 { 525 if (m_readyState != ReadyStateClosed) 526 m_peerHandler->stop(); 527 528 m_peerHandler.clear(); 529 493 530 m_iceState = IceStateClosed; 494 531 m_readyState = ReadyStateClosed; 495 532 496 if (m_peerHandler) { 497 m_peerHandler->stop(); 498 m_peerHandler.clear(); 499 } 533 Vector<RefPtr<RTCDataChannel> >::iterator i = m_dataChannels.begin(); 534 for (; i != m_dataChannels.end(); ++i) 535 (*i)->stop(); 500 536 } 501 537 -
trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.h
r129908 r131372 50 50 class MediaStreamTrack; 51 51 class RTCConfiguration; 52 class RTCDataChannel; 52 53 class RTCErrorCallback; 53 54 class RTCSessionDescription; … … 89 90 void getStats(PassRefPtr<RTCStatsCallback> successCallback, PassRefPtr<MediaStreamTrack> selector); 90 91 92 PassRefPtr<RTCDataChannel> createDataChannel(String label, const Dictionary& dataChannelDict, ExceptionCode&); 93 91 94 void close(ExceptionCode&); 92 95 … … 98 101 DEFINE_ATTRIBUTE_EVENT_LISTENER(removestream); 99 102 DEFINE_ATTRIBUTE_EVENT_LISTENER(icechange); 103 DEFINE_ATTRIBUTE_EVENT_LISTENER(datachannel); 100 104 101 105 // RTCPeerConnectionHandlerClient … … 106 110 virtual void didAddRemoteStream(PassRefPtr<MediaStreamDescriptor>) OVERRIDE; 107 111 virtual void didRemoveRemoteStream(MediaStreamDescriptor*) OVERRIDE; 112 virtual void didAddRemoteDataChannel(PassRefPtr<RTCDataChannelDescriptor>) OVERRIDE; 108 113 109 114 // EventTarget … … 138 143 RefPtr<MediaStreamList> m_remoteStreams; 139 144 145 Vector<RefPtr<RTCDataChannel> > m_dataChannels; 146 140 147 OwnPtr<RTCPeerConnectionHandler> m_peerHandler; 141 148 }; -
trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.idl
r131172 r131372 73 73 void getStats(in [Callback] RTCStatsCallback successCallback, in [Optional=DefaultIsUndefined] MediaStreamTrack selector); 74 74 75 RTCDataChannel createDataChannel(in [TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString label, in [Optional=DefaultIsUndefined] Dictionary options) 76 raises(DOMException); 77 75 78 void close() 76 79 raises(DOMException); … … 83 86 attribute EventListener onremovestream; 84 87 attribute EventListener onicechange; 88 attribute EventListener ondatachannel; 85 89 86 90 // EventTarget interface -
trunk/Source/WebCore/WebCore.gypi
r131137 r131372 458 458 'platform/mediastream/PeerConnection00HandlerClient.h', 459 459 'platform/mediastream/RTCConfiguration.h', 460 'platform/mediastream/RTCDataChannelDescriptor.cpp', 461 'platform/mediastream/RTCDataChannelDescriptor.h', 460 462 'platform/mediastream/RTCIceCandidateDescriptor.cpp', 461 463 'platform/mediastream/RTCIceCandidateDescriptor.h', … … 868 870 'Modules/mediastream/NavigatorUserMediaSuccessCallback.idl', 869 871 'Modules/mediastream/PeerConnection00.idl', 872 'Modules/mediastream/RTCDataChannel.idl', 873 'Modules/mediastream/RTCDataChannelEvent.idl', 870 874 'Modules/mediastream/RTCErrorCallback.idl', 871 875 'Modules/mediastream/RTCIceCandidate.idl', … … 1613 1617 'Modules/mediastream/PeerConnection00.cpp', 1614 1618 'Modules/mediastream/PeerConnection00.h', 1619 'Modules/mediastream/RTCDataChannel.h', 1620 'Modules/mediastream/RTCDataChannel.cpp', 1621 'Modules/mediastream/RTCDataChannelEvent.h', 1622 'Modules/mediastream/RTCDataChannelEvent.cpp', 1615 1623 'Modules/mediastream/RTCErrorCallback.h', 1616 1624 'Modules/mediastream/RTCIceCandidate.cpp', -
trunk/Source/WebCore/dom/EventNames.h
r130307 r131372 229 229 macro(icecandidate) \ 230 230 macro(negotiationneeded) \ 231 macro(datachannel) \ 231 232 \ 232 233 macro(show) \ -
trunk/Source/WebCore/dom/EventNames.in
r127425 r131372 33 33 MediaStreamTrackEvent conditional=MEDIA_STREAM 34 34 RTCIceCandidateEvent conditional=MEDIA_STREAM 35 RTCDataChannelEvent conditional=MEDIA_STREAM 35 36 SpeechInputEvent conditional=INPUT_SPEECH 36 37 SpeechRecognitionError conditional=SCRIPTED_SPEECH -
trunk/Source/WebCore/dom/EventTargetFactory.in
r125850 r131372 27 27 PeerConnection00 conditional=MEDIA_STREAM 28 28 Performance conditional=WEB_TIMING 29 RTCDataChannel conditional=MEDIA_STREAM 29 30 RTCPeerConnection conditional=MEDIA_STREAM 30 31 SharedWorker conditional=SHARED_WORKERS -
trunk/Source/WebCore/platform/mediastream/RTCPeerConnectionHandler.cpp
r129908 r131372 62 62 virtual void getStats(PassRefPtr<RTCStatsRequest>) OVERRIDE; 63 63 virtual void stop() OVERRIDE; 64 65 // RTCDataChannel. 66 virtual bool openDataChannel(PassRefPtr<RTCDataChannelDescriptor>) OVERRIDE; 67 virtual bool sendStringData(PassRefPtr<RTCDataChannelDescriptor>, const String&) OVERRIDE; 68 virtual bool sendRawData(PassRefPtr<RTCDataChannelDescriptor>, const char*, size_t) OVERRIDE; 69 virtual void closeDataChannel(PassRefPtr<RTCDataChannelDescriptor>) OVERRIDE; 64 70 65 71 private: … … 140 146 } 141 147 148 bool RTCPeerConnectionHandlerDummy::openDataChannel(PassRefPtr<RTCDataChannelDescriptor>) 149 { 150 return false; 151 } 152 153 bool RTCPeerConnectionHandlerDummy::sendStringData(PassRefPtr<RTCDataChannelDescriptor>, const String&) 154 { 155 return false; 156 } 157 158 bool RTCPeerConnectionHandlerDummy::sendRawData(PassRefPtr<RTCDataChannelDescriptor>, const char*, size_t) 159 { 160 return false; 161 } 162 163 void RTCPeerConnectionHandlerDummy::closeDataChannel(PassRefPtr<RTCDataChannelDescriptor>) 164 { 165 } 166 142 167 } // namespace WebCore 143 168 -
trunk/Source/WebCore/platform/mediastream/RTCPeerConnectionHandler.h
r129908 r131372 42 42 class MediaConstraints; 43 43 class RTCConfiguration; 44 class RTCDataChannelDescriptor; 44 45 class RTCIceCandidateDescriptor; 45 46 class RTCPeerConnectionHandlerClient; … … 69 70 virtual void stop() = 0; 70 71 72 // RTCDataChannel. 73 virtual bool openDataChannel(PassRefPtr<RTCDataChannelDescriptor>) = 0; 74 virtual bool sendStringData(PassRefPtr<RTCDataChannelDescriptor>, const String&) = 0; 75 virtual bool sendRawData(PassRefPtr<RTCDataChannelDescriptor>, const char*, size_t) = 0; 76 virtual void closeDataChannel(PassRefPtr<RTCDataChannelDescriptor>) = 0; 77 71 78 protected: 72 79 RTCPeerConnectionHandler() { } -
trunk/Source/WebCore/platform/mediastream/RTCPeerConnectionHandlerClient.h
r128166 r131372 39 39 40 40 class MediaStreamDescriptor; 41 class RTCDataChannelDescriptor; 41 42 class RTCIceCandidateDescriptor; 42 43 … … 70 71 virtual void didAddRemoteStream(PassRefPtr<MediaStreamDescriptor>) = 0; 71 72 virtual void didRemoveRemoteStream(MediaStreamDescriptor*) = 0; 73 74 // RTCDataChannel. 75 virtual void didAddRemoteDataChannel(PassRefPtr<RTCDataChannelDescriptor>) = 0; 72 76 }; 73 77 -
trunk/Source/WebCore/platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.cpp
r130270 r131372 37 37 #include "MediaConstraints.h" 38 38 #include "RTCConfiguration.h" 39 #include "RTCDataChannelDescriptor.h" 39 40 #include "RTCIceCandidateDescriptor.h" 40 41 #include "RTCPeerConnectionHandlerClient.h" … … 213 214 } 214 215 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 215 239 } // namespace WebCore 216 240 -
trunk/Source/WebCore/platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.h
r130270 r131372 68 68 virtual void stop() OVERRIDE; 69 69 70 virtual bool openDataChannel(PassRefPtr<RTCDataChannelDescriptor>) OVERRIDE; 71 virtual bool sendStringData(PassRefPtr<RTCDataChannelDescriptor>, const String&) OVERRIDE; 72 virtual bool sendRawData(PassRefPtr<RTCDataChannelDescriptor>, const char*, size_t) OVERRIDE; 73 virtual void closeDataChannel(PassRefPtr<RTCDataChannelDescriptor>) OVERRIDE; 74 70 75 // WebKit::WebRTCPeerConnectionHandlerClient implementation. 71 76 virtual void negotiationNeeded() OVERRIDE;
Note: See TracChangeset
for help on using the changeset viewer.