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 */,