diff options
Diffstat (limited to 'chromium/content/renderer/media/webrtc/rtc_peer_connection_handler_unittest.cc')
-rw-r--r-- | chromium/content/renderer/media/webrtc/rtc_peer_connection_handler_unittest.cc | 446 |
1 files changed, 75 insertions, 371 deletions
diff --git a/chromium/content/renderer/media/webrtc/rtc_peer_connection_handler_unittest.cc b/chromium/content/renderer/media/webrtc/rtc_peer_connection_handler_unittest.cc index 3d9ade84d75..51a6af48d59 100644 --- a/chromium/content/renderer/media/webrtc/rtc_peer_connection_handler_unittest.cc +++ b/chromium/content/renderer/media/webrtc/rtc_peer_connection_handler_unittest.cc @@ -23,7 +23,7 @@ #include "base/threading/thread_task_runner_handle.h" #include "base/values.h" #include "content/child/child_process.h" -#include "content/renderer/media/mock_audio_device_factory.h" +#include "content/renderer/media/audio/mock_audio_device_factory.h" #include "content/renderer/media/stream/media_stream_audio_source.h" #include "content/renderer/media/stream/media_stream_audio_track.h" #include "content/renderer/media/stream/media_stream_source.h" @@ -171,14 +171,21 @@ class MockPeerConnectionTracker : public PeerConnectionTracker { scoped_refptr<blink::WebRTCICECandidate> candidate, Source source, bool succeeded)); - MOCK_METHOD3(TrackAddStream, + MOCK_METHOD4(TrackAddTransceiver, void(RTCPeerConnectionHandler* pc_handler, - const blink::WebMediaStream& stream, - Source source)); - MOCK_METHOD3(TrackRemoveStream, + TransceiverUpdatedReason reason, + const blink::WebRTCRtpTransceiver& transceiver, + size_t transceiver_index)); + MOCK_METHOD4(TrackModifyTransceiver, void(RTCPeerConnectionHandler* pc_handler, - const blink::WebMediaStream& stream, - Source source)); + TransceiverUpdatedReason reason, + const blink::WebRTCRtpTransceiver& transceiver, + size_t transceiver_index)); + MOCK_METHOD4(TrackRemoveTransceiver, + void(RTCPeerConnectionHandler* pc_handler, + TransceiverUpdatedReason reason, + const blink::WebRTCRtpTransceiver& transceiver, + size_t transceiver_index)); MOCK_METHOD1(TrackOnIceComplete, void(RTCPeerConnectionHandler* pc_handler)); MOCK_METHOD3(TrackCreateDataChannel, @@ -188,11 +195,11 @@ class MockPeerConnectionTracker : public PeerConnectionTracker { MOCK_METHOD1(TrackStop, void(RTCPeerConnectionHandler* pc_handler)); MOCK_METHOD2(TrackSignalingStateChange, void(RTCPeerConnectionHandler* pc_handler, - WebRTCPeerConnectionHandlerClient::SignalingState state)); + webrtc::PeerConnectionInterface::SignalingState state)); MOCK_METHOD2( TrackIceConnectionStateChange, void(RTCPeerConnectionHandler* pc_handler, - WebRTCPeerConnectionHandlerClient::ICEConnectionState state)); + MockWebRTCPeerConnectionHandlerClient::ICEConnectionState state)); MOCK_METHOD2( TrackIceGatheringStateChange, void(RTCPeerConnectionHandler* pc_handler, @@ -273,6 +280,7 @@ class RTCPeerConnectionHandlerTest : public ::testing::Test { pc_handler_ = CreateRTCPeerConnectionHandlerUnderTest(); mock_tracker_.reset(new NiceMock<MockPeerConnectionTracker>()); blink::WebRTCConfiguration config; + config.sdp_semantics = blink::WebRTCSdpSemantics::kPlanB; blink::WebMediaConstraints constraints; EXPECT_TRUE(pc_handler_->InitializeForTest( config, constraints, mock_tracker_.get()->AsWeakPtr())); @@ -373,14 +381,9 @@ class RTCPeerConnectionHandlerTest : public ::testing::Test { } void StopAllTracks(const blink::WebMediaStream& stream) { - blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; - stream.AudioTracks(audio_tracks); - for (const auto& track : audio_tracks) + for (const auto& track : stream.AudioTracks()) MediaStreamAudioTrack::From(track)->Stop(); - - blink::WebVector<blink::WebMediaStreamTrack> video_tracks; - stream.VideoTracks(video_tracks); - for (const auto& track : video_tracks) + for (const auto& track : stream.VideoTracks()) MediaStreamVideoTrack::GetVideoTrack(track)->Stop(); } @@ -390,22 +393,26 @@ class RTCPeerConnectionHandlerTest : public ::testing::Test { bool AddStream(const blink::WebMediaStream& web_stream) { size_t senders_size_before_add = senders_.size(); - blink::WebVector<blink::WebMediaStreamTrack> web_audio_tracks; - web_stream.AudioTracks(web_audio_tracks); - for (const auto& web_audio_track : web_audio_tracks) { - auto sender = pc_handler_->AddTrack( + for (const auto& web_audio_track : web_stream.AudioTracks()) { + auto error_or_transceiver = pc_handler_->AddTrack( web_audio_track, std::vector<blink::WebMediaStream>({web_stream})); - if (sender) { + if (error_or_transceiver.ok()) { + DCHECK_EQ( + error_or_transceiver.value()->ImplementationType(), + blink::WebRTCRtpTransceiverImplementationType::kPlanBSenderOnly); + auto sender = error_or_transceiver.value()->Sender(); senders_.push_back(std::unique_ptr<RTCRtpSender>( static_cast<RTCRtpSender*>(sender.release()))); } } - blink::WebVector<blink::WebMediaStreamTrack> web_video_tracks; - web_stream.VideoTracks(web_video_tracks); - for (const auto& web_video_track : web_video_tracks) { - auto sender = pc_handler_->AddTrack( + for (const auto& web_video_track : web_stream.VideoTracks()) { + auto error_or_transceiver = pc_handler_->AddTrack( web_video_track, std::vector<blink::WebMediaStream>({web_stream})); - if (sender) { + if (error_or_transceiver.ok()) { + DCHECK_EQ( + error_or_transceiver.value()->ImplementationType(), + blink::WebRTCRtpTransceiverImplementationType::kPlanBSenderOnly); + auto sender = error_or_transceiver.value()->Sender(); senders_.push_back(std::unique_ptr<RTCRtpSender>( static_cast<RTCRtpSender*>(sender.release()))); } @@ -424,20 +431,16 @@ class RTCPeerConnectionHandlerTest : public ::testing::Test { bool RemoveStream(const blink::WebMediaStream& web_stream) { size_t senders_size_before_remove = senders_.size(); - blink::WebVector<blink::WebMediaStreamTrack> web_audio_tracks; - web_stream.AudioTracks(web_audio_tracks); // TODO(hbos): With Unified Plan senders are not removed. // https://crbug.com/799030 - for (const auto& web_audio_track : web_audio_tracks) { + for (const auto& web_audio_track : web_stream.AudioTracks()) { auto it = FindSenderForTrack(web_audio_track); - if (it != senders_.end() && pc_handler_->RemoveTrack((*it).get())) + if (it != senders_.end() && pc_handler_->RemoveTrack((*it).get()).ok()) senders_.erase(it); } - blink::WebVector<blink::WebMediaStreamTrack> web_video_tracks; - web_stream.VideoTracks(web_video_tracks); - for (const auto& web_video_track : web_video_tracks) { + for (const auto& web_video_track : web_stream.VideoTracks()) { auto it = FindSenderForTrack(web_video_track); - if (it != senders_.end() && pc_handler_->RemoveTrack((*it).get())) + if (it != senders_.end() && pc_handler_->RemoveTrack((*it).get()).ok()) senders_.erase(it); } return senders_size_before_remove > senders_.size(); @@ -607,12 +610,12 @@ TEST_F(RTCPeerConnectionHandlerTest, NoCallbacksToClientAfterStop) { pc_handler_->observer()->OnIceConnectionChange( webrtc::PeerConnectionInterface::kIceConnectionDisconnected); - EXPECT_CALL(*mock_client_.get(), DidAddRemoteTrackForMock(_)).Times(0); + EXPECT_CALL(*mock_client_.get(), DidAddReceiverPlanBForMock(_)).Times(0); rtc::scoped_refptr<webrtc::MediaStreamInterface> remote_stream( AddRemoteMockMediaStream("remote_stream", "video", "audio")); InvokeOnAddStream(remote_stream); - EXPECT_CALL(*mock_client_.get(), DidRemoveRemoteTrackForMock(_)).Times(0); + EXPECT_CALL(*mock_client_.get(), DidRemoveReceiverPlanBForMock(_)).Times(0); InvokeOnRemoveStream(remote_stream); EXPECT_CALL(*mock_client_.get(), DidAddRemoteDataChannel(_)).Times(0); @@ -762,6 +765,7 @@ TEST_F(RTCPeerConnectionHandlerTest, setRemoteDescriptionParseError) { TEST_F(RTCPeerConnectionHandlerTest, setConfiguration) { blink::WebRTCConfiguration config; + config.sdp_semantics = blink::WebRTCSdpSemantics::kPlanB; EXPECT_CALL(*mock_tracker_.get(), TrackSetConfiguration(pc_handler_.get(), _)); @@ -775,6 +779,7 @@ TEST_F(RTCPeerConnectionHandlerTest, setConfiguration) { // blink error and false is returned. TEST_F(RTCPeerConnectionHandlerTest, setConfigurationError) { blink::WebRTCConfiguration config; + config.sdp_semantics = blink::WebRTCSdpSemantics::kPlanB; mock_peer_connection_->set_setconfiguration_error_type( webrtc::RTCErrorType::INVALID_MODIFICATION); @@ -802,22 +807,25 @@ TEST_F(RTCPeerConnectionHandlerTest, addAndRemoveStream) { blink::WebMediaStream local_stream( CreateLocalMediaStream(stream_label)); - EXPECT_CALL(*mock_tracker_.get(), - TrackAddStream(pc_handler_.get(), _, - PeerConnectionTracker::SOURCE_LOCAL)); - EXPECT_CALL(*mock_tracker_.get(), - TrackRemoveStream(pc_handler_.get(), _, - PeerConnectionTracker::SOURCE_LOCAL)); + EXPECT_CALL( + *mock_tracker_.get(), + TrackAddTransceiver( + pc_handler_.get(), + PeerConnectionTracker::TransceiverUpdatedReason::kAddTrack, _, _)) + .Times(2); + EXPECT_CALL( + *mock_tracker_.get(), + TrackRemoveTransceiver( + pc_handler_.get(), + PeerConnectionTracker::TransceiverUpdatedReason::kRemoveTrack, _, _)) + .Times(2); EXPECT_TRUE(AddStream(local_stream)); EXPECT_EQ(stream_label, mock_peer_connection_->stream_label()); - EXPECT_EQ(1u, - mock_peer_connection_->local_streams()->at(0)->GetAudioTracks().size()); - EXPECT_EQ(1u, - mock_peer_connection_->local_streams()->at(0)->GetVideoTracks().size()); + EXPECT_EQ(2u, mock_peer_connection_->GetSenders().size()); EXPECT_FALSE(AddStream(local_stream)); EXPECT_TRUE(RemoveStream(local_stream)); - EXPECT_EQ(0u, mock_peer_connection_->local_streams()->count()); + EXPECT_EQ(0u, mock_peer_connection_->GetSenders().size()); StopAllTracks(local_stream); } @@ -827,14 +835,14 @@ TEST_F(RTCPeerConnectionHandlerTest, addStreamWithStoppedAudioAndVideoTrack) { blink::WebMediaStream local_stream( CreateLocalMediaStream(stream_label)); - blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; - local_stream.AudioTracks(audio_tracks); + blink::WebVector<blink::WebMediaStreamTrack> audio_tracks = + local_stream.AudioTracks(); MediaStreamAudioSource* native_audio_source = MediaStreamAudioSource::From(audio_tracks[0].Source()); native_audio_source->StopSource(); - blink::WebVector<blink::WebMediaStreamTrack> video_tracks; - local_stream.VideoTracks(video_tracks); + blink::WebVector<blink::WebMediaStreamTrack> video_tracks = + local_stream.VideoTracks(); MediaStreamVideoSource* native_video_source = static_cast<MediaStreamVideoSource*>( video_tracks[0].Source().GetExtraData()); @@ -842,12 +850,7 @@ TEST_F(RTCPeerConnectionHandlerTest, addStreamWithStoppedAudioAndVideoTrack) { EXPECT_TRUE(AddStream(local_stream)); EXPECT_EQ(stream_label, mock_peer_connection_->stream_label()); - EXPECT_EQ( - 1u, - mock_peer_connection_->local_streams()->at(0)->GetAudioTracks().size()); - EXPECT_EQ( - 1u, - mock_peer_connection_->local_streams()->at(0)->GetVideoTracks().size()); + EXPECT_EQ(2u, mock_peer_connection_->GetSenders().size()); StopAllTracks(local_stream); } @@ -876,8 +879,8 @@ TEST_F(RTCPeerConnectionHandlerTest, GetStatsWithLocalSelector) { blink::WebMediaStream local_stream( CreateLocalMediaStream("local_stream")); EXPECT_TRUE(AddStream(local_stream)); - blink::WebVector<blink::WebMediaStreamTrack> tracks; - local_stream.AudioTracks(tracks); + blink::WebVector<blink::WebMediaStreamTrack> tracks = + local_stream.AudioTracks(); ASSERT_LE(1ul, tracks.size()); scoped_refptr<MockRTCStatsRequest> request( @@ -890,45 +893,13 @@ TEST_F(RTCPeerConnectionHandlerTest, GetStatsWithLocalSelector) { StopAllTracks(local_stream); } -// TODO(hbos): Enable when not mocking or remove test. https://crbug.com/788659 -TEST_F(RTCPeerConnectionHandlerTest, DISABLED_GetStatsWithRemoteSelector) { - rtc::scoped_refptr<webrtc::MediaStreamInterface> remote_stream( - AddRemoteMockMediaStream("remote_stream", "video", "audio")); - std::vector<std::unique_ptr<blink::WebRTCRtpReceiver>> receivers; - // Grab the added receivers and media stream when it's been successfully added - // to the PC. - blink::WebMediaStream webkit_stream; - EXPECT_CALL(*mock_client_.get(), DidAddRemoteTrackForMock(_)) - .WillRepeatedly( - Invoke([&webkit_stream, &receivers]( - std::unique_ptr<blink::WebRTCRtpReceiver>* receiver) { - webkit_stream = (*receiver)->Streams()[0]; - receivers.push_back(std::move(*receiver)); - })); - InvokeOnAddStream(remote_stream); - RunMessageLoopsUntilIdle(); - EXPECT_TRUE(HasReceiverForEveryTrack(remote_stream, receivers)); - - blink::WebVector<blink::WebMediaStreamTrack> tracks; - webkit_stream.AudioTracks(tracks); - ASSERT_LE(1ul, tracks.size()); - - scoped_refptr<MockRTCStatsRequest> request( - new rtc::RefCountedObject<MockRTCStatsRequest>()); - request->setSelector(tracks[0]); - pc_handler_->getStats(request.get()); - RunMessageLoopsUntilIdle(); - EXPECT_EQ(1, request->result()->report_count()); -} - TEST_F(RTCPeerConnectionHandlerTest, GetStatsWithBadSelector) { // The setup is the same as GetStatsWithLocalSelector, but the stream is not // added to the PeerConnection. blink::WebMediaStream local_stream( CreateLocalMediaStream("local_stream_2")); - blink::WebVector<blink::WebMediaStreamTrack> tracks; - - local_stream.AudioTracks(tracks); + blink::WebVector<blink::WebMediaStreamTrack> tracks = + local_stream.AudioTracks(); blink::WebMediaStreamTrack component = tracks[0]; mock_peer_connection_->SetGetStatsResult(false); @@ -1063,67 +1034,6 @@ TEST_F(RTCPeerConnectionHandlerTest, GetRTCStats) { EXPECT_EQ(defined_stats_count, 1); } -TEST_F(RTCPeerConnectionHandlerTest, OnSignalingChange) { - testing::InSequence sequence; - - webrtc::PeerConnectionInterface::SignalingState new_state = - webrtc::PeerConnectionInterface::kHaveRemoteOffer; - EXPECT_CALL( - *mock_tracker_.get(), - TrackSignalingStateChange( - pc_handler_.get(), - WebRTCPeerConnectionHandlerClient::kSignalingStateHaveRemoteOffer)); - EXPECT_CALL( - *mock_client_.get(), - DidChangeSignalingState( - WebRTCPeerConnectionHandlerClient::kSignalingStateHaveRemoteOffer)); - pc_handler_->observer()->OnSignalingChange(new_state); - - new_state = webrtc::PeerConnectionInterface::kHaveLocalPrAnswer; - EXPECT_CALL( - *mock_tracker_.get(), - TrackSignalingStateChange( - pc_handler_.get(), - WebRTCPeerConnectionHandlerClient::kSignalingStateHaveLocalPrAnswer)); - EXPECT_CALL( - *mock_client_.get(), - DidChangeSignalingState( - WebRTCPeerConnectionHandlerClient::kSignalingStateHaveLocalPrAnswer)); - pc_handler_->observer()->OnSignalingChange(new_state); - - new_state = webrtc::PeerConnectionInterface::kHaveLocalOffer; - EXPECT_CALL( - *mock_tracker_.get(), - TrackSignalingStateChange( - pc_handler_.get(), - WebRTCPeerConnectionHandlerClient::kSignalingStateHaveLocalOffer)); - EXPECT_CALL( - *mock_client_.get(), - DidChangeSignalingState( - WebRTCPeerConnectionHandlerClient::kSignalingStateHaveLocalOffer)); - pc_handler_->observer()->OnSignalingChange(new_state); - - new_state = webrtc::PeerConnectionInterface::kHaveRemotePrAnswer; - EXPECT_CALL(*mock_tracker_.get(), - TrackSignalingStateChange(pc_handler_.get(), - WebRTCPeerConnectionHandlerClient:: - kSignalingStateHaveRemotePrAnswer)); - EXPECT_CALL(*mock_client_.get(), - DidChangeSignalingState(WebRTCPeerConnectionHandlerClient:: - kSignalingStateHaveRemotePrAnswer)); - pc_handler_->observer()->OnSignalingChange(new_state); - - new_state = webrtc::PeerConnectionInterface::kClosed; - EXPECT_CALL(*mock_tracker_.get(), - TrackSignalingStateChange( - pc_handler_.get(), - WebRTCPeerConnectionHandlerClient::kSignalingStateClosed)); - EXPECT_CALL(*mock_client_.get(), - DidChangeSignalingState( - WebRTCPeerConnectionHandlerClient::kSignalingStateClosed)); - pc_handler_->observer()->OnSignalingChange(new_state); -} - TEST_F(RTCPeerConnectionHandlerTest, OnIceConnectionChange) { testing::InSequence sequence; @@ -1263,28 +1173,27 @@ TEST_F(RTCPeerConnectionHandlerTest, DISABLED_OnAddAndOnRemoveStream) { AddRemoteMockMediaStream("remote_stream", "video", "audio")); // Grab the added receivers when it's been successfully added to the PC. std::vector<std::unique_ptr<blink::WebRTCRtpReceiver>> receivers_added; - EXPECT_CALL(*mock_client_.get(), DidAddRemoteTrackForMock(_)) + EXPECT_CALL(*mock_client_.get(), DidAddReceiverPlanBForMock(_)) .WillRepeatedly( Invoke([&receivers_added]( std::unique_ptr<blink::WebRTCRtpReceiver>* receiver) { receivers_added.push_back(std::move(*receiver)); })); - EXPECT_CALL(*mock_tracker_.get(), - TrackAddStream(pc_handler_.get(), - testing::Property( - &blink::WebMediaStream::Id, - blink::WebString::FromASCII("remote_stream")), - PeerConnectionTracker::SOURCE_REMOTE)); + EXPECT_CALL( + *mock_tracker_.get(), + TrackAddTransceiver( + pc_handler_.get(), + PeerConnectionTracker::TransceiverUpdatedReason::kAddTrack, _, _)) + .Times(2); // Grab the removed receivers when it's been successfully added to the PC. std::vector<std::unique_ptr<blink::WebRTCRtpReceiver>> receivers_removed; EXPECT_CALL( *mock_tracker_.get(), - TrackRemoveStream( + TrackRemoveTransceiver( pc_handler_.get(), - testing::Property(&blink::WebMediaStream::Id, - blink::WebString::FromASCII("remote_stream")), - PeerConnectionTracker::SOURCE_REMOTE)); - EXPECT_CALL(*mock_client_.get(), DidRemoveRemoteTrackForMock(_)) + PeerConnectionTracker::TransceiverUpdatedReason::kRemoveTrack, _, _)) + .Times(2); + EXPECT_CALL(*mock_client_.get(), DidRemoveReceiverPlanBForMock(_)) .WillRepeatedly( Invoke([&receivers_removed]( std::unique_ptr<blink::WebRTCRtpReceiver>* receiver) { @@ -1303,211 +1212,6 @@ TEST_F(RTCPeerConnectionHandlerTest, DISABLED_OnAddAndOnRemoveStream) { EXPECT_EQ(receivers_added[1]->Id(), receivers_removed[1]->Id()); } -// This test that WebKit is notified about remote track state changes. -// TODO(hbos): Enable when not mocking or remove test. https://crbug.com/788659 -TEST_F(RTCPeerConnectionHandlerTest, DISABLED_RemoteTrackState) { - rtc::scoped_refptr<webrtc::MediaStreamInterface> remote_stream( - AddRemoteMockMediaStream("remote_stream", "video", "audio")); - std::vector<std::unique_ptr<blink::WebRTCRtpReceiver>> receivers; - // Grab the added receivers and media stream when it's been successfully added - // to the PC. - blink::WebMediaStream webkit_stream; - EXPECT_CALL(*mock_client_.get(), DidAddRemoteTrackForMock(_)) - .WillRepeatedly( - Invoke([&webkit_stream, &receivers]( - std::unique_ptr<blink::WebRTCRtpReceiver>* receiver) { - webkit_stream = (*receiver)->Streams()[0]; - receivers.push_back(std::move(*receiver)); - })); - InvokeOnAddStream(remote_stream); - RunMessageLoopsUntilIdle(); - EXPECT_TRUE(HasReceiverForEveryTrack(remote_stream, receivers)); - - blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; - webkit_stream.AudioTracks(audio_tracks); - EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateLive, - audio_tracks[0].Source().GetReadyState()); - - blink::WebVector<blink::WebMediaStreamTrack> video_tracks; - webkit_stream.VideoTracks(video_tracks); - EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateLive, - video_tracks[0].Source().GetReadyState()); - - InvokeOnSignalingThread( - base::Bind(&MockWebRtcAudioTrack::SetEnded, - base::Unretained(static_cast<MockWebRtcAudioTrack*>( - remote_stream->GetAudioTracks()[0].get())))); - EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateEnded, - audio_tracks[0].Source().GetReadyState()); - - InvokeOnSignalingThread( - base::Bind(&MockWebRtcVideoTrack::SetEnded, - base::Unretained(static_cast<MockWebRtcVideoTrack*>( - remote_stream->GetVideoTracks()[0].get())))); - EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateEnded, - video_tracks[0].Source().GetReadyState()); -} - -// TODO(hbos): Enable when not mocking or remove test. https://crbug.com/788659 -TEST_F(RTCPeerConnectionHandlerTest, - DISABLED_RemoveAndAddAudioTrackFromRemoteStream) { - rtc::scoped_refptr<webrtc::MediaStreamInterface> remote_stream( - AddRemoteMockMediaStream("remote_stream", "video", "audio")); - std::vector<std::unique_ptr<blink::WebRTCRtpReceiver>> receivers; - // Grab the added receivers and media stream when it's been successfully added - // to the PC. - blink::WebMediaStream webkit_stream; - EXPECT_CALL(*mock_client_.get(), DidAddRemoteTrackForMock(_)) - .WillRepeatedly( - Invoke([&webkit_stream, &receivers]( - std::unique_ptr<blink::WebRTCRtpReceiver>* receiver) { - webkit_stream = (*receiver)->Streams()[0]; - receivers.push_back(std::move(*receiver)); - })); - InvokeOnAddStream(remote_stream); - RunMessageLoopsUntilIdle(); - EXPECT_TRUE(HasReceiverForEveryTrack(remote_stream, receivers)); - - { - // 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()); - } - - // Remove the Webrtc audio track from the Webrtc MediaStream. - scoped_refptr<webrtc::AudioTrackInterface> webrtc_track = - remote_stream->GetAudioTracks()[0].get(); - InvokeRemoveTrack(remote_stream, webrtc_track.get()); - - { - blink::WebVector<blink::WebMediaStreamTrack> modified_audio_tracks1; - webkit_stream.AudioTracks(modified_audio_tracks1); - EXPECT_EQ(0u, modified_audio_tracks1.size()); - } - - blink::WebHeap::CollectGarbageForTesting(); - - // Add the WebRtc audio track again. - InvokeAddTrack(remote_stream, webrtc_track.get()); - blink::WebVector<blink::WebMediaStreamTrack> modified_audio_tracks2; - webkit_stream.AudioTracks(modified_audio_tracks2); - EXPECT_EQ(1u, modified_audio_tracks2.size()); -} - -// TODO(hbos): Enable when not mocking or remove test. https://crbug.com/788659 -TEST_F(RTCPeerConnectionHandlerTest, - DISABLED_RemoveAndAddVideoTrackFromRemoteStream) { - rtc::scoped_refptr<webrtc::MediaStreamInterface> remote_stream( - AddRemoteMockMediaStream("remote_stream", "video", "audio")); - std::vector<std::unique_ptr<blink::WebRTCRtpReceiver>> receivers; - // Grab the added receivers and media stream when it's been successfully added - // to the PC. - blink::WebMediaStream webkit_stream; - EXPECT_CALL(*mock_client_.get(), DidAddRemoteTrackForMock(_)) - .WillRepeatedly( - Invoke([&webkit_stream, &receivers]( - std::unique_ptr<blink::WebRTCRtpReceiver>* receiver) { - webkit_stream = (*receiver)->Streams()[0]; - receivers.push_back(std::move(*receiver)); - })); - InvokeOnAddStream(remote_stream); - RunMessageLoopsUntilIdle(); - EXPECT_TRUE(HasReceiverForEveryTrack(remote_stream, receivers)); - - { - // Test in a small scope so that |video_tracks| don't hold on to destroyed - // source later. - blink::WebVector<blink::WebMediaStreamTrack> video_tracks; - webkit_stream.VideoTracks(video_tracks); - EXPECT_EQ(1u, video_tracks.size()); - } - - // Remove the Webrtc video track from the Webrtc MediaStream. - scoped_refptr<webrtc::VideoTrackInterface> webrtc_track = - remote_stream->GetVideoTracks()[0].get(); - InvokeRemoveTrack(remote_stream, webrtc_track.get()); - RunMessageLoopsUntilIdle(); - { - blink::WebVector<blink::WebMediaStreamTrack> modified_video_tracks1; - webkit_stream.VideoTracks(modified_video_tracks1); - EXPECT_EQ(0u, modified_video_tracks1.size()); - } - - blink::WebHeap::CollectGarbageForTesting(); - - // Add the WebRtc video track again. - InvokeAddTrack(remote_stream, webrtc_track.get()); - RunMessageLoopsUntilIdle(); - blink::WebVector<blink::WebMediaStreamTrack> modified_video_tracks2; - webkit_stream.VideoTracks(modified_video_tracks2); - EXPECT_EQ(1u, modified_video_tracks2.size()); -} - -// TODO(hbos): Enable when not mocking or remove test. https://crbug.com/788659 -TEST_F(RTCPeerConnectionHandlerTest, - DISABLED_RemoveAndAddTracksFromRemoteStream) { - rtc::scoped_refptr<webrtc::MediaStreamInterface> remote_stream( - AddRemoteMockMediaStream("remote_stream", "video", "audio")); - std::vector<std::unique_ptr<blink::WebRTCRtpReceiver>> receivers; - // Grab the added receivers and media stream when it's been successfully added - // to the PC. - blink::WebMediaStream webkit_stream; - EXPECT_CALL(*mock_client_.get(), DidAddRemoteTrackForMock(_)) - .WillRepeatedly( - Invoke([&webkit_stream, &receivers]( - std::unique_ptr<blink::WebRTCRtpReceiver>* receiver) { - webkit_stream = (*receiver)->Streams()[0]; - receivers.push_back(std::move(*receiver)); - })); - InvokeOnAddStream(remote_stream); - RunMessageLoopsUntilIdle(); - EXPECT_TRUE(HasReceiverForEveryTrack(remote_stream, receivers)); - - { - // 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]; - InvokeRemoveTrack(remote_stream, audio_track.get()); - auto video_track = remote_stream->GetVideoTracks()[0]; - InvokeRemoveTrack(remote_stream, video_track.get()); - RunMessageLoopsUntilIdle(); - - { - 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. - InvokeAddTrack(remote_stream, audio_track.get()); - InvokeAddTrack(remote_stream, video_track.get()); - - 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(), |