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..82a0d1a3ff016788074be1b1c10049d9582c35a8 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" |
@@ -183,14 +184,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 +209,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; |
@@ -249,7 +256,7 @@ class RTCPeerConnectionHandlerTest : public ::testing::Test { |
new MediaStreamTrack( |
WebRtcLocalAudioTrackAdapter::Create(audio_track_label, |
NULL), |
- true)); |
+ true)); |
blink::WebVector<blink::WebMediaStreamTrack> video_tracks( |
static_cast<size_t>(1)); |
blink::WebMediaConstraints constraints; |
@@ -467,7 +474,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 +484,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 +502,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 +521,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 +541,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 +555,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 +563,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 +571,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 +579,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 +587,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 +600,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 +608,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 +616,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 +624,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 +632,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 +640,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 +648,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 +671,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 +709,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 +725,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 +741,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 +760,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 +776,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 +788,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 +802,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 +818,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 +829,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 +844,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 +856,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) { |