Changeset 202048 in webkit
- Timestamp:
- Jun 14, 2016 9:41:18 AM (8 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r202043 r202048 1 2016-06-14 Adam Bergkvist <adam.bergkvist@ericsson.com> 2 3 WebRTC: Imlement MediaEndpointPeerConnection::addIceCandidate() 4 https://bugs.webkit.org/show_bug.cgi?id=158690 5 6 Reviewed by Eric Carlson. 7 8 Add test for RTCPeerConnection.addIceCandidate() that verifies: 9 - Candidate line parsing 10 - That a underlying media description can be identified using either sdpMid or sdpMLineIndex 11 - That sdpMid takes precedence over sdpMLineIndex 12 13 * fast/mediastream/RTCPeerConnection-addIceCandidate-expected.txt: Added. 14 * fast/mediastream/RTCPeerConnection-addIceCandidate.html: Added. 15 * platform/mac/TestExpectations: 16 The mac port is not building with WEB_RTC yet. 17 1 18 2016-06-14 Adam Bergkvist <adam.bergkvist@ericsson.com> 2 19 -
trunk/LayoutTests/platform/mac/TestExpectations
r202043 r202048 176 176 fast/mediastream/RTCPeerConnection-have-remote-pranswer.html 177 177 fast/mediastream/RTCPeerConnection-ice.html 178 fast/mediastream/RTCPeerConnection-addIceCandidate.html 178 179 fast/mediastream/RTCPeerConnection-localDescription.html 179 180 fast/mediastream/RTCPeerConnection-onnegotiationneeded.html -
trunk/Source/WebCore/ChangeLog
r202044 r202048 1 2016-06-14 Adam Bergkvist <adam.bergkvist@ericsson.com> 2 3 WebRTC: Imlement MediaEndpointPeerConnection::addIceCandidate() 4 https://bugs.webkit.org/show_bug.cgi?id=158690 5 6 Reviewed by Eric Carlson. 7 8 Implement MediaEndpointPeerConnection::addIceCandidate() that is the MediaEndpoint 9 implementation of RTCPeerConnection.addIceCandidate() [1]. 10 11 [1] https://w3c.github.io/webrtc-pc/archives/20160513/webrtc.html#dom-peerconnection-addicecandidate 12 13 Test: fast/mediastream/RTCPeerConnection-addIceCandidate.html 14 15 * Modules/mediastream/MediaEndpointPeerConnection.cpp: 16 (WebCore::MediaEndpointPeerConnection::addIceCandidate): 17 (WebCore::MediaEndpointPeerConnection::addIceCandidateTask): 18 Implemented. 19 * Modules/mediastream/MediaEndpointPeerConnection.h: 20 * platform/mediastream/MediaEndpoint.h: 21 Use mid instead of mdescIndex to identify the target media description in the backend. 22 * platform/mock/MockMediaEndpoint.cpp: 23 Update mock method signature accordingly. 24 (WebCore::MockMediaEndpoint::addRemoteCandidate): 25 * platform/mock/MockMediaEndpoint.h: 26 1 27 2016-06-14 Zalan Bujtas <zalan@apple.com> 2 28 -
trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.cpp
r202026 r202048 39 39 #include "MediaStreamTrack.h" 40 40 #include "PeerMediaDescription.h" 41 #include "RTCIceCandidate.h" 41 42 #include "RTCOfferAnswerOptions.h" 42 43 #include "RTCRtpTransceiver.h" … … 600 601 void MediaEndpointPeerConnection::addIceCandidate(RTCIceCandidate& rtcCandidate, PeerConnection::VoidPromise&& promise) 601 602 { 602 UNUSED_PARAM(rtcCandidate); 603 604 notImplemented(); 605 606 promise.reject(NOT_SUPPORTED_ERR); 603 runTask([this, protectedCandidate = RefPtr<RTCIceCandidate>(&rtcCandidate), protectedPromise = WTFMove(promise)]() mutable { 604 addIceCandidateTask(*protectedCandidate, protectedPromise); 605 }); 606 } 607 608 void MediaEndpointPeerConnection::addIceCandidateTask(RTCIceCandidate& rtcCandidate, PeerConnection::VoidPromise& promise) 609 { 610 if (m_client->internalSignalingState() == SignalingState::Closed) 611 return; 612 613 if (!internalRemoteDescription()) { 614 promise.reject(INVALID_STATE_ERR, "No remote description set"); 615 return; 616 } 617 618 const MediaDescriptionVector& remoteMediaDescriptions = internalRemoteDescription()->configuration()->mediaDescriptions(); 619 PeerMediaDescription* targetMediaDescription = nullptr; 620 621 // When identifying the target media description, sdpMid takes precedence over sdpMLineIndex 622 // if both are present. 623 if (!rtcCandidate.sdpMid().isNull()) { 624 const String& mid = rtcCandidate.sdpMid(); 625 for (auto& description : remoteMediaDescriptions) { 626 if (description->mid() == mid) { 627 targetMediaDescription = description.get(); 628 break; 629 } 630 } 631 632 if (!targetMediaDescription) { 633 promise.reject(OperationError, "sdpMid did not match any media description"); 634 return; 635 } 636 } else if (rtcCandidate.sdpMLineIndex()) { 637 unsigned short sdpMLineIndex = rtcCandidate.sdpMLineIndex().value(); 638 if (sdpMLineIndex >= remoteMediaDescriptions.size()) { 639 promise.reject(OperationError, "sdpMLineIndex is out of range"); 640 return; 641 } 642 targetMediaDescription = remoteMediaDescriptions[sdpMLineIndex].get(); 643 } else { 644 ASSERT_NOT_REACHED(); 645 return; 646 } 647 648 RefPtr<IceCandidate> candidate; 649 SDPProcessor::Result result = m_sdpProcessor->parseCandidateLine(rtcCandidate.candidate(), candidate); 650 if (result != SDPProcessor::Result::Success) { 651 if (result == SDPProcessor::Result::ParseError) 652 promise.reject(OperationError, "Invalid candidate content"); 653 else 654 LOG_ERROR("SDPProcessor internal error"); 655 return; 656 } 657 658 targetMediaDescription->addIceCandidate(candidate.copyRef()); 659 660 m_mediaEndpoint->addRemoteCandidate(*candidate, targetMediaDescription->mid(), targetMediaDescription->iceUfrag(), 661 targetMediaDescription->icePassword()); 662 663 promise.resolve(nullptr); 607 664 } 608 665 -
trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.h
r202026 r202048 93 93 void setRemoteDescriptionTask(RefPtr<RTCSessionDescription>&&, PeerConnection::VoidPromise&); 94 94 95 void addIceCandidateTask(RTCIceCandidate&, PeerConnection::VoidPromise&); 96 95 97 void replaceTrackTask(RTCRtpSender&, const String& mid, RefPtr<MediaStreamTrack>&&, PeerConnection::VoidPromise&); 96 98 -
trunk/Source/WebCore/platform/mediastream/MediaEndpoint.h
r202026 r202048 81 81 virtual UpdateResult updateSendConfiguration(MediaEndpointSessionConfiguration*, const RealtimeMediaSourceMap&, bool isInitiator) = 0; 82 82 83 virtual void addRemoteCandidate(IceCandidate&, unsigned mdescIndex, const String& ufrag, const String& password) = 0;83 virtual void addRemoteCandidate(IceCandidate&, const String& mid, const String& ufrag, const String& password) = 0; 84 84 85 85 virtual Ref<RealtimeMediaSource> createMutedRemoteSource(const String& mid, RealtimeMediaSource::Type) = 0; -
trunk/Source/WebCore/platform/mock/MockMediaEndpoint.cpp
r202026 r202048 174 174 } 175 175 176 void MockMediaEndpoint::addRemoteCandidate(IceCandidate& candidate, unsigned mdescIndex, const String& ufrag, const String& password)176 void MockMediaEndpoint::addRemoteCandidate(IceCandidate& candidate, const String& mid, const String& ufrag, const String& password) 177 177 { 178 178 UNUSED_PARAM(candidate); 179 UNUSED_PARAM(m descIndex);179 UNUSED_PARAM(mid); 180 180 UNUSED_PARAM(ufrag); 181 181 UNUSED_PARAM(password); -
trunk/Source/WebCore/platform/mock/MockMediaEndpoint.h
r202026 r202048 55 55 UpdateResult updateSendConfiguration(MediaEndpointSessionConfiguration*, const RealtimeMediaSourceMap&, bool isInitiator) override; 56 56 57 void addRemoteCandidate(IceCandidate&, unsigned mdescIndex, const String& ufrag, const String& password) override;57 void addRemoteCandidate(IceCandidate&, const String& mid, const String& ufrag, const String& password) override; 58 58 59 59 Ref<RealtimeMediaSource> createMutedRemoteSource(const String& mid, RealtimeMediaSource::Type) override;
Note: See TracChangeset
for help on using the changeset viewer.