Index: content/shell/test_runner/mock_webrtc_peer_connection_handler.cc |
diff --git a/content/shell/test_runner/mock_webrtc_peer_connection_handler.cc b/content/shell/test_runner/mock_webrtc_peer_connection_handler.cc |
index 61082718505918bf98b3cda622bdf1554fb37bc3..8e5512beffb949747bfbcae86daab18828a55464 100644 |
--- a/content/shell/test_runner/mock_webrtc_peer_connection_handler.cc |
+++ b/content/shell/test_runner/mock_webrtc_peer_connection_handler.cc |
@@ -251,6 +251,10 @@ class MockWebRTCRtpSender : public blink::WebRTCRtpSender { |
return track_.get(); |
} |
+ void SetTrack(std::unique_ptr<blink::WebMediaStreamTrack> track) { |
+ track_ = std::move(track); |
+ } |
+ |
private: |
uintptr_t id_; |
std::unique_ptr<blink::WebMediaStreamTrack> track_; |
@@ -638,6 +642,7 @@ void MockWebRTCPeerConnectionHandler::GetStats( |
blink::WebVector<std::unique_ptr<blink::WebRTCRtpSender>> |
MockWebRTCPeerConnectionHandler::GetSenders() { |
std::vector<std::unique_ptr<blink::WebRTCRtpSender>> senders; |
+ // Senders of tracks in |local_streams_| (from |Add/RemoveStream|). |
for (const auto& pair : local_streams_) { |
const auto& local_stream = pair.second; |
blink::WebVector<blink::WebMediaStreamTrack> local_tracks; |
@@ -656,6 +661,22 @@ MockWebRTCPeerConnectionHandler::GetSenders() { |
base::MakeUnique<WebMediaStreamTrack>(local_track)))); |
} |
} |
+ // Senders of tracks in |tracks_| (from |Add/RemoveTrack|). |
+ for (const auto& pair : tracks_) { |
+ const auto& track = pair.second; |
+ bool has_sender_for_track = false; |
+ for (const auto& sender : senders) { |
+ if (sender->Track()->Id() == track.Id()) { |
+ has_sender_for_track = true; |
+ break; |
+ } |
+ } |
+ if (has_sender_for_track) |
+ continue; |
+ senders.push_back(base::MakeUnique<MockWebRTCRtpSender>( |
+ GetIDByTrack(track.Id().Utf8(), &id_by_track_), |
+ base::MakeUnique<WebMediaStreamTrack>(track))); |
+ } |
blink::WebVector<std::unique_ptr<blink::WebRTCRtpSender>> web_vector( |
senders.size()); |
for (size_t i = 0; i < senders.size(); ++i) { |
@@ -693,6 +714,32 @@ MockWebRTCPeerConnectionHandler::GetReceivers() { |
return web_vector; |
} |
+std::unique_ptr<blink::WebRTCRtpSender> |
+MockWebRTCPeerConnectionHandler::AddTrack( |
+ const blink::WebMediaStreamTrack& web_track, |
+ const blink::WebVector<blink::WebMediaStream>& web_streams) { |
+ for (const auto& sender : GetSenders()) { |
+ if (sender->Track() && sender->Track()->Id() == web_track.Id()) { |
+ return nullptr; |
+ } |
+ } |
+ tracks_[web_track.Id().Utf8()] = web_track; |
+ client_->NegotiationNeeded(); |
+ return base::MakeUnique<MockWebRTCRtpSender>( |
+ GetIDByTrack(web_track.Id().Utf8(), &id_by_track_), |
+ base::MakeUnique<blink::WebMediaStreamTrack>(web_track)); |
+} |
+ |
+bool MockWebRTCPeerConnectionHandler::RemoveTrack( |
+ blink::WebRTCRtpSender* web_sender) { |
+ if (!tracks_.erase(web_sender->Track()->Id().Utf8())) |
+ return false; |
+ MockWebRTCRtpSender* sender = static_cast<MockWebRTCRtpSender*>(web_sender); |
+ sender->SetTrack(nullptr); |
+ client_->NegotiationNeeded(); |
+ return true; |
+} |
+ |
void MockWebRTCPeerConnectionHandler::ReportCreationOfDataChannel() { |
WebRTCDataChannelInit init; |
WebRTCDataChannelHandler* remote_data_channel = |