Title: [235327] trunk
Revision
235327
Author
[email protected]
Date
2018-08-24 12:30:27 -0700 (Fri, 24 Aug 2018)

Log Message

libwebrtc PeerConnection::AddTrack sometimes fail
https://bugs.webkit.org/show_bug.cgi?id=188914

Reviewed by Eric Carlson.

LayoutTests/imported/w3c:

* web-platform-tests/webrtc/RTCPeerConnection-addTrack.https-expected.txt:

Source/WebCore:

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:

LayoutTests:

* fast/mediastream/RTCPeerConnection-add-removeTrack-expected.txt:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (235326 => 235327)


--- trunk/LayoutTests/ChangeLog	2018-08-24 19:14:36 UTC (rev 235326)
+++ trunk/LayoutTests/ChangeLog	2018-08-24 19:30:27 UTC (rev 235327)
@@ -1,3 +1,12 @@
+2018-08-24  Youenn Fablet  <[email protected]>
+
+        libwebrtc PeerConnection::AddTrack sometimes fail
+        https://bugs.webkit.org/show_bug.cgi?id=188914
+
+        Reviewed by Eric Carlson.
+
+        * fast/mediastream/RTCPeerConnection-add-removeTrack-expected.txt:
+
 2018-08-24  Ryan Haddad  <[email protected]>
 
         Mark media/video-load-preload-metadata.html as flaky on iOS

Modified: trunk/LayoutTests/fast/mediastream/RTCPeerConnection-add-removeTrack-expected.txt (235326 => 235327)


--- trunk/LayoutTests/fast/mediastream/RTCPeerConnection-add-removeTrack-expected.txt	2018-08-24 19:14:36 UTC (rev 235326)
+++ trunk/LayoutTests/fast/mediastream/RTCPeerConnection-add-removeTrack-expected.txt	2018-08-24 19:30:27 UTC (rev 235327)
@@ -33,10 +33,10 @@
 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

Modified: trunk/LayoutTests/imported/w3c/ChangeLog (235326 => 235327)


--- trunk/LayoutTests/imported/w3c/ChangeLog	2018-08-24 19:14:36 UTC (rev 235326)
+++ trunk/LayoutTests/imported/w3c/ChangeLog	2018-08-24 19:30:27 UTC (rev 235327)
@@ -1,3 +1,12 @@
+2018-08-24  Youenn Fablet  <[email protected]>
+
+        libwebrtc PeerConnection::AddTrack sometimes fail
+        https://bugs.webkit.org/show_bug.cgi?id=188914
+
+        Reviewed by Eric Carlson.
+
+        * web-platform-tests/webrtc/RTCPeerConnection-addTrack.https-expected.txt:
+
 2018-08-23  Aditya Keerthi  <[email protected]>
 
         [iOS] Support the inputmode attribute on contenteditable elements

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-addTrack.https-expected.txt (235326 => 235327)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-addTrack.https-expected.txt	2018-08-24 19:14:36 UTC (rev 235326)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-addTrack.https-expected.txt	2018-08-24 19:30:27 UTC (rev 235327)
@@ -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 

Modified: trunk/Source/WebCore/ChangeLog (235326 => 235327)


--- trunk/Source/WebCore/ChangeLog	2018-08-24 19:14:36 UTC (rev 235326)
+++ trunk/Source/WebCore/ChangeLog	2018-08-24 19:30:27 UTC (rev 235327)
@@ -1,3 +1,27 @@
+2018-08-24  Youenn Fablet  <[email protected]>
+
+        libwebrtc PeerConnection::AddTrack sometimes fail
+        https://bugs.webkit.org/show_bug.cgi?id=188914
+
+        Reviewed by Eric Carlson.
+
+        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  Adrian Perez de Castro  <[email protected]>
 
         [FreeType] Do not cast through GLib types in FontCustomPlatformDataFreeType.cpp

Modified: trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h (235326 => 235327)


--- trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h	2018-08-24 19:14:36 UTC (rev 235326)
+++ trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h	2018-08-24 19:30:27 UTC (rev 235327)
@@ -102,7 +102,7 @@
 
     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 { }; }

Modified: trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp (235326 => 235327)


--- trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp	2018-08-24 19:14:36 UTC (rev 235326)
+++ trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp	2018-08-24 19:30:27 UTC (rev 235327)
@@ -154,7 +154,9 @@
         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 @@
     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);
 }
 

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


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp	2018-08-24 19:14:36 UTC (rev 235326)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp	2018-08-24 19:30:27 UTC (rev 235327)
@@ -193,7 +193,7 @@
     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 @@
         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)

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


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h	2018-08-24 19:14:36 UTC (rev 235326)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h	2018-08-24 19:30:27 UTC (rev 235327)
@@ -96,7 +96,7 @@
     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&);
 

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


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp	2018-08-24 19:14:36 UTC (rev 235326)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp	2018-08-24 19:30:27 UTC (rev 235327)
@@ -349,10 +349,10 @@
     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)

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


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h	2018-08-24 19:14:36 UTC (rev 235326)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h	2018-08-24 19:30:27 UTC (rev 235327)
@@ -92,7 +92,7 @@
     void removeRemoteStream(MediaStream*);
     void addRemoteStream(Ref<MediaStream>&&);
 
-    void notifyAddedTrack(RTCRtpSender&) final;
+    bool notifyAddedTrack(RTCRtpSender&) final;
     void notifyRemovedTrack(RTCRtpSender&) final;
 
     struct VideoReceiver {
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to