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

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

Issue 597283006: Updated the MockWebRtcPeerConnectionHandler used in blink Layouttests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments. Created 6 years, 2 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
« no previous file with comments | « content/shell/renderer/test_runner/mock_webrtc_peer_connection_handler.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/shell/renderer/test_runner/mock_webrtc_peer_connection_handler.cc
diff --git a/content/shell/renderer/test_runner/mock_webrtc_peer_connection_handler.cc b/content/shell/renderer/test_runner/mock_webrtc_peer_connection_handler.cc
index 341c95289b4b2802337be8b2e9d79cf14b38f2b3..815510b961c93a97718415908b6871c45c70c8ba 100644
--- a/content/shell/renderer/test_runner/mock_webrtc_peer_connection_handler.cc
+++ b/content/shell/renderer/test_runner/mock_webrtc_peer_connection_handler.cc
@@ -11,6 +11,7 @@
#include "content/shell/renderer/test_runner/web_test_delegate.h"
#include "third_party/WebKit/public/platform/WebMediaConstraints.h"
#include "third_party/WebKit/public/platform/WebMediaStream.h"
+#include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
#include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
#include "third_party/WebKit/public/platform/WebRTCDataChannelInit.h"
#include "third_party/WebKit/public/platform/WebRTCPeerConnectionHandlerClient.h"
@@ -147,6 +148,9 @@ class RemoteDataChannelTask
MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler() {
}
+MockWebRTCPeerConnectionHandler::~MockWebRTCPeerConnectionHandler() {
+}
+
MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler(
WebRTCPeerConnectionHandlerClient* client,
TestInterfaces* interfaces)
@@ -223,7 +227,9 @@ void MockWebRTCPeerConnectionHandler::setLocalDescription(
void MockWebRTCPeerConnectionHandler::setRemoteDescription(
const WebRTCVoidRequest& request,
const WebRTCSessionDescription& remote_description) {
+
if (!remote_description.isNull() && remote_description.sdp() == "remote") {
+ UpdateRemoteStreams();
remote_description_ = remote_description;
interfaces_->GetDelegate()->PostTask(
new RTCVoidRequestTask(this, request, true));
@@ -232,6 +238,84 @@ void MockWebRTCPeerConnectionHandler::setRemoteDescription(
new RTCVoidRequestTask(this, request, false));
}
+void MockWebRTCPeerConnectionHandler::UpdateRemoteStreams() {
+ // Find all removed streams.
+ // Set the readyState of the remote tracks to ended, remove them from the
+ // stream and notify the client.
+ StreamMap::iterator removed_it = remote_streams_.begin();
+ while (removed_it != remote_streams_.end()) {
+ if (local_streams_.find(removed_it->first) != local_streams_.end()) {
+ removed_it++;
+ continue;
+ }
+
+ // The stream have been removed. Loop through all tracks and set the
+ // source as ended and remove them from the stream.
+ blink::WebMediaStream stream = removed_it->second;
+ blink::WebVector<blink::WebMediaStreamTrack> audio_tracks;
+ stream.audioTracks(audio_tracks);
+ for (size_t i = 0; i < audio_tracks.size(); ++i) {
+ audio_tracks[i].source().setReadyState(
+ blink::WebMediaStreamSource::ReadyStateEnded);
+ stream.removeTrack(audio_tracks[i]);
+ }
+
+ blink::WebVector<blink::WebMediaStreamTrack> video_tracks;
+ stream.videoTracks(video_tracks);
+ for (size_t i = 0; i < video_tracks.size(); ++i) {
+ video_tracks[i].source().setReadyState(
+ blink::WebMediaStreamSource::ReadyStateEnded);
+ stream.removeTrack(video_tracks[i]);
+ }
+ client_->didRemoveRemoteStream(stream);
+ remote_streams_.erase(removed_it++);
+ }
+
+ // Find all new streams;
+ // Create new sources and tracks and notify the client about the new stream.
+ StreamMap::iterator added_it = local_streams_.begin();
+ while (added_it != local_streams_.end()) {
+ if (remote_streams_.find(added_it->first) != remote_streams_.end()) {
+ added_it++;
+ continue;
+ }
+
+ const blink::WebMediaStream& stream = added_it->second;
+
+ blink::WebVector<blink::WebMediaStreamTrack> local_audio_tracks;
+ stream.audioTracks(local_audio_tracks);
+ blink::WebVector<blink::WebMediaStreamTrack>
+ remote_audio_tracks(local_audio_tracks.size());
+
+ for (size_t i = 0; i < local_audio_tracks.size(); ++i) {
+ blink::WebMediaStreamSource webkit_source;
+ webkit_source.initialize(local_audio_tracks[i].id(),
+ blink::WebMediaStreamSource::TypeAudio,
+ local_audio_tracks[i].id());
+ remote_audio_tracks[i].initialize(webkit_source);
+ }
+
+ blink::WebVector<blink::WebMediaStreamTrack> local_video_tracks;
+ stream.videoTracks(local_video_tracks);
+ blink::WebVector<blink::WebMediaStreamTrack>
+ remote_video_tracks(local_video_tracks.size());
+ for (size_t i = 0; i < local_video_tracks.size(); ++i) {
+ blink::WebMediaStreamSource webkit_source;
+ webkit_source.initialize(local_video_tracks[i].id(),
+ blink::WebMediaStreamSource::TypeVideo,
+ local_video_tracks[i].id());
+ remote_video_tracks[i].initialize(webkit_source);
+ }
+
+ blink::WebMediaStream new_remote_stream;
+ new_remote_stream.initialize(remote_audio_tracks,
+ remote_video_tracks);
+ remote_streams_[added_it->first] = new_remote_stream;
+ client_->didAddRemoteStream(new_remote_stream);
+ ++added_it;
+ }
+}
+
WebRTCSessionDescription MockWebRTCPeerConnectionHandler::localDescription() {
return local_description_;
}
@@ -263,14 +347,18 @@ bool MockWebRTCPeerConnectionHandler::addICECandidate(
bool MockWebRTCPeerConnectionHandler::addStream(
const WebMediaStream& stream,
const WebMediaConstraints& constraints) {
+ if (local_streams_.find(stream.id().utf8()) != local_streams_.end())
+ return false;
++stream_count_;
client_->negotiationNeeded();
+ local_streams_[stream.id().utf8()] = stream;
return true;
}
void MockWebRTCPeerConnectionHandler::removeStream(
const WebMediaStream& stream) {
--stream_count_;
+ local_streams_.erase(stream.id().utf8());
client_->negotiationNeeded();
}
« no previous file with comments | « content/shell/renderer/test_runner/mock_webrtc_peer_connection_handler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698