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;