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..610897f35b2ec74a3e696431a79a771670213803 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" |
@@ -183,14 +185,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 +210,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 +253,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 +298,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()); |
@@ -467,7 +482,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 +492,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 +510,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 +529,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 +549,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 +563,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 +571,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 +579,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 +587,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 +595,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 +608,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 +616,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 +624,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 +632,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 +640,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 +648,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 +656,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 +679,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 +717,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 +733,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; |
@@ -727,11 +749,13 @@ TEST_F(RTCPeerConnectionHandlerTest, RemoteTrackState) { |
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()); |
} |
@@ -744,7 +768,8 @@ TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddAudioTrackFromRemoteStream) { |
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(); |
{ |
@@ -759,6 +784,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 +796,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()); |
@@ -783,7 +810,8 @@ TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddVideoTrackFromRemoteStream) { |
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(); |
{ |
@@ -798,6 +826,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,6 +837,7 @@ 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()); |
@@ -822,7 +852,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 +864,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) { |