Title: [235817] trunk/Source/WebCore
Revision
235817
Author
[email protected]
Date
2018-09-07 16:07:53 -0700 (Fri, 07 Sep 2018)

Log Message

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:

Modified Paths

Removed Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (235816 => 235817)


--- trunk/Source/WebCore/ChangeLog	2018-09-07 23:00:09 UTC (rev 235816)
+++ trunk/Source/WebCore/ChangeLog	2018-09-07 23:07:53 UTC (rev 235817)
@@ -1,3 +1,35 @@
+2018-09-07  Youenn Fablet  <[email protected]>
+
+        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  Daniel Bates  <[email protected]>
 
         Cleanup: Remove extraneous "using namespace" and scope WebCore::LogThreading

Modified: trunk/Source/WebCore/Modules/mediastream/RTCRtpReceiver.cpp (235816 => 235817)


--- trunk/Source/WebCore/Modules/mediastream/RTCRtpReceiver.cpp	2018-09-07 23:00:09 UTC (rev 235816)
+++ trunk/Source/WebCore/Modules/mediastream/RTCRtpReceiver.cpp	2018-09-07 23:07:53 UTC (rev 235817)
@@ -38,7 +38,7 @@
 namespace WebCore {
 
 RTCRtpReceiver::RTCRtpReceiver(Ref<MediaStreamTrack>&& track, std::unique_ptr<RTCRtpReceiverBackend>&& backend)
-    : RTCRtpSenderReceiverBase(WTFMove(track))
+    : m_track(WTFMove(track))
     , m_backend(WTFMove(backend))
 {
 }
@@ -45,10 +45,11 @@
 
 void RTCRtpReceiver::stop()
 {
+    if (!m_backend)
+        return;
+
     m_backend = nullptr;
-
-    if (m_track)
-        m_track->stopTrack(MediaStreamTrack::StopMode::PostEvent);
+    m_track->stopTrack(MediaStreamTrack::StopMode::PostEvent);
 }
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/Modules/mediastream/RTCRtpReceiver.h (235816 => 235817)


--- trunk/Source/WebCore/Modules/mediastream/RTCRtpReceiver.h	2018-09-07 23:00:09 UTC (rev 235816)
+++ trunk/Source/WebCore/Modules/mediastream/RTCRtpReceiver.h	2018-09-07 23:07:53 UTC (rev 235817)
@@ -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 @@
     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;
 };
 

Modified: trunk/Source/WebCore/Modules/mediastream/RTCRtpReceiver.idl (235816 => 235817)


--- trunk/Source/WebCore/Modules/mediastream/RTCRtpReceiver.idl	2018-09-07 23:00:09 UTC (rev 235816)
+++ trunk/Source/WebCore/Modules/mediastream/RTCRtpReceiver.idl	2018-09-07 23:07:53 UTC (rev 235817)
@@ -32,6 +32,7 @@
 [
     Conditional=WEB_RTC,
     EnabledAtRuntime=PeerConnection,
+    ImplementationLacksVTable
 ] interface RTCRtpReceiver {
     readonly attribute MediaStreamTrack track;
     RTCRtpParameters getParameters();

Modified: trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.cpp (235816 => 235817)


--- trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.cpp	2018-09-07 23:00:09 UTC (rev 235816)
+++ trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.cpp	2018-09-07 23:07:53 UTC (rev 235817)
@@ -50,8 +50,7 @@
 }
 
 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))
 {

Modified: trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.h (235816 => 235817)


--- trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.h	2018-09-07 23:00:09 UTC (rev 235816)
+++ trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.h	2018-09-07 23:07:53 UTC (rev 235817)
@@ -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 @@
 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;

Modified: trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.idl (235816 => 235817)


--- trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.idl	2018-09-07 23:00:09 UTC (rev 235816)
+++ trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.idl	2018-09-07 23:07:53 UTC (rev 235817)
@@ -32,6 +32,7 @@
 [
     Conditional=WEB_RTC,
     EnabledAtRuntime=PeerConnection,
+    ImplementationLacksVTable
 ] interface RTCRtpSender {
     readonly attribute MediaStreamTrack? track;
     // FIXME 169662: missing transport

Deleted: trunk/Source/WebCore/Modules/mediastream/RTCRtpSenderReceiverBase.h (235816 => 235817)


--- trunk/Source/WebCore/Modules/mediastream/RTCRtpSenderReceiverBase.h	2018-09-07 23:00:09 UTC (rev 235816)
+++ trunk/Source/WebCore/Modules/mediastream/RTCRtpSenderReceiverBase.h	2018-09-07 23:07:53 UTC (rev 235817)
@@ -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)

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


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp	2018-09-07 23:00:09 UTC (rev 235816)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp	2018-09-07 23:07:53 UTC (rev 235817)
@@ -367,7 +367,7 @@
     }
 
     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 @@
         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 @@
 
     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>

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


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp	2018-09-07 23:00:09 UTC (rev 235816)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp	2018-09-07 23:07:53 UTC (rev 235817)
@@ -230,10 +230,10 @@
     // 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 @@
     // 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) };
         }
     }

Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (235816 => 235817)


--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2018-09-07 23:00:09 UTC (rev 235816)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2018-09-07 23:07:53 UTC (rev 235817)
@@ -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 */; };
@@ -8749,7 +8748,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>"; };
@@ -15179,7 +15177,6 @@
 				5E2C435A1BCEE30D0001E2BC /* RTCRtpSender.h */,
 				5E2C435B1BCEE30D0001E2BC /* RTCRtpSender.idl */,
 				41D1A046213EDDEB0063FB6B /* RTCRtpSenderBackend.h */,
-				5E2C435D1BCEE30D0001E2BC /* RTCRtpSenderReceiverBase.h */,
 				5E5E2B101CFC3E4B000C0D85 /* RTCRtpTransceiver.cpp */,
 				5E5E2B111CFC3E4B000C0D85 /* RTCRtpTransceiver.h */,
 				5E5E2B121CFC3E4B000C0D85 /* RTCRtpTransceiver.idl */,
@@ -30083,7 +30080,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 */,
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to