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

Unified Diff: content/renderer/media/rtc_peer_connection_handler_unittest.cc

Issue 675013005: Split libjingle's signaling thread from the UI thread (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update tests, remove circular dependency Created 6 years, 1 month 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/renderer/media/rtc_peer_connection_handler_unittest.cc
diff --git a/content/renderer/media/rtc_peer_connection_handler_unittest.cc b/content/renderer/media/rtc_peer_connection_handler_unittest.cc
index 247fcc129e1b32bde7d250ef6532ebeb2fb2871d..83899521b147f5a8c8c2f09d62f72a64c2a01fcf 100644
--- a/content/renderer/media/rtc_peer_connection_handler_unittest.cc
+++ b/content/renderer/media/rtc_peer_connection_handler_unittest.cc
@@ -7,6 +7,7 @@
#include "base/memory/scoped_ptr.h"
#include "base/message_loop/message_loop.h"
+#include "base/run_loop.h"
#include "base/strings/utf_string_conversions.h"
#include "base/values.h"
#include "content/child/child_process.h"
@@ -14,6 +15,7 @@
#include "content/renderer/media/media_stream_audio_source.h"
#include "content/renderer/media/media_stream_source.h"
#include "content/renderer/media/media_stream_video_track.h"
+#include "content/renderer/media/mock_media_constraint_factory.h"
#include "content/renderer/media/mock_media_stream_video_source.h"
#include "content/renderer/media/mock_peer_connection_impl.h"
#include "content/renderer/media/mock_web_rtc_peer_connection_handler_client.h"
@@ -22,7 +24,7 @@
#include "content/renderer/media/rtc_peer_connection_handler.h"
#include "content/renderer/media/webrtc/mock_peer_connection_dependency_factory.h"
#include "content/renderer/media/webrtc/webrtc_local_audio_track_adapter.h"
-#include "content/renderer/media/webrtc_audio_capturer.h"
+#include "content/renderer/media/webrtc_local_audio_track.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/WebKit/public/platform/WebMediaConstraints.h"
@@ -50,9 +52,14 @@ using blink::WebRTCPeerConnectionHandlerClient;
using testing::NiceMock;
using testing::_;
using testing::Ref;
+using testing::SaveArg;
namespace content {
+ACTION_P2(ExitMessageLoop, message_loop, quit_closure) {
+ message_loop->PostTask(FROM_HERE, quit_closure);
+}
+
class MockRTCStatsResponse : public LocalRTCStatsResponse {
public:
MockRTCStatsResponse()
@@ -132,9 +139,9 @@ class MockPeerConnectionTracker : public PeerConnectionTracker {
MOCK_METHOD2(TrackCreateAnswer,
void(RTCPeerConnectionHandler* pc_handler,
const RTCMediaConstraints& constraints));
- MOCK_METHOD3(TrackSetSessionDescription,
+ MOCK_METHOD4(TrackSetSessionDescription,
void(RTCPeerConnectionHandler* pc_handler,
- const blink::WebRTCSessionDescription& desc,
+ const std::string& sdp, const std::string& type,
Source source));
MOCK_METHOD3(
TrackUpdateIce,
@@ -183,14 +190,19 @@ class RTCPeerConnectionHandlerUnderTest : public RTCPeerConnectionHandler {
public:
RTCPeerConnectionHandlerUnderTest(
WebRTCPeerConnectionHandlerClient* client,
- PeerConnectionDependencyFactory* dependency_factory)
- : RTCPeerConnectionHandler(client, dependency_factory) {
+ PeerConnectionDependencyFactory* dependency_factory,
+ const scoped_refptr<base::SingleThreadTaskRunner>& signaling_thread)
+ : RTCPeerConnectionHandler(client, dependency_factory, signaling_thread) {
}
MockPeerConnectionImpl* native_peer_connection() {
return static_cast<MockPeerConnectionImpl*>(
RTCPeerConnectionHandler::native_peer_connection());
}
+
+ webrtc::PeerConnectionObserver* observer() {
+ return native_peer_connection()->observer();
+ }
};
class RTCPeerConnectionHandlerTest : public ::testing::Test {
@@ -203,8 +215,9 @@ class RTCPeerConnectionHandlerTest : public ::testing::Test {
mock_client_.reset(new NiceMock<MockWebRTCPeerConnectionHandlerClient>());
mock_dependency_factory_.reset(new MockPeerConnectionDependencyFactory());
pc_handler_.reset(
- new RTCPeerConnectionHandlerUnderTest(mock_client_.get(),
- mock_dependency_factory_.get()));
+ new RTCPeerConnectionHandlerUnderTest(
+ mock_client_.get(), mock_dependency_factory_.get(),
+ message_loop_.message_loop_proxy()));
mock_tracker_.reset(new NiceMock<MockPeerConnectionTracker>());
blink::WebRTCConfiguration config;
blink::WebMediaConstraints constraints;
@@ -245,17 +258,25 @@ class RTCPeerConnectionHandlerTest : public ::testing::Test {
blink::WebVector<blink::WebMediaStreamTrack> audio_tracks(
static_cast<size_t>(1));
audio_tracks[0].initialize(audio_source.id(), audio_source);
- audio_tracks[0].setExtraData(
- new MediaStreamTrack(
- WebRtcLocalAudioTrackAdapter::Create(audio_track_label,
- NULL),
- true));
+ StreamDeviceInfo device_info(MEDIA_DEVICE_AUDIO_CAPTURE, "Mock device",
+ "mock_device_id");
+ MockMediaConstraintFactory constraint_factory;
+ const blink::WebMediaConstraints constraints =
+ constraint_factory.CreateWebMediaConstraints();
+ scoped_refptr<WebRtcAudioCapturer> capturer(
+ WebRtcAudioCapturer::CreateCapturer(
+ -1, device_info, constraints, nullptr, nullptr));
+ scoped_refptr<WebRtcLocalAudioTrackAdapter> adapter(
+ WebRtcLocalAudioTrackAdapter::Create(audio_track_label, nullptr));
+ scoped_ptr<WebRtcLocalAudioTrack> native_track(
+ new WebRtcLocalAudioTrack(adapter.get(), capturer, nullptr));
+ audio_tracks[0].setExtraData(native_track.release());
blink::WebVector<blink::WebMediaStreamTrack> video_tracks(
static_cast<size_t>(1));
- blink::WebMediaConstraints constraints;
- constraints.initialize();
+ blink::WebMediaConstraints video_constraints;
+ video_constraints.initialize();
video_tracks[0] = MediaStreamVideoTrack::CreateVideoTrack(
- native_video_source, constraints,
+ native_video_source, video_constraints,
MediaStreamVideoSource::ConstraintsCallback(), true);
blink::WebMediaStream local_stream;
@@ -282,7 +303,6 @@ class RTCPeerConnectionHandlerTest : public ::testing::Test {
stream->AddTrack(video_track.get());
}
if (!audio_track_label.empty()) {
- scoped_refptr<WebRtcAudioCapturer> capturer;
scoped_refptr<webrtc::AudioTrackInterface> audio_track(
WebRtcLocalAudioTrackAdapter::Create(audio_track_label, NULL));
stream->AddTrack(audio_track.get());
@@ -341,7 +361,8 @@ TEST_F(RTCPeerConnectionHandlerTest, setLocalDescription) {
// before |mock_peer_connection| is called.
testing::InSequence sequence;
EXPECT_CALL(*mock_tracker_.get(),
- TrackSetSessionDescription(pc_handler_.get(), Ref(description),
+ TrackSetSessionDescription(pc_handler_.get(), kDummySdp,
+ kDummySdpType,
PeerConnectionTracker::SOURCE_LOCAL));
EXPECT_CALL(*mock_peer_connection_, SetLocalDescription(_, _));
@@ -365,7 +386,8 @@ TEST_F(RTCPeerConnectionHandlerTest, setRemoteDescription) {
// before |mock_peer_connection| is called.
testing::InSequence sequence;
EXPECT_CALL(*mock_tracker_.get(),
- TrackSetSessionDescription(pc_handler_.get(), Ref(description),
+ TrackSetSessionDescription(pc_handler_.get(), kDummySdp,
+ kDummySdpType,
PeerConnectionTracker::SOURCE_REMOTE));
EXPECT_CALL(*mock_peer_connection_, SetRemoteDescription(_, _));
@@ -467,7 +489,7 @@ TEST_F(RTCPeerConnectionHandlerTest, GetStatsNoSelector) {
scoped_refptr<MockRTCStatsRequest> request(
new rtc::RefCountedObject<MockRTCStatsRequest>());
pc_handler_->getStats(request.get());
- // Note that callback gets executed synchronously by mock.
+ base::RunLoop().RunUntilIdle();
ASSERT_TRUE(request->result());
EXPECT_LT(1, request->result()->report_count());
}
@@ -477,7 +499,7 @@ TEST_F(RTCPeerConnectionHandlerTest, GetStatsAfterClose) {
new rtc::RefCountedObject<MockRTCStatsRequest>());
pc_handler_->stop();
pc_handler_->getStats(request.get());
- // Note that callback gets executed synchronously by mock.
+ base::RunLoop().RunUntilIdle();
ASSERT_TRUE(request->result());
EXPECT_LT(1, request->result()->report_count());
}
@@ -495,13 +517,15 @@ TEST_F(RTCPeerConnectionHandlerTest, GetStatsWithLocalSelector) {
new rtc::RefCountedObject<MockRTCStatsRequest>());
request->setSelector(tracks[0]);
pc_handler_->getStats(request.get());
+ base::RunLoop().RunUntilIdle();
EXPECT_EQ(1, request->result()->report_count());
}
TEST_F(RTCPeerConnectionHandlerTest, GetStatsWithRemoteSelector) {
scoped_refptr<webrtc::MediaStreamInterface> stream(
AddRemoteMockMediaStream("remote_stream", "video", "audio"));
- pc_handler_->OnAddStream(stream.get());
+ pc_handler_->observer()->OnAddStream(stream.get());
+ base::RunLoop().RunUntilIdle();
const blink::WebMediaStream& remote_stream = mock_client_->remote_stream();
blink::WebVector<blink::WebMediaStreamTrack> tracks;
@@ -512,6 +536,7 @@ TEST_F(RTCPeerConnectionHandlerTest, GetStatsWithRemoteSelector) {
new rtc::RefCountedObject<MockRTCStatsRequest>());
request->setSelector(tracks[0]);
pc_handler_->getStats(request.get());
+ base::RunLoop().RunUntilIdle();
EXPECT_EQ(1, request->result()->report_count());
}
@@ -531,6 +556,7 @@ TEST_F(RTCPeerConnectionHandlerTest, GetStatsWithBadSelector) {
new rtc::RefCountedObject<MockRTCStatsRequest>());
request->setSelector(component);
pc_handler_->getStats(request.get());
+ base::RunLoop().RunUntilIdle();
EXPECT_EQ(0, request->result()->report_count());
}
@@ -544,7 +570,7 @@ TEST_F(RTCPeerConnectionHandlerTest, OnSignalingChange) {
WebRTCPeerConnectionHandlerClient::SignalingStateHaveRemoteOffer));
EXPECT_CALL(*mock_client_.get(), didChangeSignalingState(
WebRTCPeerConnectionHandlerClient::SignalingStateHaveRemoteOffer));
- pc_handler_->OnSignalingChange(new_state);
+ pc_handler_->observer()->OnSignalingChange(new_state);
new_state = webrtc::PeerConnectionInterface::kHaveLocalPrAnswer;
EXPECT_CALL(*mock_tracker_.get(), TrackSignalingStateChange(
@@ -552,7 +578,7 @@ TEST_F(RTCPeerConnectionHandlerTest, OnSignalingChange) {
WebRTCPeerConnectionHandlerClient::SignalingStateHaveLocalPrAnswer));
EXPECT_CALL(*mock_client_.get(), didChangeSignalingState(
WebRTCPeerConnectionHandlerClient::SignalingStateHaveLocalPrAnswer));
- pc_handler_->OnSignalingChange(new_state);
+ pc_handler_->observer()->OnSignalingChange(new_state);
new_state = webrtc::PeerConnectionInterface::kHaveLocalOffer;
EXPECT_CALL(*mock_tracker_.get(), TrackSignalingStateChange(
@@ -560,7 +586,7 @@ TEST_F(RTCPeerConnectionHandlerTest, OnSignalingChange) {
WebRTCPeerConnectionHandlerClient::SignalingStateHaveLocalOffer));
EXPECT_CALL(*mock_client_.get(), didChangeSignalingState(
WebRTCPeerConnectionHandlerClient::SignalingStateHaveLocalOffer));
- pc_handler_->OnSignalingChange(new_state);
+ pc_handler_->observer()->OnSignalingChange(new_state);
new_state = webrtc::PeerConnectionInterface::kHaveRemotePrAnswer;
EXPECT_CALL(*mock_tracker_.get(), TrackSignalingStateChange(
@@ -568,7 +594,7 @@ TEST_F(RTCPeerConnectionHandlerTest, OnSignalingChange) {
WebRTCPeerConnectionHandlerClient::SignalingStateHaveRemotePrAnswer));
EXPECT_CALL(*mock_client_.get(), didChangeSignalingState(
WebRTCPeerConnectionHandlerClient::SignalingStateHaveRemotePrAnswer));
- pc_handler_->OnSignalingChange(new_state);
+ pc_handler_->observer()->OnSignalingChange(new_state);
new_state = webrtc::PeerConnectionInterface::kClosed;
EXPECT_CALL(*mock_tracker_.get(), TrackSignalingStateChange(
@@ -576,7 +602,7 @@ TEST_F(RTCPeerConnectionHandlerTest, OnSignalingChange) {
WebRTCPeerConnectionHandlerClient::SignalingStateClosed));
EXPECT_CALL(*mock_client_.get(), didChangeSignalingState(
WebRTCPeerConnectionHandlerClient::SignalingStateClosed));
- pc_handler_->OnSignalingChange(new_state);
+ pc_handler_->observer()->OnSignalingChange(new_state);
}
TEST_F(RTCPeerConnectionHandlerTest, OnIceConnectionChange) {
@@ -589,7 +615,7 @@ TEST_F(RTCPeerConnectionHandlerTest, OnIceConnectionChange) {
WebRTCPeerConnectionHandlerClient::ICEConnectionStateStarting));
EXPECT_CALL(*mock_client_.get(), didChangeICEConnectionState(
WebRTCPeerConnectionHandlerClient::ICEConnectionStateStarting));
- pc_handler_->OnIceConnectionChange(new_state);
+ pc_handler_->observer()->OnIceConnectionChange(new_state);
new_state = webrtc::PeerConnectionInterface::kIceConnectionChecking;
EXPECT_CALL(*mock_tracker_.get(), TrackIceConnectionStateChange(
@@ -597,7 +623,7 @@ TEST_F(RTCPeerConnectionHandlerTest, OnIceConnectionChange) {
WebRTCPeerConnectionHandlerClient::ICEConnectionStateChecking));
EXPECT_CALL(*mock_client_.get(), didChangeICEConnectionState(
WebRTCPeerConnectionHandlerClient::ICEConnectionStateChecking));
- pc_handler_->OnIceConnectionChange(new_state);
+ pc_handler_->observer()->OnIceConnectionChange(new_state);
new_state = webrtc::PeerConnectionInterface::kIceConnectionConnected;
EXPECT_CALL(*mock_tracker_.get(), TrackIceConnectionStateChange(
@@ -605,7 +631,7 @@ TEST_F(RTCPeerConnectionHandlerTest, OnIceConnectionChange) {
WebRTCPeerConnectionHandlerClient::ICEConnectionStateConnected));
EXPECT_CALL(*mock_client_.get(), didChangeICEConnectionState(
WebRTCPeerConnectionHandlerClient::ICEConnectionStateConnected));
- pc_handler_->OnIceConnectionChange(new_state);
+ pc_handler_->observer()->OnIceConnectionChange(new_state);
new_state = webrtc::PeerConnectionInterface::kIceConnectionCompleted;
EXPECT_CALL(*mock_tracker_.get(), TrackIceConnectionStateChange(
@@ -613,7 +639,7 @@ TEST_F(RTCPeerConnectionHandlerTest, OnIceConnectionChange) {
WebRTCPeerConnectionHandlerClient::ICEConnectionStateCompleted));
EXPECT_CALL(*mock_client_.get(), didChangeICEConnectionState(
WebRTCPeerConnectionHandlerClient::ICEConnectionStateCompleted));
- pc_handler_->OnIceConnectionChange(new_state);
+ pc_handler_->observer()->OnIceConnectionChange(new_state);
new_state = webrtc::PeerConnectionInterface::kIceConnectionFailed;
EXPECT_CALL(*mock_tracker_.get(), TrackIceConnectionStateChange(
@@ -621,7 +647,7 @@ TEST_F(RTCPeerConnectionHandlerTest, OnIceConnectionChange) {
WebRTCPeerConnectionHandlerClient::ICEConnectionStateFailed));
EXPECT_CALL(*mock_client_.get(), didChangeICEConnectionState(
WebRTCPeerConnectionHandlerClient::ICEConnectionStateFailed));
- pc_handler_->OnIceConnectionChange(new_state);
+ pc_handler_->observer()->OnIceConnectionChange(new_state);
new_state = webrtc::PeerConnectionInterface::kIceConnectionDisconnected;
EXPECT_CALL(*mock_tracker_.get(), TrackIceConnectionStateChange(
@@ -629,7 +655,7 @@ TEST_F(RTCPeerConnectionHandlerTest, OnIceConnectionChange) {
WebRTCPeerConnectionHandlerClient::ICEConnectionStateDisconnected));
EXPECT_CALL(*mock_client_.get(), didChangeICEConnectionState(
WebRTCPeerConnectionHandlerClient::ICEConnectionStateDisconnected));
- pc_handler_->OnIceConnectionChange(new_state);
+ pc_handler_->observer()->OnIceConnectionChange(new_state);
new_state = webrtc::PeerConnectionInterface::kIceConnectionClosed;
EXPECT_CALL(*mock_tracker_.get(), TrackIceConnectionStateChange(
@@ -637,7 +663,7 @@ TEST_F(RTCPeerConnectionHandlerTest, OnIceConnectionChange) {
WebRTCPeerConnectionHandlerClient::ICEConnectionStateClosed));
EXPECT_CALL(*mock_client_.get(), didChangeICEConnectionState(
WebRTCPeerConnectionHandlerClient::ICEConnectionStateClosed));
- pc_handler_->OnIceConnectionChange(new_state);
+ pc_handler_->observer()->OnIceConnectionChange(new_state);
}
TEST_F(RTCPeerConnectionHandlerTest, OnIceGatheringChange) {
@@ -660,13 +686,13 @@ TEST_F(RTCPeerConnectionHandlerTest, OnIceGatheringChange) {
webrtc::PeerConnectionInterface::IceGatheringState new_state =
webrtc::PeerConnectionInterface::kIceGatheringNew;
- pc_handler_->OnIceGatheringChange(new_state);
+ pc_handler_->observer()->OnIceGatheringChange(new_state);
new_state = webrtc::PeerConnectionInterface::kIceGatheringGathering;
- pc_handler_->OnIceGatheringChange(new_state);
+ pc_handler_->observer()->OnIceGatheringChange(new_state);
new_state = webrtc::PeerConnectionInterface::kIceGatheringComplete;
- pc_handler_->OnIceGatheringChange(new_state);
+ pc_handler_->observer()->OnIceGatheringChange(new_state);
// Check NULL candidate after ice gathering is completed.
EXPECT_EQ("", mock_client_->candidate_mid());
@@ -698,8 +724,10 @@ TEST_F(RTCPeerConnectionHandlerTest, OnAddAndOnRemoveStream) {
testing::Property(&blink::WebMediaStream::id,
base::UTF8ToUTF16(remote_stream_label))));
- pc_handler_->OnAddStream(remote_stream.get());
- pc_handler_->OnRemoveStream(remote_stream.get());
+ pc_handler_->observer()->OnAddStream(remote_stream.get());
+ base::RunLoop().RunUntilIdle();
+ pc_handler_->observer()->OnRemoveStream(remote_stream.get());
+ base::RunLoop().RunUntilIdle();
}
// This test that WebKit is notified about remote track state changes.
@@ -712,7 +740,8 @@ TEST_F(RTCPeerConnectionHandlerTest, RemoteTrackState) {
EXPECT_CALL(*mock_client_.get(), didAddRemoteStream(
testing::Property(&blink::WebMediaStream::id,
base::UTF8ToUTF16(remote_stream_label))));
- pc_handler_->OnAddStream(remote_stream.get());
+ pc_handler_->observer()->OnAddStream(remote_stream.get());
+ base::RunLoop().RunUntilIdle();
const blink::WebMediaStream& webkit_stream = mock_client_->remote_stream();
blink::WebVector<blink::WebMediaStreamTrack> audio_tracks;
@@ -721,31 +750,40 @@ TEST_F(RTCPeerConnectionHandlerTest, RemoteTrackState) {
audio_tracks[0].source().readyState());
blink::WebVector<blink::WebMediaStreamTrack> video_tracks;
- webkit_stream.videoTracks(video_tracks);
+ webkit_stream.videoTracks(video_tracks);
EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive,
video_tracks[0].source().readyState());
remote_stream->GetAudioTracks()[0]->set_state(
webrtc::MediaStreamTrackInterface::kEnded);
+ base::RunLoop().RunUntilIdle();
EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded,
audio_tracks[0].source().readyState());
remote_stream->GetVideoTracks()[0]->set_state(
webrtc::MediaStreamTrackInterface::kEnded);
+ base::RunLoop().RunUntilIdle();
EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded,
video_tracks[0].source().readyState());
}
TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddAudioTrackFromRemoteStream) {
std::string remote_stream_label("remote_stream");
- scoped_refptr<webrtc::MediaStreamInterface> remote_stream(
- AddRemoteMockMediaStream(remote_stream_label, "video", "audio"));
+ base::RunLoop run_loop;
+ // Grab the added media stream when it's been successfully added to the PC.
+ blink::WebMediaStream webkit_stream;
EXPECT_CALL(*mock_client_.get(), didAddRemoteStream(
testing::Property(&blink::WebMediaStream::id,
- base::UTF8ToUTF16(remote_stream_label))));
- pc_handler_->OnAddStream(remote_stream.get());
- const blink::WebMediaStream& webkit_stream = mock_client_->remote_stream();
+ base::UTF8ToUTF16(remote_stream_label))))
+ .WillOnce(
+ DoAll(SaveArg<0>(&webkit_stream),
+ ExitMessageLoop(&message_loop_, run_loop.QuitClosure())));
+
+ scoped_refptr<webrtc::MediaStreamInterface> remote_stream(
+ AddRemoteMockMediaStream(remote_stream_label, "video", "audio"));
+ pc_handler_->observer()->OnAddStream(remote_stream.get());
+ run_loop.Run();
{
// Test in a small scope so that |audio_tracks| don't hold on to destroyed
@@ -759,6 +797,7 @@ TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddAudioTrackFromRemoteStream) {
scoped_refptr<webrtc::AudioTrackInterface> webrtc_track =
remote_stream->GetAudioTracks()[0].get();
remote_stream->RemoveTrack(webrtc_track.get());
+ base::RunLoop().RunUntilIdle();
{
blink::WebVector<blink::WebMediaStreamTrack> modified_audio_tracks1;
@@ -770,6 +809,7 @@ TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddAudioTrackFromRemoteStream) {
// Add the WebRtc audio track again.
remote_stream->AddTrack(webrtc_track.get());
+ base::RunLoop().RunUntilIdle();
blink::WebVector<blink::WebMediaStreamTrack> modified_audio_tracks2;
webkit_stream.audioTracks(modified_audio_tracks2);
EXPECT_EQ(1u, modified_audio_tracks2.size());
@@ -777,14 +817,21 @@ TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddAudioTrackFromRemoteStream) {
TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddVideoTrackFromRemoteStream) {
std::string remote_stream_label("remote_stream");
- scoped_refptr<webrtc::MediaStreamInterface> remote_stream(
- AddRemoteMockMediaStream(remote_stream_label, "video", "video"));
+ base::RunLoop run_loop;
+ // Grab the added media stream when it's been successfully added to the PC.
+ blink::WebMediaStream webkit_stream;
EXPECT_CALL(*mock_client_.get(), didAddRemoteStream(
testing::Property(&blink::WebMediaStream::id,
- base::UTF8ToUTF16(remote_stream_label))));
- pc_handler_->OnAddStream(remote_stream.get());
- const blink::WebMediaStream& webkit_stream = mock_client_->remote_stream();
+ base::UTF8ToUTF16(remote_stream_label))))
+ .WillOnce(
+ DoAll(SaveArg<0>(&webkit_stream),
+ ExitMessageLoop(&message_loop_, run_loop.QuitClosure())));
+
+ scoped_refptr<webrtc::MediaStreamInterface> remote_stream(
+ AddRemoteMockMediaStream(remote_stream_label, "video", "audio"));
+ pc_handler_->observer()->OnAddStream(remote_stream.get());
+ run_loop.Run();
{
// Test in a small scope so that |video_tracks| don't hold on to destroyed
@@ -798,6 +845,7 @@ TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddVideoTrackFromRemoteStream) {
scoped_refptr<webrtc::VideoTrackInterface> webrtc_track =
remote_stream->GetVideoTracks()[0].get();
remote_stream->RemoveTrack(webrtc_track.get());
+ base::RunLoop().RunUntilIdle();
{
blink::WebVector<blink::WebMediaStreamTrack> modified_video_tracks1;
webkit_stream.videoTracks(modified_video_tracks1);
@@ -808,11 +856,75 @@ TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddVideoTrackFromRemoteStream) {
// Add the WebRtc video track again.
remote_stream->AddTrack(webrtc_track.get());
+ base::RunLoop().RunUntilIdle();
blink::WebVector<blink::WebMediaStreamTrack> modified_video_tracks2;
webkit_stream.videoTracks(modified_video_tracks2);
EXPECT_EQ(1u, modified_video_tracks2.size());
}
+TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddTracksFromRemoteStream) {
+ std::string remote_stream_label("remote_stream");
+ base::RunLoop run_loop;
+
+ // Grab the added media stream when it's been successfully added to the PC.
+ blink::WebMediaStream webkit_stream;
+ EXPECT_CALL(*mock_client_.get(), didAddRemoteStream(
+ testing::Property(&blink::WebMediaStream::id,
+ base::UTF8ToUTF16(remote_stream_label))))
+ .WillOnce(
+ DoAll(SaveArg<0>(&webkit_stream),
+ ExitMessageLoop(&message_loop_, run_loop.QuitClosure())));
+
+ scoped_refptr<webrtc::MediaStreamInterface> remote_stream(
+ AddRemoteMockMediaStream(remote_stream_label, "video", "audio"));
+ pc_handler_->observer()->OnAddStream(remote_stream.get());
+ run_loop.Run();
+
+ {
+ // Test in a small scope so that |audio_tracks| don't hold on to destroyed
+ // source later.
+ blink::WebVector<blink::WebMediaStreamTrack> audio_tracks;
+ webkit_stream.audioTracks(audio_tracks);
+ EXPECT_EQ(1u, audio_tracks.size());
+ blink::WebVector<blink::WebMediaStreamTrack> video_tracks;
+ webkit_stream.videoTracks(video_tracks);
+ EXPECT_EQ(1u, video_tracks.size());
+ }
+
+ // Remove the Webrtc tracks from the MediaStream.
+ auto audio_track = remote_stream->GetAudioTracks()[0];
+ EXPECT_TRUE(remote_stream->RemoveTrack(audio_track.get()));
+ auto video_track = remote_stream->GetVideoTracks()[0];
+ EXPECT_TRUE(remote_stream->RemoveTrack(video_track.get()));
+ base::RunLoop().RunUntilIdle();
+
+ {
+ blink::WebVector<blink::WebMediaStreamTrack> modified_audio_tracks;
+ webkit_stream.audioTracks(modified_audio_tracks);
+ EXPECT_EQ(0u, modified_audio_tracks.size());
+ blink::WebVector<blink::WebMediaStreamTrack> modified_video_tracks;
+ webkit_stream.videoTracks(modified_video_tracks);
+ EXPECT_EQ(0u, modified_video_tracks.size());
+ }
+
+ blink::WebHeap::collectGarbageForTesting();
+
+ // Add the tracks again.
+ remote_stream->AddTrack(audio_track.get());
+ base::RunLoop().RunUntilIdle();
+ remote_stream->AddTrack(video_track.get());
+ base::RunLoop().RunUntilIdle();
+
+ blink::WebHeap::collectGarbageForTesting();
+
+ blink::WebVector<blink::WebMediaStreamTrack> audio_tracks;
+ webkit_stream.audioTracks(audio_tracks);
+ EXPECT_EQ(1u, audio_tracks.size());
+ blink::WebVector<blink::WebMediaStreamTrack> video_tracks;
+ webkit_stream.videoTracks(video_tracks);
+ EXPECT_EQ(1u, video_tracks.size());
+}
+
TEST_F(RTCPeerConnectionHandlerTest, OnIceCandidate) {
testing::InSequence sequence;
EXPECT_CALL(*mock_tracker_.get(),
@@ -822,7 +934,8 @@ TEST_F(RTCPeerConnectionHandlerTest, OnIceCandidate) {
scoped_ptr<webrtc::IceCandidateInterface> native_candidate(
mock_dependency_factory_->CreateIceCandidate("sdpMid", 1, kDummySdp));
- pc_handler_->OnIceCandidate(native_candidate.get());
+ pc_handler_->observer()->OnIceCandidate(native_candidate.get());
+ base::RunLoop().RunUntilIdle();
EXPECT_EQ("sdpMid", mock_client_->candidate_mid());
EXPECT_EQ(1, mock_client_->candidate_mlineindex());
EXPECT_EQ(kDummySdp, mock_client_->candidate_sdp());
@@ -833,7 +946,7 @@ TEST_F(RTCPeerConnectionHandlerTest, OnRenegotiationNeeded) {
EXPECT_CALL(*mock_tracker_.get(),
TrackOnRenegotiationNeeded(pc_handler_.get()));
EXPECT_CALL(*mock_client_.get(), negotiationNeeded());
- pc_handler_->OnRenegotiationNeeded();
+ pc_handler_->observer()->OnRenegotiationNeeded();
}
TEST_F(RTCPeerConnectionHandlerTest, CreateDataChannel) {

Powered by Google App Engine
This is Rietveld 408576698