Changeset 239238 in webkit
- Timestamp:
- Dec 14, 2018 3:52:40 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/imported/w3c/ChangeLog
r239192 r239238 1 2018-12-14 Youenn Fablet <youenn@apple.com> 2 3 getSenders/getReceivers() should not return closed transceiver senders/receivers 4 https://bugs.webkit.org/show_bug.cgi?id=192706 5 6 Reviewed by Eric Carlson. 7 8 * web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html: 9 * web-platform-tests/webrtc/RTCRtpTransceiver.https.html: 10 1 11 2018-12-13 Youenn Fablet <youenn@apple.com> 2 12 -
trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html
r239192 r239238 258 258 259 259 assert_true(pc1.getTransceivers()[0].stopped, 'Transceiver is stopped'); 260 assert_equals(pc1.getReceivers().length, 0, 'getReceivers does not expose a receiver of a stopped transceiver'); 261 assert_equals(pc1.getSenders().length, 0, 'getSenders does not expose a sender of a stopped transceiver'); 260 262 }, 'setRemoteDescription should stop the transceiver if its corresponding m section is rejected'); 261 263 -
trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpTransceiver.https.html
r238136 r239238 1156 1156 }); 1157 1157 stoppedTransceiver.stop(); 1158 assert_equals(pc1.getReceivers().length, 0, 'getReceivers does not expose a receiver of a stopped transceiver'); 1159 assert_equals(pc1.getSenders().length, 0, 'getSenders does not expose a sender of a stopped transceiver'); 1158 1160 1159 1161 await onended; -
trunk/Source/WebCore/ChangeLog
r239237 r239238 1 2018-12-14 Youenn Fablet <youenn@apple.com> 2 3 getSenders/getReceivers() should not return closed transceiver senders/receivers 4 https://bugs.webkit.org/show_bug.cgi?id=192706 5 6 Reviewed by Eric Carlson. 7 8 Updated as per https://github.com/w3c/webrtc-pc/commit/85284b76baebf9e149d194e692be16a21768a91a 9 This forces us to compute the sender/receiver list at getter call time. 10 Updated the internal call sites of senders to use the list of transceivers instead. 11 12 Covered by updated WPT tests. 13 14 * Modules/mediastream/RTCPeerConnection.cpp: 15 (WebCore::RTCPeerConnection::addTrack): 16 (WebCore::RTCPeerConnection::getSenders const): 17 (WebCore::RTCPeerConnection::getReceivers const): 18 * Modules/mediastream/RTCPeerConnection.h: 19 * Modules/mediastream/RTCRtpTransceiver.cpp: 20 (WebCore::RTCRtpTransceiver::stopped const): 21 (WebCore::RtpTransceiverSet::append): 22 (WebCore::RtpTransceiverSet::senders const): 23 (WebCore::RtpTransceiverSet::receivers const): 24 * Modules/mediastream/RTCRtpTransceiver.h: 25 (WebCore::RtpTransceiverSet::senders const): Deleted. 26 (WebCore::RtpTransceiverSet::receivers const): Deleted. 27 * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp: 28 (WebCore::findExistingSender): 29 (WebCore::LibWebRTCPeerConnectionBackend::addTrack): 30 1 31 2018-12-14 David Kilzer <ddkilzer@apple.com> 2 32 -
trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp
r238232 r239238 115 115 return Exception { InvalidStateError }; 116 116 117 for ( RTCRtpSender& sender : m_transceiverSet->senders()) {118 if ( sender.trackId() == track->id())117 for (auto& transceiver : m_transceiverSet->list()) { 118 if (transceiver->sender().trackId() == track->id()) 119 119 return Exception { InvalidAccessError }; 120 120 } … … 642 642 } 643 643 644 const Vector<std::reference_wrapper<RTCRtpSender>>&RTCPeerConnection::getSenders() const644 Vector<std::reference_wrapper<RTCRtpSender>> RTCPeerConnection::getSenders() const 645 645 { 646 646 m_backend->collectTransceivers(); … … 648 648 } 649 649 650 const Vector<std::reference_wrapper<RTCRtpReceiver>>&RTCPeerConnection::getReceivers() const650 Vector<std::reference_wrapper<RTCRtpReceiver>> RTCPeerConnection::getReceivers() const 651 651 { 652 652 m_backend->collectTransceivers(); -
trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.h
r238232 r239238 129 129 130 130 // 5.1 RTCPeerConnection extensions 131 const Vector<std::reference_wrapper<RTCRtpSender>>&getSenders() const;132 const Vector<std::reference_wrapper<RTCRtpReceiver>>&getReceivers() const;131 Vector<std::reference_wrapper<RTCRtpSender>> getSenders() const; 132 Vector<std::reference_wrapper<RTCRtpReceiver>> getReceivers() const; 133 133 const Vector<RefPtr<RTCRtpTransceiver>>& getTransceivers() const; 134 134 135 const Vector<std::reference_wrapper<RTCRtpSender>>& currentSenders() const { return m_transceiverSet->senders(); }136 135 const Vector<RefPtr<RTCRtpTransceiver>>& currentTransceivers() const { return m_transceiverSet->list(); } 137 136 -
trunk/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.cpp
r239192 r239238 107 107 } 108 108 109 void RtpTransceiverSet::append(Ref<RTCRtpTransceiver>&& transceiver)110 {111 m_senders.append(transceiver->sender());112 m_receivers.append(transceiver->receiver());113 114 m_transceivers.append(WTFMove(transceiver));115 }116 117 109 bool RTCRtpTransceiver::stopped() const 118 110 { … … 122 114 } 123 115 116 void RtpTransceiverSet::append(Ref<RTCRtpTransceiver>&& transceiver) 117 { 118 m_transceivers.append(WTFMove(transceiver)); 119 } 120 121 Vector<std::reference_wrapper<RTCRtpSender>> RtpTransceiverSet::senders() const 122 { 123 Vector<std::reference_wrapper<RTCRtpSender>> senders; 124 for (auto& transceiver : m_transceivers) { 125 if (transceiver->stopped()) 126 continue; 127 senders.append(transceiver->sender()); 128 } 129 return senders; 130 } 131 132 Vector<std::reference_wrapper<RTCRtpReceiver>> RtpTransceiverSet::receivers() const 133 { 134 Vector<std::reference_wrapper<RTCRtpReceiver>> receivers; 135 for (auto& transceiver : m_transceivers) { 136 if (transceiver->stopped()) 137 continue; 138 receivers.append(transceiver->receiver()); 139 } 140 return receivers; 141 } 142 124 143 } // namespace WebCore 125 144 -
trunk/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.h
r239192 r239238 92 92 void append(Ref<RTCRtpTransceiver>&&); 93 93 94 const Vector<std::reference_wrapper<RTCRtpSender>>& senders() const { return m_senders; }95 const Vector<std::reference_wrapper<RTCRtpReceiver>>& receivers() const { return m_receivers; }94 Vector<std::reference_wrapper<RTCRtpSender>> senders() const; 95 Vector<std::reference_wrapper<RTCRtpReceiver>> receivers() const; 96 96 97 97 private: 98 98 Vector<RefPtr<RTCRtpTransceiver>> m_transceivers; 99 100 Vector<std::reference_wrapper<RTCRtpSender>> m_senders;101 Vector<std::reference_wrapper<RTCRtpReceiver>> m_receivers;102 99 }; 103 100 -
trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp
r238845 r239238 386 386 } 387 387 388 static inline RefPtr<RTCRtpSender> findExistingSender(const Vector< std::reference_wrapper<RTCRtpSender>>& senders, LibWebRTCRtpSenderBackend& senderBackend)388 static inline RefPtr<RTCRtpSender> findExistingSender(const Vector<RefPtr<RTCRtpTransceiver>>& transceivers, LibWebRTCRtpSenderBackend& senderBackend) 389 389 { 390 390 ASSERT(senderBackend.rtcSender()); 391 for (RTCRtpSender& sender : senders) { 391 for (auto& transceiver : transceivers) { 392 auto& sender = transceiver->sender(); 392 393 if (!sender.isStopped() && senderBackend.rtcSender() == backendFromRTPSender(sender).rtcSender()) 393 394 return makeRef(sender); … … 403 404 return Exception { TypeError, "Unable to add track"_s }; 404 405 405 if (auto sender = findExistingSender(m_peerConnection.current Senders(), *senderBackend)) {406 if (auto sender = findExistingSender(m_peerConnection.currentTransceivers(), *senderBackend)) { 406 407 backendFromRTPSender(*sender).takeSource(*senderBackend); 407 408 sender->setTrack(makeRef(track));
Note: See TracChangeset
for help on using the changeset viewer.