WebKit Bugzilla
Attachment 348024 Details for
Bug 188914
: libwebrtc PeerConnection::AddTrack sometimes fail
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-188914-20180824111616.patch (text/plain), 12.07 KB, created by
youenn fablet
on 2018-08-24 11:16:16 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
youenn fablet
Created:
2018-08-24 11:16:16 PDT
Size:
12.07 KB
patch
obsolete
>Subversion Revision: 235230 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 0ac8113ae4708d1afa6c55e0e9a5cd6bc8bb351e..42e8916483221c2c34e5e579012bf0d7d7cddd14 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,27 @@ >+2018-08-24 Youenn Fablet <youenn@apple.com> >+ >+ libwebrtc PeerConnection::AddTrack sometimes fail >+ https://bugs.webkit.org/show_bug.cgi?id=188914 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ AddTrack may fail so test the result and if not successful, make JS addTrack to throw an exception. >+ This makes some tests to fail now. >+ These tests should pass again when unified plan will be enabled. >+ Covered by rebased tests. >+ >+ * Modules/mediastream/PeerConnectionBackend.h: >+ (WebCore::PeerConnectionBackend::notifyAddedTrack): >+ * Modules/mediastream/RTCPeerConnection.cpp: >+ (WebCore::RTCPeerConnection::addTrack): >+ (WebCore::RTCPeerConnection::addTransceiver): >+ * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp: >+ (WebCore::LibWebRTCMediaEndpoint::addTrack): >+ * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h: >+ * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp: >+ (WebCore::LibWebRTCPeerConnectionBackend::notifyAddedTrack): >+ * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h: >+ > 2018-08-24 Youenn Fablet <youenn@apple.com> > > Various IndexDB tests abandon documents >diff --git a/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h b/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h >index 29da984376f16f537d3f067b669131c3b4a3ce67..3a660118e8faf4f5d51359380dfc28c4c8fab7b0 100644 >--- a/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h >+++ b/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h >@@ -102,7 +102,7 @@ public: > > virtual Ref<RTCRtpReceiver> createReceiver(const String& transceiverMid, const String& trackKind, const String& trackId) = 0; > virtual void replaceTrack(RTCRtpSender&, RefPtr<MediaStreamTrack>&&, DOMPromiseDeferred<void>&&) = 0; >- virtual void notifyAddedTrack(RTCRtpSender&) { } >+ virtual bool notifyAddedTrack(RTCRtpSender&) { return false; } > virtual void notifyRemovedTrack(RTCRtpSender&) { } > > virtual RTCRtpParameters getParameters(RTCRtpSender&) const { return { }; } >diff --git a/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp b/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp >index 225edfadc96df0dad7904e36aaad69909aa24ae3..a04f81e1fb12727cffbd508918b23c760a22baef 100644 >--- a/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp >+++ b/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp >@@ -154,7 +154,9 @@ ExceptionOr<Ref<RTCRtpSender>> RTCPeerConnection::addTrack(Ref<MediaStreamTrack> > m_transceiverSet->append(WTFMove(transceiver)); > } > >- m_backend->notifyAddedTrack(*sender); >+ if (!m_backend->notifyAddedTrack(*sender)) >+ return Exception { InvalidAccessError, "Unable to add track"_s }; >+ > return Ref<RTCRtpSender> { *sender }; > } > >@@ -199,7 +201,9 @@ ExceptionOr<Ref<RTCRtpTransceiver>> RTCPeerConnection::addTransceiver(AddTransce > const String& trackKind = track->kind(); > > auto sender = RTCRtpSender::create(WTFMove(track), Vector<String>(), *this); >- m_backend->notifyAddedTrack(sender); >+ if (!m_backend->notifyAddedTrack(sender)) >+ return Exception { InvalidAccessError, "Unable to add track"_s }; >+ > return completeAddTransceiver(WTFMove(sender), init, trackId, trackKind); > } > >diff --git a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp >index 743d18f0cb5b13e2288f21208bbbbd2df4492803..8b35f6557fe18cfcb6bbb3ccbc79c547b7d630e2 100644 >--- a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp >+++ b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp >@@ -193,7 +193,7 @@ void LibWebRTCMediaEndpoint::doSetRemoteDescription(RTCSessionDescription& descr > startLoggingStats(); > } > >-void LibWebRTCMediaEndpoint::addTrack(RTCRtpSender& sender, MediaStreamTrack& track, const Vector<String>& mediaStreamIds) >+bool LibWebRTCMediaEndpoint::addTrack(RTCRtpSender& sender, MediaStreamTrack& track, const Vector<String>& mediaStreamIds) > { > ASSERT(m_backend); > >@@ -214,19 +214,24 @@ void LibWebRTCMediaEndpoint::addTrack(RTCRtpSender& sender, MediaStreamTrack& tr > auto trackSource = RealtimeOutgoingAudioSource::create(track.privateTrack()); > auto audioTrack = m_peerConnectionFactory.CreateAudioTrack(track.id().utf8().data(), trackSource.ptr()); > m_peerConnectionBackend.addAudioSource(WTFMove(trackSource)); >- m_senders.add(&sender, m_backend->AddTrack(audioTrack.get(), WTFMove(ids)).MoveValue()); >- return; >+ auto rtpSender = m_backend->AddTrack(audioTrack.get(), WTFMove(ids)); >+ if (rtpSender.ok()) >+ m_senders.add(&sender, rtpSender.MoveValue()); >+ return rtpSender.ok(); > } > case RealtimeMediaSource::Type::Video: { > auto videoSource = RealtimeOutgoingVideoSource::create(track.privateTrack()); > auto videoTrack = m_peerConnectionFactory.CreateVideoTrack(track.id().utf8().data(), videoSource.ptr()); > m_peerConnectionBackend.addVideoSource(WTFMove(videoSource)); >- m_senders.add(&sender, m_backend->AddTrack(videoTrack.get(), WTFMove(ids)).MoveValue()); >- return; >+ auto rtpSender = m_backend->AddTrack(videoTrack.get(), WTFMove(ids)); >+ if (rtpSender.ok()) >+ m_senders.add(&sender, rtpSender.MoveValue()); >+ return rtpSender.ok(); > } > case RealtimeMediaSource::Type::None: > ASSERT_NOT_REACHED(); > } >+ return false; > } > > void LibWebRTCMediaEndpoint::removeTrack(RTCRtpSender& sender) >diff --git a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h >index d409a1b23dd7fed899cad16ca6b292a4c60f498e..30a2a8ba36bfe58b482a5ed52d8c39ca9c3b2af9 100644 >--- a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h >+++ b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h >@@ -96,7 +96,7 @@ public: > RefPtr<RTCSessionDescription> pendingLocalDescription() const; > RefPtr<RTCSessionDescription> pendingRemoteDescription() const; > >- void addTrack(RTCRtpSender&, MediaStreamTrack&, const Vector<String>&); >+ bool addTrack(RTCRtpSender&, MediaStreamTrack&, const Vector<String>&); > void removeTrack(RTCRtpSender&); > RTCRtpParameters getRTCRtpSenderParameters(RTCRtpSender&); > >diff --git a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp >index 327bc88fe854598f26de8f9690496912d9ba52ac..b811497dd2db20ca4824be46a439bb92dfcfe020 100644 >--- a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp >+++ b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp >@@ -349,10 +349,10 @@ RefPtr<RTCSessionDescription> LibWebRTCPeerConnectionBackend::remoteDescription( > return m_endpoint->remoteDescription(); > } > >-void LibWebRTCPeerConnectionBackend::notifyAddedTrack(RTCRtpSender& sender) >+bool LibWebRTCPeerConnectionBackend::notifyAddedTrack(RTCRtpSender& sender) > { > ASSERT(sender.track()); >- m_endpoint->addTrack(sender, *sender.track(), sender.mediaStreamIds()); >+ return m_endpoint->addTrack(sender, *sender.track(), sender.mediaStreamIds()); > } > > void LibWebRTCPeerConnectionBackend::notifyRemovedTrack(RTCRtpSender& sender) >diff --git a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h >index d5e826f8bb5d16ec3da14f2ba4589fcb057d2d4b..1745b24d1ec703649fedce0737148b035b224e88 100644 >--- a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h >+++ b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h >@@ -92,7 +92,7 @@ private: > void removeRemoteStream(MediaStream*); > void addRemoteStream(Ref<MediaStream>&&); > >- void notifyAddedTrack(RTCRtpSender&) final; >+ bool notifyAddedTrack(RTCRtpSender&) final; > void notifyRemovedTrack(RTCRtpSender&) final; > > struct VideoReceiver { >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index 1d55be0f56674eefae848c7cabad3118a18a5815..04602b232b1274ec940380cb5131270dcc7d5eb4 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,12 @@ >+2018-08-24 Youenn Fablet <youenn@apple.com> >+ >+ libwebrtc PeerConnection::AddTrack sometimes fail >+ https://bugs.webkit.org/show_bug.cgi?id=188914 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * fast/mediastream/RTCPeerConnection-add-removeTrack-expected.txt: >+ > 2018-08-24 Youenn Fablet <youenn@apple.com> > > Various IndexDB tests abandon documents >diff --git a/LayoutTests/imported/w3c/ChangeLog b/LayoutTests/imported/w3c/ChangeLog >index 7e70bc0ac1e6b89173cfc8c34c36881d47971036..cc94072830d5bc303672daa7324992c0919a1e1b 100644 >--- a/LayoutTests/imported/w3c/ChangeLog >+++ b/LayoutTests/imported/w3c/ChangeLog >@@ -1,3 +1,12 @@ >+2018-08-24 Youenn Fablet <youenn@apple.com> >+ >+ libwebrtc PeerConnection::AddTrack sometimes fail >+ https://bugs.webkit.org/show_bug.cgi?id=188914 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * web-platform-tests/webrtc/RTCPeerConnection-addTrack.https-expected.txt: >+ > 2018-08-23 Youenn Fablet <youenn@apple.com> > > Update libwebrtc up to 984f1a80c0 >diff --git a/LayoutTests/fast/mediastream/RTCPeerConnection-add-removeTrack-expected.txt b/LayoutTests/fast/mediastream/RTCPeerConnection-add-removeTrack-expected.txt >index d81f83330a233d7b7360efc1b9e2f9e6cc3367c4..89bcf5203409ee1ecc6ce961918332765fc4d761 100644 >--- a/LayoutTests/fast/mediastream/RTCPeerConnection-add-removeTrack-expected.txt >+++ b/LayoutTests/fast/mediastream/RTCPeerConnection-add-removeTrack-expected.txt >@@ -33,10 +33,10 @@ PASS transceiver.receiver is receiver > PASS transceiver.stopped is false > Try to add same track again > PASS sender = pc.addTrack(track, stream) threw exception InvalidAccessError: The object does not support the operation or argument.. >-PASS sender2 = pc.addTrack(track2, stream, stream2) did not throw exception. >+FAIL sender2 = pc.addTrack(track2, stream, stream2) should not throw exception. Threw exception InvalidAccessError: Unable to add track. > PASS pc.getSenders().length is 2 > PASS pc.getSenders()[0] is sender >-PASS pc.getSenders()[1] is sender2 >+FAIL pc.getSenders()[1] should be undefined (of type undefined). Was [object RTCRtpSender] (of type object). > PASS pc.removeTrack(sender) did not throw exception. > Sender is still in getSenders() list > PASS pc.getSenders().length is 2 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-addTrack.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-addTrack.https-expected.txt >index 78565279eb53ebda2af9176227842185b4760859..78a29d490eb3a616f0e8aec2c00b4aaa7b8aa635 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-addTrack.https-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-addTrack.https-expected.txt >@@ -2,7 +2,7 @@ > PASS addTrack when pc is closed should throw InvalidStateError > PASS addTrack with single track argument and no mediaStream should succeed > PASS addTrack with single track argument and single mediaStream should succeed >-PASS addTrack with single track argument and multiple mediaStreams should succeed >+FAIL addTrack with single track argument and multiple mediaStreams should succeed promise_test: Unhandled rejection with value: object "InvalidAccessError: Unable to add track" > PASS Adding the same track multiple times should throw InvalidAccessError > PASS addTrack with existing sender with null track, same kind, and recvonly direction should reuse sender > PASS addTrack with existing sender with null track, same kind, and sendrecv direction should create new sender
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 188914
:
347988
| 348024