WebKit Bugzilla
Attachment 349203 Details for
Bug 189420
: RTCRtpReceiver::track should return a MediaStreamTrack reference
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch for landing
bug-189420-20180907151603.patch (text/plain), 17.67 KB, created by
youenn fablet
on 2018-09-07 15:16:04 PDT
(
hide
)
Description:
Patch for landing
Filename:
MIME Type:
Creator:
youenn fablet
Created:
2018-09-07 15:16:04 PDT
Size:
17.67 KB
patch
obsolete
>Subversion Revision: 235809 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 96a17399bfc1709c30b604d55bffccd3eb3b50f6..5ac924479b44bbe0f63105f5528a23fc2f5be3e3 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,35 @@ >+2018-09-07 Youenn Fablet <youenn@apple.com> >+ >+ RTCRtpReceiver::track should return a MediaStreamTrack reference >+ https://bugs.webkit.org/show_bug.cgi?id=189420 >+ >+ Reviewed by Eric Carlson. >+ >+ As per spec, a receiver always has a track. >+ Remove unneeded RTCRtpSenderReceiverBase and make RTCRtpReceiver have a Ref<MediaStreamTrack>. >+ RTCRtpSender keeps having a RefPtr<MediaStreamTrack>. >+ Update call sites accordingly. >+ No change of behavior. >+ >+ * Modules/mediastream/RTCRtpReceiver.cpp: >+ (WebCore::RTCRtpReceiver::RTCRtpReceiver): >+ (WebCore::RTCRtpReceiver::stop): >+ * Modules/mediastream/RTCRtpReceiver.h: >+ (WebCore::RTCRtpReceiver::track): >+ * Modules/mediastream/RTCRtpReceiver.idl: >+ * Modules/mediastream/RTCRtpSender.cpp: >+ (WebCore::RTCRtpSender::RTCRtpSender): >+ * Modules/mediastream/RTCRtpSender.h: >+ (WebCore::RTCRtpSender::track): >+ * Modules/mediastream/RTCRtpSender.idl: >+ * Modules/mediastream/RTCRtpSenderReceiverBase.h: Removed. >+ * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp: >+ (WebCore::LibWebRTCMediaEndpoint::addRemoteTrack): >+ * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp: >+ (WebCore::LibWebRTCPeerConnectionBackend::videoReceiver): >+ (WebCore::LibWebRTCPeerConnectionBackend::audioReceiver): >+ * WebCore.xcodeproj/project.pbxproj: >+ > 2018-09-07 Youenn Fablet <youenn@apple.com> > > Add support for unified plan transceivers >diff --git a/Source/WebCore/Modules/mediastream/RTCRtpReceiver.cpp b/Source/WebCore/Modules/mediastream/RTCRtpReceiver.cpp >index 8fbe9a29596f6add0595d2175c0607fe1b57d6a7..bfb61636fea4eb22ae5d4b9baecbb9b87cfa7d8f 100644 >--- a/Source/WebCore/Modules/mediastream/RTCRtpReceiver.cpp >+++ b/Source/WebCore/Modules/mediastream/RTCRtpReceiver.cpp >@@ -38,17 +38,18 @@ > namespace WebCore { > > RTCRtpReceiver::RTCRtpReceiver(Ref<MediaStreamTrack>&& track, std::unique_ptr<RTCRtpReceiverBackend>&& backend) >- : RTCRtpSenderReceiverBase(WTFMove(track)) >+ : m_track(WTFMove(track)) > , m_backend(WTFMove(backend)) > { > } > > void RTCRtpReceiver::stop() > { >- m_backend = nullptr; >+ if (!m_backend) >+ return; > >- if (m_track) >- m_track->stopTrack(MediaStreamTrack::StopMode::PostEvent); >+ m_backend = nullptr; >+ m_track->stopTrack(MediaStreamTrack::StopMode::PostEvent); > } > > } // namespace WebCore >diff --git a/Source/WebCore/Modules/mediastream/RTCRtpReceiver.h b/Source/WebCore/Modules/mediastream/RTCRtpReceiver.h >index ac3da1058f98734da8537e2a80139bd289b34f2a..5d2ec71ffd4cc43b79d36a08ffd681ee2a1e5863 100644 >--- a/Source/WebCore/Modules/mediastream/RTCRtpReceiver.h >+++ b/Source/WebCore/Modules/mediastream/RTCRtpReceiver.h >@@ -32,14 +32,14 @@ > > #if ENABLE(WEB_RTC) > >-#include "RTCRtpParameters.h" >+#include "MediaStreamTrack.h" > #include "RTCRtpReceiverBackend.h" >-#include "RTCRtpSenderReceiverBase.h" >+#include "ScriptWrappable.h" > > namespace WebCore { > > >-class RTCRtpReceiver : public RTCRtpSenderReceiverBase { >+class RTCRtpReceiver : public RefCounted<RTCRtpReceiver>, public ScriptWrappable { > public: > static Ref<RTCRtpReceiver> create(Ref<MediaStreamTrack>&& track, std::unique_ptr<RTCRtpReceiverBackend>&& backend) > { >@@ -51,9 +51,12 @@ public: > void setBackend(std::unique_ptr<RTCRtpReceiverBackend>&& backend) { m_backend = WTFMove(backend); } > RTCRtpParameters getParameters() { return m_backend ? m_backend->getParameters() : RTCRtpParameters(); } > >+ MediaStreamTrack& track() { return m_track.get(); } >+ > private: > RTCRtpReceiver(Ref<MediaStreamTrack>&&, std::unique_ptr<RTCRtpReceiverBackend>&&); > >+ Ref<MediaStreamTrack> m_track; > std::unique_ptr<RTCRtpReceiverBackend> m_backend; > }; > >diff --git a/Source/WebCore/Modules/mediastream/RTCRtpReceiver.idl b/Source/WebCore/Modules/mediastream/RTCRtpReceiver.idl >index 7f0be48956d0c85208346e409a151180ba490652..e5c9cdddc0ea1b28ed55caea057a0c0004131288 100644 >--- a/Source/WebCore/Modules/mediastream/RTCRtpReceiver.idl >+++ b/Source/WebCore/Modules/mediastream/RTCRtpReceiver.idl >@@ -32,6 +32,7 @@ > [ > Conditional=WEB_RTC, > EnabledAtRuntime=PeerConnection, >+ ImplementationLacksVTable > ] interface RTCRtpReceiver { > readonly attribute MediaStreamTrack track; > RTCRtpParameters getParameters(); >diff --git a/Source/WebCore/Modules/mediastream/RTCRtpSender.cpp b/Source/WebCore/Modules/mediastream/RTCRtpSender.cpp >index 3a321f6cb510fa5f325bd59d75f3cbd3efcd7e77..190817611000957d549bf6f54ee1c1eac5878be1 100644 >--- a/Source/WebCore/Modules/mediastream/RTCRtpSender.cpp >+++ b/Source/WebCore/Modules/mediastream/RTCRtpSender.cpp >@@ -50,8 +50,7 @@ Ref<RTCRtpSender> RTCRtpSender::create(String&& trackKind, Vector<String>&& medi > } > > RTCRtpSender::RTCRtpSender(String&& trackKind, Vector<String>&& mediaStreamIds, std::unique_ptr<RTCRtpSenderBackend>&& backend) >- : RTCRtpSenderReceiverBase() >- , m_trackKind(WTFMove(trackKind)) >+ : m_trackKind(WTFMove(trackKind)) > , m_mediaStreamIds(WTFMove(mediaStreamIds)) > , m_backend(WTFMove(backend)) > { >diff --git a/Source/WebCore/Modules/mediastream/RTCRtpSender.h b/Source/WebCore/Modules/mediastream/RTCRtpSender.h >index 8c2679102bce82110549f8b6981f29e865f6f2bf..bab39dc1523c90ae4abf6ff98b9b25885f469d3e 100644 >--- a/Source/WebCore/Modules/mediastream/RTCRtpSender.h >+++ b/Source/WebCore/Modules/mediastream/RTCRtpSender.h >@@ -32,17 +32,20 @@ > > #if ENABLE(WEB_RTC) > >+#include "MediaStreamTrack.h" > #include "PeerConnectionBackend.h" > #include "RTCRtpSenderBackend.h" >-#include "RTCRtpSenderReceiverBase.h" >+#include "ScriptWrappable.h" > > namespace WebCore { > >-class RTCRtpSender : public RTCRtpSenderReceiverBase { >+class RTCRtpSender : public RefCounted<RTCRtpSender>, public ScriptWrappable { > public: > static Ref<RTCRtpSender> create(Ref<MediaStreamTrack>&&, Vector<String>&& mediaStreamIds, std::unique_ptr<RTCRtpSenderBackend>&&); > static Ref<RTCRtpSender> create(String&& trackKind, Vector<String>&& mediaStreamIds, std::unique_ptr<RTCRtpSenderBackend>&&); > >+ MediaStreamTrack* track() { return m_track.get(); } >+ > const String& trackId() const { return m_trackId; } > const String& trackKind() const { return m_trackKind; } > >@@ -64,6 +67,7 @@ public: > private: > RTCRtpSender(String&& trackKind, Vector<String>&& mediaStreamIds, std::unique_ptr<RTCRtpSenderBackend>&&); > >+ RefPtr<MediaStreamTrack> m_track; > String m_trackId; > String m_trackKind; > Vector<String> m_mediaStreamIds; >diff --git a/Source/WebCore/Modules/mediastream/RTCRtpSender.idl b/Source/WebCore/Modules/mediastream/RTCRtpSender.idl >index efc42529adb308a65027e98d12cc89e87f99571c..2398a78968e6f5cb10f1d75acd578b7dfcd7613a 100644 >--- a/Source/WebCore/Modules/mediastream/RTCRtpSender.idl >+++ b/Source/WebCore/Modules/mediastream/RTCRtpSender.idl >@@ -32,6 +32,7 @@ > [ > Conditional=WEB_RTC, > EnabledAtRuntime=PeerConnection, >+ ImplementationLacksVTable > ] interface RTCRtpSender { > readonly attribute MediaStreamTrack? track; > // FIXME 169662: missing transport >diff --git a/Source/WebCore/Modules/mediastream/RTCRtpSenderReceiverBase.h b/Source/WebCore/Modules/mediastream/RTCRtpSenderReceiverBase.h >deleted file mode 100644 >index 3dd219a26b8652a4e2b90eac7858a4cccc83339c..0000000000000000000000000000000000000000 >--- a/Source/WebCore/Modules/mediastream/RTCRtpSenderReceiverBase.h >+++ /dev/null >@@ -1,62 +0,0 @@ >-/* >- * Copyright (C) 2015 Ericsson AB. All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer >- * in the documentation and/or other materials provided with the >- * distribution. >- * 3. Neither the name of Ericsson nor the names of its contributors >- * may be used to endorse or promote products derived from this >- * software without specific prior written permission. >- * >- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS >- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT >- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR >- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT >- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, >- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT >- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >- */ >- >-#pragma once >- >-#if ENABLE(WEB_RTC) >- >-#include "MediaStreamTrack.h" >-#include "ScriptWrappable.h" >-#include <wtf/RefCounted.h> >-#include <wtf/RefPtr.h> >- >-namespace WebCore { >- >-class MediaStreamTrack; >- >-class RTCRtpSenderReceiverBase : public RefCounted<RTCRtpSenderReceiverBase>, public ScriptWrappable { >-public: >- virtual ~RTCRtpSenderReceiverBase() = default; >- >- MediaStreamTrack* track() { return m_track.get(); } >- >-protected: >- RTCRtpSenderReceiverBase() = default; >- >- RTCRtpSenderReceiverBase(Ref<MediaStreamTrack>&& track) >- : m_track(WTFMove(track)) >- { } >- >- RefPtr<MediaStreamTrack> m_track; >-}; >- >-} // namespace WebCore >- >-#endif // ENABLE(WEB_RTC) >diff --git a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp >index 89efce152748c128683e9217d6610656e8f04a4c..01b4aa2dc595fcc1dfe16e998e3c960a4851a0d7 100644 >--- a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp >+++ b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp >@@ -367,7 +367,7 @@ void LibWebRTCMediaEndpoint::addRemoteTrack(rtc::scoped_refptr<webrtc::RtpReceiv > } > > receiver->setBackend(std::make_unique<LibWebRTCRtpReceiverBackend>(WTFMove(rtcReceiver))); >- auto& track = *receiver->track(); >+ auto& track = receiver->track(); > fireTrackEvent(receiver.releaseNonNull(), track, rtcStreams, nullptr); > } > >@@ -427,7 +427,7 @@ void LibWebRTCMediaEndpoint::newTransceiver(rtc::scoped_refptr<webrtc::RtpTransc > return rtcTransceiver.get() == transceiverBackend.rtcTransceiver(); > }); > if (transceiver) { >- setExistingReceiverSourceTrack(transceiver->receiver().track()->source(), *rtcTransceiver->receiver()); >+ setExistingReceiverSourceTrack(transceiver->receiver().track().source(), *rtcTransceiver->receiver()); > return; > } > >@@ -438,7 +438,7 @@ void LibWebRTCMediaEndpoint::newTransceiver(rtc::scoped_refptr<webrtc::RtpTransc > > auto& newTransceiver = m_peerConnectionBackend.newRemoteTransceiver(std::make_unique<LibWebRTCRtpTransceiverBackend>(WTFMove(rtcTransceiver)), source.releaseNonNull()); > >- fireTrackEvent(makeRef(newTransceiver.receiver()), *newTransceiver.receiver().track(), rtcReceiver->streams(), makeRef(newTransceiver)); >+ fireTrackEvent(makeRef(newTransceiver.receiver()), newTransceiver.receiver().track(), rtcReceiver->streams(), makeRef(newTransceiver)); > } > > template<typename T> >diff --git a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp >index 1da68d4133e6c7286082f693b84f66a869857fdb..c21d26bb0ca82ce605da48c11498802182b60121 100644 >--- a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp >+++ b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp >@@ -230,10 +230,10 @@ LibWebRTCPeerConnectionBackend::VideoReceiver LibWebRTCPeerConnectionBackend::vi > // FIXME: Add to Vector a utility routine for that take-or-create pattern. > // FIXME: We should be selecting the receiver based on track id. > for (size_t cptr = 0; cptr < m_pendingReceivers.size(); ++cptr) { >- if (m_pendingReceivers[cptr]->track()->source().type() == RealtimeMediaSource::Type::Video) { >+ if (m_pendingReceivers[cptr]->track().source().type() == RealtimeMediaSource::Type::Video) { > Ref<RTCRtpReceiver> receiver = m_pendingReceivers[cptr].copyRef(); > m_pendingReceivers.remove(cptr); >- Ref<RealtimeIncomingVideoSource> source = static_cast<RealtimeIncomingVideoSource&>(receiver->track()->source()); >+ Ref<RealtimeIncomingVideoSource> source = static_cast<RealtimeIncomingVideoSource&>(receiver->track().source()); > return { WTFMove(receiver), WTFMove(source) }; > } > } >@@ -253,10 +253,10 @@ LibWebRTCPeerConnectionBackend::AudioReceiver LibWebRTCPeerConnectionBackend::au > // FIXME: Add to Vector a utility routine for that take-or-create pattern. > // FIXME: We should be selecting the receiver based on track id. > for (size_t cptr = 0; cptr < m_pendingReceivers.size(); ++cptr) { >- if (m_pendingReceivers[cptr]->track()->source().type() == RealtimeMediaSource::Type::Audio) { >+ if (m_pendingReceivers[cptr]->track().source().type() == RealtimeMediaSource::Type::Audio) { > Ref<RTCRtpReceiver> receiver = m_pendingReceivers[cptr].copyRef(); > m_pendingReceivers.remove(cptr); >- Ref<RealtimeIncomingAudioSource> source = static_cast<RealtimeIncomingAudioSource&>(receiver->track()->source()); >+ Ref<RealtimeIncomingAudioSource> source = static_cast<RealtimeIncomingAudioSource&>(receiver->track().source()); > return { WTFMove(receiver), WTFMove(source) }; > } > } >diff --git a/Source/WebCore/WebCore.xcodeproj/project.pbxproj b/Source/WebCore/WebCore.xcodeproj/project.pbxproj >index 7929ff638f3ae43725aecc0ce92c73409bf58a53..7b7c90ab374b3858bc2ee2df96e8fe32f7f26e2f 100644 >--- a/Source/WebCore/WebCore.xcodeproj/project.pbxproj >+++ b/Source/WebCore/WebCore.xcodeproj/project.pbxproj >@@ -1861,7 +1861,6 @@ > 5DFE8F570D16477C0076E937 /* ScheduledAction.h in Headers */ = {isa = PBXBuildFile; fileRef = BCA378BB0D15F64200B793D6 /* ScheduledAction.h */; settings = {ATTRIBUTES = (Private, ); }; }; > 5DFEBAB718592B6D00C75BEB /* WebKitAvailability.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DFEBAB618592B6D00C75BEB /* WebKitAvailability.h */; settings = {ATTRIBUTES = (Private, ); }; }; > 5E2C43511BCEE2F60001E2BC /* PeerConnectionBackend.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E2C434D1BCEE2E50001E2BC /* PeerConnectionBackend.h */; }; >- 5E2C435F1BCEE31E0001E2BC /* RTCRtpSenderReceiverBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E2C435D1BCEE30D0001E2BC /* RTCRtpSenderReceiverBase.h */; }; > 5E2C43611BCEE3230001E2BC /* RTCRtpSender.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E2C435A1BCEE30D0001E2BC /* RTCRtpSender.h */; }; > 5E2C43631BCEE32B0001E2BC /* RTCRtpReceiver.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E2C43571BCEE30D0001E2BC /* RTCRtpReceiver.h */; }; > 5E2C43681BCEE3770001E2BC /* RTCTrackEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E2C43651BCEE3720001E2BC /* RTCTrackEvent.h */; }; >@@ -8750,7 +8749,6 @@ > 5E2C43591BCEE30D0001E2BC /* RTCRtpSender.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RTCRtpSender.cpp; sourceTree = "<group>"; }; > 5E2C435A1BCEE30D0001E2BC /* RTCRtpSender.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCRtpSender.h; sourceTree = "<group>"; }; > 5E2C435B1BCEE30D0001E2BC /* RTCRtpSender.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = RTCRtpSender.idl; sourceTree = "<group>"; }; >- 5E2C435D1BCEE30D0001E2BC /* RTCRtpSenderReceiverBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCRtpSenderReceiverBase.h; sourceTree = "<group>"; }; > 5E2C43641BCEE3720001E2BC /* RTCTrackEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RTCTrackEvent.cpp; sourceTree = "<group>"; }; > 5E2C43651BCEE3720001E2BC /* RTCTrackEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCTrackEvent.h; sourceTree = "<group>"; }; > 5E2C43661BCEE3720001E2BC /* RTCTrackEvent.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = RTCTrackEvent.idl; sourceTree = "<group>"; }; >@@ -15180,7 +15178,6 @@ > 5E2C435A1BCEE30D0001E2BC /* RTCRtpSender.h */, > 5E2C435B1BCEE30D0001E2BC /* RTCRtpSender.idl */, > 41D1A046213EDDEB0063FB6B /* RTCRtpSenderBackend.h */, >- 5E2C435D1BCEE30D0001E2BC /* RTCRtpSenderReceiverBase.h */, > 5E5E2B101CFC3E4B000C0D85 /* RTCRtpTransceiver.cpp */, > 5E5E2B111CFC3E4B000C0D85 /* RTCRtpTransceiver.h */, > 5E5E2B121CFC3E4B000C0D85 /* RTCRtpTransceiver.idl */, >@@ -30084,7 +30081,6 @@ > 5E2C437C1BCF9A840001E2BC /* RTCPeerConnectionInternalsBuiltins.h in Headers */, > 5E2C43631BCEE32B0001E2BC /* RTCRtpReceiver.h in Headers */, > 5E2C43611BCEE3230001E2BC /* RTCRtpSender.h in Headers */, >- 5E2C435F1BCEE31E0001E2BC /* RTCRtpSenderReceiverBase.h in Headers */, > 5E5E2B141CFC3E75000C0D85 /* RTCRtpTransceiver.h in Headers */, > 31EB54DF1E7DC74400C1623B /* RTCRtpTransceiverDirection.h in Headers */, > 3135910A1E7DDC7300F30630 /* RTCSdpType.h in Headers */,
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 189420
:
349167
| 349203