WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Patch
bug-192706-20181214110240.patch (text/plain), 11.69 KB, created by
youenn fablet
on 2018-12-14 11:02:33 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
youenn fablet
Created:
2018-12-14 11:02:33 PST
Size:
11.69 KB
patch
obsolete
>Subversion Revision: 239205 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 3bb109f401b9b40f6cda88cd4db692e94d808488..f63519b5014d2695af8e0878c6f6d780b4d0308d 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,33 @@ >+2018-12-14 Youenn Fablet <youenn@apple.com> >+ >+ getSenders/getReceivers() should not return closed transceiver senders/receivers >+ https://bugs.webkit.org/show_bug.cgi?id=192706 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Updated as per https://github.com/w3c/webrtc-pc/commit/85284b76baebf9e149d194e692be16a21768a91a >+ This forces us to compute the sender/receiver list at getter call time. >+ Updated the internal call sites of senders to use the list of transceivers instead. >+ >+ Covered by updated WPT tests. >+ >+ * Modules/mediastream/RTCPeerConnection.cpp: >+ (WebCore::RTCPeerConnection::addTrack): >+ (WebCore::RTCPeerConnection::getSenders const): >+ (WebCore::RTCPeerConnection::getReceivers const): >+ * Modules/mediastream/RTCPeerConnection.h: >+ * Modules/mediastream/RTCRtpTransceiver.cpp: >+ (WebCore::RTCRtpTransceiver::stopped const): >+ (WebCore::RtpTransceiverSet::append): >+ (WebCore::RtpTransceiverSet::senders const): >+ (WebCore::RtpTransceiverSet::receivers const): >+ * Modules/mediastream/RTCRtpTransceiver.h: >+ (WebCore::RtpTransceiverSet::senders const): Deleted. >+ (WebCore::RtpTransceiverSet::receivers const): Deleted. >+ * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp: >+ (WebCore::findExistingSender): >+ (WebCore::LibWebRTCPeerConnectionBackend::addTrack): >+ > 2018-12-14 Zalan Bujtas <zalan@apple.com> > > [LFC][BFC] Introduce VerticalMargin and HorizontalMargin types. >diff --git a/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp b/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp >index 09455622d73355ae013a11ce218f27f91bf8961e..4e4f06c81422a129a4f2d3788a5a977578005486 100644 >--- a/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp >+++ b/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp >@@ -114,8 +114,8 @@ ExceptionOr<Ref<RTCRtpSender>> RTCPeerConnection::addTrack(Ref<MediaStreamTrack> > if (isClosed()) > return Exception { InvalidStateError }; > >- for (RTCRtpSender& sender : m_transceiverSet->senders()) { >- if (sender.trackId() == track->id()) >+ for (auto& transceiver : m_transceiverSet->list()) { >+ if (transceiver->sender().trackId() == track->id()) > return Exception { InvalidAccessError }; > } > >@@ -641,13 +641,13 @@ void RTCPeerConnection::generateCertificate(JSC::ExecState& state, AlgorithmIden > PeerConnectionBackend::generateCertificate(document, parameters.returnValue(), WTFMove(promise)); > } > >-const Vector<std::reference_wrapper<RTCRtpSender>>& RTCPeerConnection::getSenders() const >+Vector<std::reference_wrapper<RTCRtpSender>> RTCPeerConnection::getSenders() const > { > m_backend->collectTransceivers(); > return m_transceiverSet->senders(); > } > >-const Vector<std::reference_wrapper<RTCRtpReceiver>>& RTCPeerConnection::getReceivers() const >+Vector<std::reference_wrapper<RTCRtpReceiver>> RTCPeerConnection::getReceivers() const > { > m_backend->collectTransceivers(); > return m_transceiverSet->receivers(); >diff --git a/Source/WebCore/Modules/mediastream/RTCPeerConnection.h b/Source/WebCore/Modules/mediastream/RTCPeerConnection.h >index d671d0544fcf6bebe46c787355c797f816a8ccfc..2e13663f84e42fcfa74076d6079f0280ef859400 100644 >--- a/Source/WebCore/Modules/mediastream/RTCPeerConnection.h >+++ b/Source/WebCore/Modules/mediastream/RTCPeerConnection.h >@@ -128,11 +128,10 @@ public: > void addInternalTransceiver(Ref<RTCRtpTransceiver>&& transceiver) { m_transceiverSet->append(WTFMove(transceiver)); } > > // 5.1 RTCPeerConnection extensions >- const Vector<std::reference_wrapper<RTCRtpSender>>& getSenders() const; >- const Vector<std::reference_wrapper<RTCRtpReceiver>>& getReceivers() const; >+ Vector<std::reference_wrapper<RTCRtpSender>> getSenders() const; >+ Vector<std::reference_wrapper<RTCRtpReceiver>> getReceivers() const; > const Vector<RefPtr<RTCRtpTransceiver>>& getTransceivers() const; > >- const Vector<std::reference_wrapper<RTCRtpSender>>& currentSenders() const { return m_transceiverSet->senders(); } > const Vector<RefPtr<RTCRtpTransceiver>>& currentTransceivers() const { return m_transceiverSet->list(); } > > ExceptionOr<Ref<RTCRtpSender>> addTrack(Ref<MediaStreamTrack>&&, const Vector<std::reference_wrapper<MediaStream>>&); >diff --git a/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.cpp b/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.cpp >index a4015c331c48cddbe076e8e232cac42efd15c7d0..84bcc1ea90a1091725f46c5cb832f20a028ad8d3 100644 >--- a/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.cpp >+++ b/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.cpp >@@ -106,19 +106,38 @@ void RTCRtpTransceiver::stop() > m_backend->stop(); > } > >-void RtpTransceiverSet::append(Ref<RTCRtpTransceiver>&& transceiver) >+bool RTCRtpTransceiver::stopped() const > { >- m_senders.append(transceiver->sender()); >- m_receivers.append(transceiver->receiver()); >+ if (m_backend) >+ return m_backend->stopped(); >+ return m_stopped; >+} > >+void RtpTransceiverSet::append(Ref<RTCRtpTransceiver>&& transceiver) >+{ > m_transceivers.append(WTFMove(transceiver)); > } > >-bool RTCRtpTransceiver::stopped() const >+Vector<std::reference_wrapper<RTCRtpSender>> RtpTransceiverSet::senders() const > { >- if (m_backend) >- return m_backend->stopped(); >- return m_stopped; >+ Vector<std::reference_wrapper<RTCRtpSender>> senders; >+ for (auto& transceiver : m_transceivers) { >+ if (transceiver->stopped()) >+ continue; >+ senders.append(transceiver->sender()); >+ } >+ return senders; >+} >+ >+Vector<std::reference_wrapper<RTCRtpReceiver>> RtpTransceiverSet::receivers() const >+{ >+ Vector<std::reference_wrapper<RTCRtpReceiver>> receivers; >+ for (auto& transceiver : m_transceivers) { >+ if (transceiver->stopped()) >+ continue; >+ receivers.append(transceiver->receiver()); >+ } >+ return receivers; > } > > } // namespace WebCore >diff --git a/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.h b/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.h >index 7d1814ceeb586e335cdb3a3007ab0d4583be6783..456749452026c953f5b3f386ac88a262727eed00 100644 >--- a/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.h >+++ b/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.h >@@ -91,14 +91,11 @@ public: > const Vector<RefPtr<RTCRtpTransceiver>>& list() const { return m_transceivers; } > void append(Ref<RTCRtpTransceiver>&&); > >- const Vector<std::reference_wrapper<RTCRtpSender>>& senders() const { return m_senders; } >- const Vector<std::reference_wrapper<RTCRtpReceiver>>& receivers() const { return m_receivers; } >+ Vector<std::reference_wrapper<RTCRtpSender>> senders() const; >+ Vector<std::reference_wrapper<RTCRtpReceiver>> receivers() const; > > private: > Vector<RefPtr<RTCRtpTransceiver>> m_transceivers; >- >- Vector<std::reference_wrapper<RTCRtpSender>> m_senders; >- Vector<std::reference_wrapper<RTCRtpReceiver>> m_receivers; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp >index 0b408d1e7c29b00ddda092506e9fb98d4186079f..a78557ad8d7235f8e221fb2168bb779adfa2f757 100644 >--- a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp >+++ b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp >@@ -385,10 +385,11 @@ RefPtr<RTCSessionDescription> LibWebRTCPeerConnectionBackend::remoteDescription( > return m_endpoint->remoteDescription(); > } > >-static inline RefPtr<RTCRtpSender> findExistingSender(const Vector<std::reference_wrapper<RTCRtpSender>>& senders, LibWebRTCRtpSenderBackend& senderBackend) >+static inline RefPtr<RTCRtpSender> findExistingSender(const Vector<RefPtr<RTCRtpTransceiver>>& transceivers, LibWebRTCRtpSenderBackend& senderBackend) > { > ASSERT(senderBackend.rtcSender()); >- for (RTCRtpSender& sender : senders) { >+ for (auto& transceiver : transceivers) { >+ auto& sender = transceiver->sender(); > if (!sender.isStopped() && senderBackend.rtcSender() == backendFromRTPSender(sender).rtcSender()) > return makeRef(sender); > } >@@ -402,7 +403,7 @@ ExceptionOr<Ref<RTCRtpSender>> LibWebRTCPeerConnectionBackend::addTrack(MediaStr > if (!m_endpoint->addTrack(*senderBackend, track, mediaStreamIds)) > return Exception { TypeError, "Unable to add track"_s }; > >- if (auto sender = findExistingSender(m_peerConnection.currentSenders(), *senderBackend)) { >+ if (auto sender = findExistingSender(m_peerConnection.currentTransceivers(), *senderBackend)) { > backendFromRTPSender(*sender).takeSource(*senderBackend); > sender->setTrack(makeRef(track)); > sender->setMediaStreamIds(WTFMove(mediaStreamIds)); >diff --git a/LayoutTests/imported/w3c/ChangeLog b/LayoutTests/imported/w3c/ChangeLog >index 01c2d41247e151b14c86d6c20bc42a80a47623e2..777789b717d21f951c3d15dd719aad5971aa3c32 100644 >--- a/LayoutTests/imported/w3c/ChangeLog >+++ b/LayoutTests/imported/w3c/ChangeLog >@@ -1,3 +1,13 @@ >+2018-12-14 Youenn Fablet <youenn@apple.com> >+ >+ getSenders/getReceivers() should not return closed transceiver senders/receivers >+ https://bugs.webkit.org/show_bug.cgi?id=192706 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html: >+ * web-platform-tests/webrtc/RTCRtpTransceiver.https.html: >+ > 2018-12-13 Youenn Fablet <youenn@apple.com> > > RTCRtpTransceiver.stopped should be true when applying a remote description with the corresponding m section rejected >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html >index fd1b16e9f819d357dc478d70947497ae062a6fa3..a8056d473cd7ad3a3bdd348bc689aab756fab778 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html >@@ -257,6 +257,8 @@ > await pc1.setRemoteDescription(answer); > > assert_true(pc1.getTransceivers()[0].stopped, 'Transceiver is stopped'); >+ assert_equals(pc1.getReceivers().length, 0, 'getReceivers does not expose a receiver of a stopped transceiver'); >+ assert_equals(pc1.getSenders().length, 0, 'getSenders does not expose a sender of a stopped transceiver'); > }, 'setRemoteDescription should stop the transceiver if its corresponding m section is rejected'); > > /* >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpTransceiver.https.html b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpTransceiver.https.html >index 7d16deaa8c7633928b39e1ed638f26e820e1e8d8..27eecfc93bd810f96d0988233969265375c7903b 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpTransceiver.https.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpTransceiver.https.html >@@ -1155,6 +1155,8 @@ > stoppedTransceiver.receiver.track.onended = resolve; > }); > stoppedTransceiver.stop(); >+ assert_equals(pc1.getReceivers().length, 0, 'getReceivers does not expose a receiver of a stopped transceiver'); >+ assert_equals(pc1.getSenders().length, 0, 'getSenders does not expose a sender of a stopped transceiver'); > > await onended; >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 192706
: 357324