Title: [238680] trunk
Revision
238680
Author
you...@apple.com
Date
2018-11-29 11:54:40 -0800 (Thu, 29 Nov 2018)

Log Message

A sender created through addTransceiver and populated using addTrack should have its source set
https://bugs.webkit.org/show_bug.cgi?id=192136

Reviewed by Eric Carlson.

Source/WebCore:

In case libwebrtc backend is already created, we need to make sure to
set the track source to the libwebrtc sender backend that is actually
tied to the sender.

Covered by updated test.

* Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
(WebCore::LibWebRTCPeerConnectionBackend::addTrack):
* Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h:

LayoutTests:

* webrtc/video-replace-track-expected.txt:
* webrtc/video-replace-track.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (238679 => 238680)


--- trunk/LayoutTests/ChangeLog	2018-11-29 19:00:55 UTC (rev 238679)
+++ trunk/LayoutTests/ChangeLog	2018-11-29 19:54:40 UTC (rev 238680)
@@ -1,3 +1,13 @@
+2018-11-29  Youenn Fablet  <you...@apple.com>
+
+        A sender created through addTransceiver and populated using addTrack should have its source set
+        https://bugs.webkit.org/show_bug.cgi?id=192136
+
+        Reviewed by Eric Carlson.
+
+        * webrtc/video-replace-track-expected.txt:
+        * webrtc/video-replace-track.html:
+
 2018-11-29  Ryan Haddad  <ryanhad...@apple.com>
 
         Unreviewed test gardening, skip three datalist tests that are marked as flaky crashes.

Modified: trunk/LayoutTests/webrtc/video-replace-track-expected.txt (238679 => 238680)


--- trunk/LayoutTests/webrtc/video-replace-track-expected.txt	2018-11-29 19:00:55 UTC (rev 238679)
+++ trunk/LayoutTests/webrtc/video-replace-track-expected.txt	2018-11-29 19:54:40 UTC (rev 238680)
@@ -2,4 +2,5 @@
 PASS Switching from front to back camera 
 PASS Switching from front to back camera, with lower resolution 
 PASS Switching from front to back camera, with higher resolution 
+PASS Replace a track for a sender created by addTransceiver and used by addTrack 
 

Modified: trunk/LayoutTests/webrtc/video-replace-track.html (238679 => 238680)


--- trunk/LayoutTests/webrtc/video-replace-track.html	2018-11-29 19:00:55 UTC (rev 238679)
+++ trunk/LayoutTests/webrtc/video-replace-track.html	2018-11-29 19:54:40 UTC (rev 238680)
@@ -181,6 +181,14 @@
     });
 
 }, "Switching from front to back camera, with higher resolution");
+
+promise_test(async (test) => {
+    const stream = await navigator.mediaDevices.getUserMedia({ video: true });
+    const pc = new RTCPeerConnection();
+    pc.addTransceiver("video", {direction: "sendonly"});
+    const sender = pc.addTrack(stream.getVideoTracks()[0], stream);
+    await sender.replaceTrack(stream.getVideoTracks()[0].clone());
+}, "Replace a track for a sender created by addTransceiver and used by addTrack");
         </script>
     </body>
 </html>

Modified: trunk/Source/WebCore/ChangeLog (238679 => 238680)


--- trunk/Source/WebCore/ChangeLog	2018-11-29 19:00:55 UTC (rev 238679)
+++ trunk/Source/WebCore/ChangeLog	2018-11-29 19:54:40 UTC (rev 238680)
@@ -1,3 +1,20 @@
+2018-11-29  Youenn Fablet  <you...@apple.com>
+
+        A sender created through addTransceiver and populated using addTrack should have its source set
+        https://bugs.webkit.org/show_bug.cgi?id=192136
+
+        Reviewed by Eric Carlson.
+
+        In case libwebrtc backend is already created, we need to make sure to
+        set the track source to the libwebrtc sender backend that is actually
+        tied to the sender.
+
+        Covered by updated test.
+
+        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
+        (WebCore::LibWebRTCPeerConnectionBackend::addTrack):
+        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h:
+
 2018-11-29  Megan Gardner  <megan_gard...@apple.com>
 
         Move Lookup Code for better cross platform usage

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


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp	2018-11-29 19:00:55 UTC (rev 238679)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp	2018-11-29 19:54:40 UTC (rev 238680)
@@ -403,6 +403,7 @@
             return Exception { TypeError, "Unable to add track"_s };
 
         if (auto sender = findExistingSender(m_peerConnection.currentSenders(), *senderBackend)) {
+            backendFromRTPSender(*sender).takeSource(*senderBackend);
             sender->setTrack(makeRef(track));
             sender->setMediaStreamIds(WTFMove(mediaStreamIds));
             return sender.releaseNonNull();

Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h (238679 => 238680)


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h	2018-11-29 19:00:55 UTC (rev 238679)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h	2018-11-29 19:54:40 UTC (rev 238680)
@@ -94,6 +94,12 @@
         ASSERT(hasSource());
     }
 
+    void takeSource(LibWebRTCRtpSenderBackend& backend)
+    {
+        ASSERT(backend.hasSource());
+        setSource(WTFMove(backend.m_source));
+    }
+
 private:
     void replaceTrack(ScriptExecutionContext&, RTCRtpSender&, RefPtr<MediaStreamTrack>&&, DOMPromiseDeferred<void>&&) final;
     RTCRtpSendParameters getParameters() const final;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to