WebKit Bugzilla
Attachment 349167 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
bug-189420-20180907111742.patch (text/plain), 17.32 KB, created by
youenn fablet
on 2018-09-07 11:17:43 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
youenn fablet
Created:
2018-09-07 11:17:43 PDT
Size:
17.32 KB
patch
obsolete
>Subversion Revision: 235741 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 9d731832b250d4f529967676fce0703d957d870d..36db0d1fc50e4bad6a95c9db75e6ff9bc0e14f22 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 NOBODY (OOPS!). >+ >+ 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-06 Youenn Fablet <youenn@apple.com> > > Move replaceTrack logic to RTCRtpSender backend >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 db6b7498b9e083919abb57af71acb4fb64de5f41..c02a55a245bb044db4ae07ddd9549a64b5b9d2a8 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 = nullptr) > { >@@ -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 75839e19e52a0550525e0cd0d586a761ceb22f36..f9a240dcfbb4cbdcbe0325d1bca58ea36e868e41 100644 >--- a/Source/WebCore/Modules/mediastream/RTCRtpSender.cpp >+++ b/Source/WebCore/Modules/mediastream/RTCRtpSender.cpp >@@ -48,8 +48,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 efa19adc72f4189ebb8940482601a5e6a3f82c1d..f44591aaa35387b6c2ad666e279ccf6f1a0378b9 100644 >--- a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp >+++ b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp >@@ -362,17 +362,16 @@ void LibWebRTCMediaEndpoint::addRemoteTrack(rtc::scoped_refptr<webrtc::RtpReceiv > > receiver->setBackend(std::make_unique<LibWebRTCRtpReceiverBackend>(WTFMove(rtcReceiver))); > >- auto* track = receiver->track(); >- ASSERT(track); >+ auto& track = receiver->track(); > > Vector<RefPtr<MediaStream>> streams; > for (auto& rtcStream : rtcStreams) { > auto& mediaStream = mediaStreamFromRTCStream(*rtcStream.get()); > streams.append(&mediaStream); >- mediaStream.addTrackFromPlatform(*track); >+ mediaStream.addTrackFromPlatform(track); > } > m_peerConnectionBackend.connection().fireEvent(RTCTrackEvent::create(eventNames().trackEvent, >- Event::CanBubble::No, Event::IsCancelable::No, WTFMove(receiver), track, WTFMove(streams), nullptr)); >+ Event::CanBubble::No, Event::IsCancelable::No, WTFMove(receiver), makeRef(track), WTFMove(streams), nullptr)); > } > > void LibWebRTCMediaEndpoint::removeRemoteStream(webrtc::MediaStreamInterface& rtcStream) >diff --git a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp >index 50824599bd207174dee176d9f9831294a3ff01b6..e2067b95182bfe101d36030c00826b589b2261d8 100644 >--- a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp >+++ b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp >@@ -229,10 +229,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) }; > } > } >@@ -252,10 +252,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 78c0819f2ce0ca21f42482c00a754033349212cd..96b35fa58ad1f1159dbfec4ea682124c230a36f1 100644 >--- a/Source/WebCore/WebCore.xcodeproj/project.pbxproj >+++ b/Source/WebCore/WebCore.xcodeproj/project.pbxproj >@@ -1860,7 +1860,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 */; }; >@@ -8743,7 +8742,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>"; }; >@@ -15166,7 +15164,6 @@ > 5E2C435A1BCEE30D0001E2BC /* RTCRtpSender.h */, > 5E2C435B1BCEE30D0001E2BC /* RTCRtpSender.idl */, > 41D1A046213EDDEB0063FB6B /* RTCRtpSenderBackend.h */, >- 5E2C435D1BCEE30D0001E2BC /* RTCRtpSenderReceiverBase.h */, > 5E5E2B101CFC3E4B000C0D85 /* RTCRtpTransceiver.cpp */, > 5E5E2B111CFC3E4B000C0D85 /* RTCRtpTransceiver.h */, > 5E5E2B121CFC3E4B000C0D85 /* RTCRtpTransceiver.idl */, >@@ -30059,7 +30056,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