Title: [215321] trunk
Revision
215321
Author
[email protected]
Date
2017-04-13 09:38:58 -0700 (Thu, 13 Apr 2017)

Log Message

onnegotiationneeded should only be called once
https://bugs.webkit.org/show_bug.cgi?id=170785

Patch by Youenn Fablet <[email protected]> on 2017-04-13
Reviewed by Alex Christensen.

Source/WebCore:

Covered by updated test.

Disabling explicit call to markAsNeedingNegotiation in case libwebrtc is used as libwebrtc is calling it.
Making sure removeTrack gets notified up to libwebrtc.

* Modules/mediastream/PeerConnectionBackend.h:
(WebCore::PeerConnectionBackend::notifyRemovedTrack):
* Modules/mediastream/RTCPeerConnection.cpp:
(WebCore::RTCPeerConnection::addTrack):
(WebCore::RTCPeerConnection::removeTrack):
(WebCore::RTCPeerConnection::completeAddTransceiver):
* Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
(WebCore::LibWebRTCMediaEndpoint::removeTrack):
* Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
* Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
(WebCore::LibWebRTCPeerConnectionBackend::notifyRemovedTrack):
* Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:

LayoutTests:

* webrtc/negotiatedneeded-event-addStream.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (215320 => 215321)


--- trunk/LayoutTests/ChangeLog	2017-04-13 16:37:00 UTC (rev 215320)
+++ trunk/LayoutTests/ChangeLog	2017-04-13 16:38:58 UTC (rev 215321)
@@ -1,3 +1,12 @@
+2017-04-13  Youenn Fablet  <[email protected]>
+
+        onnegotiationneeded should only be called once
+        https://bugs.webkit.org/show_bug.cgi?id=170785
+
+        Reviewed by Alex Christensen.
+
+        * webrtc/negotiatedneeded-event-addStream.html:
+
 2017-04-13  Dave Hyatt  <[email protected]>
 
         Rendering flexbox children across columns

Modified: trunk/LayoutTests/webrtc/negotiatedneeded-event-addStream.html (215320 => 215321)


--- trunk/LayoutTests/webrtc/negotiatedneeded-event-addStream.html	2017-04-13 16:37:00 UTC (rev 215320)
+++ trunk/LayoutTests/webrtc/negotiatedneeded-event-addStream.html	2017-04-13 16:38:58 UTC (rev 215321)
@@ -19,7 +19,11 @@
     return navigator.mediaDevices.getUserMedia({ video: true}).then((stream) => {
         return new Promise((resolve, reject) => {
             var pc = new RTCPeerConnection();
-            pc._onnegotiationneeded_ = () => { resolve(); };
+            var count = 0;
+            pc._onnegotiationneeded_ = () => {
+                assert_equals(count++, 0, "Should only be called once");
+                setTimeout(resolve, 500);
+            };
             pc.addTrack(stream.getVideoTracks()[0], stream);
         });
     });

Modified: trunk/Source/WebCore/ChangeLog (215320 => 215321)


--- trunk/Source/WebCore/ChangeLog	2017-04-13 16:37:00 UTC (rev 215320)
+++ trunk/Source/WebCore/ChangeLog	2017-04-13 16:38:58 UTC (rev 215321)
@@ -1,3 +1,28 @@
+2017-04-13  Youenn Fablet  <[email protected]>
+
+        onnegotiationneeded should only be called once
+        https://bugs.webkit.org/show_bug.cgi?id=170785
+
+        Reviewed by Alex Christensen.
+
+        Covered by updated test.
+
+        Disabling explicit call to markAsNeedingNegotiation in case libwebrtc is used as libwebrtc is calling it.
+        Making sure removeTrack gets notified up to libwebrtc.
+
+        * Modules/mediastream/PeerConnectionBackend.h:
+        (WebCore::PeerConnectionBackend::notifyRemovedTrack):
+        * Modules/mediastream/RTCPeerConnection.cpp:
+        (WebCore::RTCPeerConnection::addTrack):
+        (WebCore::RTCPeerConnection::removeTrack):
+        (WebCore::RTCPeerConnection::completeAddTransceiver):
+        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
+        (WebCore::LibWebRTCMediaEndpoint::removeTrack):
+        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
+        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
+        (WebCore::LibWebRTCPeerConnectionBackend::notifyRemovedTrack):
+        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
+
 2017-04-13  Dave Hyatt  <[email protected]>
 
         Rendering flexbox children across columns

Modified: trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h (215320 => 215321)


--- trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h	2017-04-13 16:37:00 UTC (rev 215320)
+++ trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h	2017-04-13 16:38:58 UTC (rev 215321)
@@ -96,6 +96,7 @@
     virtual Ref<RTCRtpReceiver> createReceiver(const String& transceiverMid, const String& trackKind, const String& trackId) = 0;
     virtual void replaceTrack(RTCRtpSender&, Ref<MediaStreamTrack>&&, DOMPromise<void>&&) = 0;
     virtual void notifyAddedTrack(RTCRtpSender&) { }
+    virtual void notifyRemovedTrack(RTCRtpSender&) { }
 
     virtual RTCRtpParameters getParameters(RTCRtpSender&) const { return { }; }
 

Modified: trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp (215320 => 215321)


--- trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp	2017-04-13 16:37:00 UTC (rev 215320)
+++ trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp	2017-04-13 16:38:58 UTC (rev 215321)
@@ -148,7 +148,9 @@
         m_transceiverSet->append(WTFMove(transceiver));
     }
 
+#if !USE(LIBWEBRTC)
     m_backend->markAsNeedingNegotiation();
+#endif
 
     m_backend->notifyAddedTrack(*sender);
     return Ref<RTCRtpSender> { *sender };
@@ -171,7 +173,10 @@
 
     sender.stop();
 
+    m_backend->notifyRemovedTrack(sender);
+#if !USE(LIBWEBRTC)
     m_backend->markAsNeedingNegotiation();
+#endif
     return { };
 }
 
@@ -203,8 +208,9 @@
     transceiver->setDirection(init.direction);
 
     m_transceiverSet->append(transceiver.copyRef());
+#if !USE(LIBWEBRTC)
     m_backend->markAsNeedingNegotiation();
-
+#endif
     return transceiver;
 }
 

Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp (215320 => 215321)


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp	2017-04-13 16:37:00 UTC (rev 215320)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp	2017-04-13 16:38:58 UTC (rev 215321)
@@ -193,6 +193,14 @@
     }
 }
 
+void LibWebRTCMediaEndpoint::removeTrack(RTCRtpSender& sender)
+{
+    auto rtcSender = m_senders.get(&sender);
+    if (!rtcSender)
+        return;
+    m_backend->RemoveTrack(rtcSender.get());
+}
+
 void LibWebRTCMediaEndpoint::doCreateOffer()
 {
     m_isInitiator = true;

Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h (215320 => 215321)


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h	2017-04-13 16:37:00 UTC (rev 215320)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h	2017-04-13 16:38:58 UTC (rev 215321)
@@ -81,6 +81,7 @@
     RefPtr<RTCSessionDescription> pendingRemoteDescription() const;
 
     void addTrack(RTCRtpSender&, MediaStreamTrack&, const Vector<String>&);
+    void removeTrack(RTCRtpSender&);
     RTCRtpParameters getRTCRtpSenderParameters(RTCRtpSender&);
 
 private:

Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp (215320 => 215321)


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp	2017-04-13 16:37:00 UTC (rev 215320)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp	2017-04-13 16:38:58 UTC (rev 215321)
@@ -311,6 +311,11 @@
     m_endpoint->addTrack(sender, *sender.track(), sender.mediaStreamIds());
 }
 
+void LibWebRTCPeerConnectionBackend::notifyRemovedTrack(RTCRtpSender& sender)
+{
+    m_endpoint->removeTrack(sender);
+}
+
 void LibWebRTCPeerConnectionBackend::removeRemoteStream(MediaStream* mediaStream)
 {
     m_remoteStreams.removeFirstMatching([mediaStream](const auto& item) {

Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h (215320 => 215321)


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h	2017-04-13 16:37:00 UTC (rev 215320)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h	2017-04-13 16:38:58 UTC (rev 215321)
@@ -87,6 +87,7 @@
     void addRemoteStream(Ref<MediaStream>&&);
 
     void notifyAddedTrack(RTCRtpSender&) final;
+    void notifyRemovedTrack(RTCRtpSender&) final;
 
     struct VideoReceiver {
         Ref<RTCRtpReceiver> receiver;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to