Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1567)

Unified Diff: content/shell/test_runner/mock_webrtc_peer_connection_handler.cc

Issue 2951713002: RTCPeerConnection.addTrack and removeTrack added (behind flag) (Closed)
Patch Set: Addressed deadbeef's comments Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 =

Powered by Google App Engine
This is Rietveld 408576698