WebKit Bugzilla
Attachment 356463 Details for
Bug 192136
: A sender created through addTransceiver and populated using addTrack should have its source set
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-192136-20181203214729.patch (text/plain), 5.99 KB, created by
youenn fablet
on 2018-12-03 21:47:30 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
youenn fablet
Created:
2018-12-03 21:47:30 PST
Size:
5.99 KB
patch
obsolete
>Subversion Revision: 238822 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 37b4951e51b52f51bea852f50a0bd8027e76fb8a..3f9ac3b4eff5181831e0db9643bc845350d10d5b 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,22 @@ >+2018-12-03 Youenn Fablet <youenn@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/LibWebRTCMediaEndpoint.cpp: >+ (WebCore::LibWebRTCPeerConnectionBackend::removeTrack): >+ * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp: >+ (WebCore::LibWebRTCPeerConnectionBackend::addTrack): >+ * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h: >+ > 2018-12-03 Alex Christensen <achristensen@webkit.org> > > Add WKWebProcessPlugInLoadDelegate SPI willStartProvisionalLoadForFrame with a completion handler >diff --git a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp >index 3acb25c2dbe6fabaf51960c535add286079d5268..291ca8e93cbc41086c39a0a82de2fee4543d444d 100644 >--- a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp >+++ b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp >@@ -255,6 +255,7 @@ void LibWebRTCMediaEndpoint::removeTrack(LibWebRTCRtpSenderBackend& sender) > { > ASSERT(m_backend); > m_backend->RemoveTrack(sender.rtcSender()); >+ sender.clearSource(); > } > > void LibWebRTCMediaEndpoint::doCreateOffer(const RTCOfferOptions& options) >diff --git a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp >index 1a93264f1ed25714946956678d08a600c7c72ba6..0b408d1e7c29b00ddda092506e9fb98d4186079f 100644 >--- a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp >+++ b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp >@@ -403,6 +403,7 @@ ExceptionOr<Ref<RTCRtpSender>> LibWebRTCPeerConnectionBackend::addTrack(MediaStr > 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(); >diff --git a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h >index 8c9ea6107ec5c5d770f103c03b9afe0017da81f2..ad568d0d4b1ded6d5bf5a3d33b3302474567e6da 100644 >--- a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h >+++ b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h >@@ -87,6 +87,12 @@ public: > ); > } > >+ void clearSource() >+ { >+ ASSERT(hasSource()); >+ m_source = nullptr; >+ } >+ > void setSource(Source&& source) > { > ASSERT(!hasSource()); >@@ -94,6 +100,12 @@ public: > 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; >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index bbc008dc136cef19c57e722e71efeebd303bc995..19439e94282d75b52a8bda647244ae85af2ca23e 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,13 @@ >+2018-12-03 Youenn Fablet <youenn@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-12-03 Daniel Bates <dabates@apple.com> > > [iOS] Do not handle key events that are key commands >diff --git a/LayoutTests/webrtc/video-replace-track-expected.txt b/LayoutTests/webrtc/video-replace-track-expected.txt >index 675822166a43141e1f9296531929dfea1d250198..34877232c7eb7c296eb325f341d613dac4778f62 100644 >--- a/LayoutTests/webrtc/video-replace-track-expected.txt >+++ b/LayoutTests/webrtc/video-replace-track-expected.txt >@@ -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 > >diff --git a/LayoutTests/webrtc/video-replace-track.html b/LayoutTests/webrtc/video-replace-track.html >index e52c7194f9794a1f861afa484a725cd42ede1be4..a62aed791db89ae186173b0b7979d312049b47fc 100644 >--- a/LayoutTests/webrtc/video-replace-track.html >+++ b/LayoutTests/webrtc/video-replace-track.html >@@ -181,6 +181,14 @@ promise_test((test) => { > }); > > }, "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>
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 192136
:
355978
|
356025
| 356463