Index: third_party/WebKit/Source/modules/peerconnection/RTCPeerConnection.cpp |
diff --git a/third_party/WebKit/Source/modules/peerconnection/RTCPeerConnection.cpp b/third_party/WebKit/Source/modules/peerconnection/RTCPeerConnection.cpp |
index 63866d30253d725e3f5ecd2e1316ba3f93ab8503..ea2ca61b83382bec9ab05998efaf049707140cef 100644 |
--- a/third_party/WebKit/Source/modules/peerconnection/RTCPeerConnection.cpp |
+++ b/third_party/WebKit/Source/modules/peerconnection/RTCPeerConnection.cpp |
@@ -75,6 +75,7 @@ |
#include "modules/peerconnection/RTCStatsCallback.h" |
#include "modules/peerconnection/RTCStatsReport.h" |
#include "modules/peerconnection/RTCStatsRequestImpl.h" |
+#include "modules/peerconnection/RTCTrackEvent.h" |
#include "modules/peerconnection/RTCVoidRequestImpl.h" |
#include "modules/peerconnection/RTCVoidRequestPromiseImpl.h" |
#include "platform/RuntimeEnabledFeatures.h" |
@@ -1443,7 +1444,8 @@ void RTCPeerConnection::DidChangeICEConnectionState( |
} |
void RTCPeerConnection::DidAddRemoteStream( |
- const WebMediaStream& remote_stream) { |
+ const WebMediaStream& remote_stream, |
+ WebVector<std::unique_ptr<WebRTCRtpReceiver>>* stream_web_rtp_receivers) { |
DCHECK(!closed_); |
DCHECK(GetExecutionContext()->IsContextThread()); |
@@ -1461,6 +1463,35 @@ void RTCPeerConnection::DidAddRemoteStream( |
ScheduleDispatchEvent( |
MediaStreamEvent::Create(EventTypeNames::addstream, stream)); |
+ |
+ // TODO(hbos): ... |
+ HeapVector<Member<MediaStream>> streams(1, stream); |
+ for (auto& track : stream->getTracks()) { |
+ std::unique_ptr<WebRTCRtpReceiver> track_web_rtp_receiver; |
+ for (auto& web_rtp_receiver : *stream_web_rtp_receivers) { |
+ if (static_cast<String>(web_rtp_receiver->Track().Id()) == track->id()) { |
+ track_web_rtp_receiver.reset(web_rtp_receiver.release()); |
+ break; |
+ } |
+ } |
+ DCHECK(track_web_rtp_receiver); |
+ uintptr_t id = track_web_rtp_receiver->Id(); |
+ RTCRtpReceiver* track_rtp_receiver = nullptr; |
+ const auto it = rtp_receivers_.find(id); |
+ if (it != rtp_receivers_.end()) { |
+ track_rtp_receiver = it->value; |
+ } else { |
+ // There does not exist a |RTCRtpReceiver| for this |WebRTCRtpReceiver| |
+ // yet, create it. |
+ MediaStreamTrack* track = GetTrack(track_web_rtp_receiver->Track()); |
+ DCHECK(track); |
+ track_rtp_receiver = |
+ new RTCRtpReceiver(std::move(track_web_rtp_receiver), track); |
+ rtp_receivers_.insert(id, track_rtp_receiver); |
+ } |
+ ScheduleDispatchEvent( |
+ new RTCTrackEvent(track_rtp_receiver, track, streams)); |
+ } |
} |
void RTCPeerConnection::DidRemoveRemoteStream( |