| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/renderer/media/rtc_peer_connection_handler.h" | 5 #include "content/renderer/media/rtc_peer_connection_handler.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <map> | 9 #include <map> |
| 10 #include <memory> | 10 #include <memory> |
| (...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 341 | 341 |
| 342 // Creates a remote MediaStream and adds it to the mocked native | 342 // Creates a remote MediaStream and adds it to the mocked native |
| 343 // peer connection. | 343 // peer connection. |
| 344 rtc::scoped_refptr<webrtc::MediaStreamInterface> AddRemoteMockMediaStream( | 344 rtc::scoped_refptr<webrtc::MediaStreamInterface> AddRemoteMockMediaStream( |
| 345 const std::string& stream_label, | 345 const std::string& stream_label, |
| 346 const std::string& video_track_label, | 346 const std::string& video_track_label, |
| 347 const std::string& audio_track_label) { | 347 const std::string& audio_track_label) { |
| 348 rtc::scoped_refptr<webrtc::MediaStreamInterface> stream( | 348 rtc::scoped_refptr<webrtc::MediaStreamInterface> stream( |
| 349 mock_dependency_factory_->CreateLocalMediaStream(stream_label).get()); | 349 mock_dependency_factory_->CreateLocalMediaStream(stream_label).get()); |
| 350 if (!video_track_label.empty()) { | 350 if (!video_track_label.empty()) { |
| 351 stream->AddTrack(MockWebRtcVideoTrack::Create(video_track_label).get()); | 351 InvokeAddTrack(stream, |
| 352 MockWebRtcVideoTrack::Create(video_track_label).get()); |
| 352 } | 353 } |
| 353 if (!audio_track_label.empty()) { | 354 if (!audio_track_label.empty()) { |
| 354 stream->AddTrack(MockWebRtcAudioTrack::Create(audio_track_label).get()); | 355 InvokeAddTrack(stream, |
| 356 MockWebRtcAudioTrack::Create(audio_track_label).get()); |
| 355 } | 357 } |
| 356 mock_peer_connection_->AddRemoteStream(stream); | 358 mock_peer_connection_->AddRemoteStream(stream); |
| 357 return stream; | 359 return stream; |
| 358 } | 360 } |
| 359 | 361 |
| 360 void StopAllTracks(const blink::WebMediaStream& stream) { | 362 void StopAllTracks(const blink::WebMediaStream& stream) { |
| 361 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; | 363 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; |
| 362 stream.AudioTracks(audio_tracks); | 364 stream.AudioTracks(audio_tracks); |
| 363 for (const auto& track : audio_tracks) | 365 for (const auto& track : audio_tracks) |
| 364 MediaStreamAudioTrack::From(track)->Stop(); | 366 MediaStreamAudioTrack::From(track)->Stop(); |
| 365 | 367 |
| 366 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; | 368 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; |
| 367 stream.VideoTracks(video_tracks); | 369 stream.VideoTracks(video_tracks); |
| 368 for (const auto& track : video_tracks) | 370 for (const auto& track : video_tracks) |
| 369 MediaStreamVideoTrack::GetVideoTrack(track)->Stop(); | 371 MediaStreamVideoTrack::GetVideoTrack(track)->Stop(); |
| 370 } | 372 } |
| 371 | 373 |
| 372 static void OnAudioSourceStarted(MediaStreamSource* source, | 374 static void OnAudioSourceStarted(MediaStreamSource* source, |
| 373 MediaStreamRequestResult result, | 375 MediaStreamRequestResult result, |
| 374 const blink::WebString& result_name) {} | 376 const blink::WebString& result_name) {} |
| 375 | 377 |
| 378 void InvokeOnAddStream( |
| 379 const rtc::scoped_refptr<webrtc::MediaStreamInterface>& remote_stream) { |
| 380 InvokeOnSignalingThread( |
| 381 base::Bind(&webrtc::PeerConnectionObserver::OnAddStream, |
| 382 base::Unretained(pc_handler_->observer()), remote_stream)); |
| 383 } |
| 384 |
| 385 void InvokeOnRemoveStream( |
| 386 const rtc::scoped_refptr<webrtc::MediaStreamInterface>& remote_stream) { |
| 387 InvokeOnSignalingThread( |
| 388 base::Bind(&webrtc::PeerConnectionObserver::OnRemoveStream, |
| 389 base::Unretained(pc_handler_->observer()), remote_stream)); |
| 390 } |
| 391 |
| 392 template <typename T> |
| 393 void InvokeAddTrack( |
| 394 const rtc::scoped_refptr<webrtc::MediaStreamInterface>& remote_stream, |
| 395 T* webrtc_track) { |
| 396 InvokeOnSignalingThread(base::Bind( |
| 397 [](webrtc::MediaStreamInterface* remote_stream, T* webrtc_track) { |
| 398 EXPECT_TRUE(remote_stream->AddTrack(webrtc_track)); |
| 399 }, |
| 400 base::Unretained(remote_stream.get()), base::Unretained(webrtc_track))); |
| 401 } |
| 402 |
| 403 template <typename T> |
| 404 void InvokeRemoveTrack( |
| 405 const rtc::scoped_refptr<webrtc::MediaStreamInterface>& remote_stream, |
| 406 T* webrtc_track) { |
| 407 InvokeOnSignalingThread(base::Bind( |
| 408 [](webrtc::MediaStreamInterface* remote_stream, T* webrtc_track) { |
| 409 EXPECT_TRUE(remote_stream->RemoveTrack(webrtc_track)); |
| 410 }, |
| 411 base::Unretained(remote_stream.get()), base::Unretained(webrtc_track))); |
| 412 } |
| 413 |
| 414 template <typename T> |
| 415 void InvokeOnSignalingThread(T callback) { |
| 416 mock_dependency_factory_->GetWebRtcSignalingThread()->PostTask(FROM_HERE, |
| 417 callback); |
| 418 RunMessageLoopsUntilIdle(); |
| 419 } |
| 420 |
| 376 // Wait for all current posts to the webrtc signaling thread to run and then | 421 // Wait for all current posts to the webrtc signaling thread to run and then |
| 377 // run the message loop until idle on the main thread. | 422 // run the message loop until idle on the main thread. |
| 378 void RunMessageLoopsUntilIdle() { | 423 void RunMessageLoopsUntilIdle() { |
| 379 base::WaitableEvent waitable_event( | 424 base::WaitableEvent waitable_event( |
| 380 base::WaitableEvent::ResetPolicy::MANUAL, | 425 base::WaitableEvent::ResetPolicy::MANUAL, |
| 381 base::WaitableEvent::InitialState::NOT_SIGNALED); | 426 base::WaitableEvent::InitialState::NOT_SIGNALED); |
| 382 mock_dependency_factory_->GetWebRtcSignalingThread()->PostTask( | 427 mock_dependency_factory_->GetWebRtcSignalingThread()->PostTask( |
| 383 FROM_HERE, | 428 FROM_HERE, base::Bind(&base::WaitableEvent::Signal, |
| 384 base::Bind(&RTCPeerConnectionHandlerTest::SignalWaitableEvent, | 429 base::Unretained(&waitable_event))); |
| 385 base::Unretained(this), &waitable_event)); | |
| 386 waitable_event.Wait(); | 430 waitable_event.Wait(); |
| 387 base::RunLoop().RunUntilIdle(); | 431 base::RunLoop().RunUntilIdle(); |
| 388 } | 432 } |
| 389 | 433 |
| 390 private: | 434 private: |
| 391 void SignalWaitableEvent(base::WaitableEvent* waitable_event) { | 435 void SignalWaitableEvent(base::WaitableEvent* waitable_event) { |
| 392 waitable_event->Signal(); | 436 waitable_event->Signal(); |
| 393 } | 437 } |
| 394 | 438 |
| 395 public: | 439 public: |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 431 webrtc::PeerConnectionInterface::kIceGatheringNew); | 475 webrtc::PeerConnectionInterface::kIceGatheringNew); |
| 432 | 476 |
| 433 EXPECT_CALL(*mock_client_.get(), DidChangeICEConnectionState(_)).Times(0); | 477 EXPECT_CALL(*mock_client_.get(), DidChangeICEConnectionState(_)).Times(0); |
| 434 pc_handler_->observer()->OnIceConnectionChange( | 478 pc_handler_->observer()->OnIceConnectionChange( |
| 435 webrtc::PeerConnectionInterface::kIceConnectionDisconnected); | 479 webrtc::PeerConnectionInterface::kIceConnectionDisconnected); |
| 436 | 480 |
| 437 EXPECT_CALL(*mock_client_.get(), DidAddRemoteStream(_)).Times(0); | 481 EXPECT_CALL(*mock_client_.get(), DidAddRemoteStream(_)).Times(0); |
| 438 std::string remote_stream_label("remote_stream"); | 482 std::string remote_stream_label("remote_stream"); |
| 439 rtc::scoped_refptr<webrtc::MediaStreamInterface> remote_stream( | 483 rtc::scoped_refptr<webrtc::MediaStreamInterface> remote_stream( |
| 440 AddRemoteMockMediaStream(remote_stream_label, "video", "audio")); | 484 AddRemoteMockMediaStream(remote_stream_label, "video", "audio")); |
| 441 pc_handler_->observer()->OnAddStream(remote_stream); | 485 InvokeOnAddStream(remote_stream); |
| 442 | 486 |
| 443 EXPECT_CALL(*mock_client_.get(), DidRemoveRemoteStream(_)).Times(0); | 487 EXPECT_CALL(*mock_client_.get(), DidRemoveRemoteStream(_)).Times(0); |
| 444 pc_handler_->observer()->OnRemoveStream(remote_stream); | 488 InvokeOnRemoveStream(remote_stream); |
| 445 | 489 |
| 446 EXPECT_CALL(*mock_client_.get(), DidAddRemoteDataChannel(_)).Times(0); | 490 EXPECT_CALL(*mock_client_.get(), DidAddRemoteDataChannel(_)).Times(0); |
| 447 webrtc::DataChannelInit config; | 491 webrtc::DataChannelInit config; |
| 448 rtc::scoped_refptr<webrtc::DataChannelInterface> remote_data_channel( | 492 rtc::scoped_refptr<webrtc::DataChannelInterface> remote_data_channel( |
| 449 new rtc::RefCountedObject<MockDataChannel>("dummy", &config)); | 493 new rtc::RefCountedObject<MockDataChannel>("dummy", &config)); |
| 450 pc_handler_->observer()->OnDataChannel(remote_data_channel); | 494 pc_handler_->observer()->OnDataChannel(remote_data_channel); |
| 451 | 495 |
| 452 RunMessageLoopsUntilIdle(); | 496 RunMessageLoopsUntilIdle(); |
| 453 } | 497 } |
| 454 | 498 |
| (...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 728 pc_handler_->getStats(request.get()); | 772 pc_handler_->getStats(request.get()); |
| 729 RunMessageLoopsUntilIdle(); | 773 RunMessageLoopsUntilIdle(); |
| 730 EXPECT_EQ(1, request->result()->report_count()); | 774 EXPECT_EQ(1, request->result()->report_count()); |
| 731 | 775 |
| 732 StopAllTracks(local_stream); | 776 StopAllTracks(local_stream); |
| 733 } | 777 } |
| 734 | 778 |
| 735 TEST_F(RTCPeerConnectionHandlerTest, GetStatsWithRemoteSelector) { | 779 TEST_F(RTCPeerConnectionHandlerTest, GetStatsWithRemoteSelector) { |
| 736 rtc::scoped_refptr<webrtc::MediaStreamInterface> stream( | 780 rtc::scoped_refptr<webrtc::MediaStreamInterface> stream( |
| 737 AddRemoteMockMediaStream("remote_stream", "video", "audio")); | 781 AddRemoteMockMediaStream("remote_stream", "video", "audio")); |
| 738 pc_handler_->observer()->OnAddStream(stream); | 782 InvokeOnAddStream(stream); |
| 739 RunMessageLoopsUntilIdle(); | |
| 740 const blink::WebMediaStream& remote_stream = mock_client_->remote_stream(); | 783 const blink::WebMediaStream& remote_stream = mock_client_->remote_stream(); |
| 741 | 784 |
| 742 blink::WebVector<blink::WebMediaStreamTrack> tracks; | 785 blink::WebVector<blink::WebMediaStreamTrack> tracks; |
| 743 remote_stream.AudioTracks(tracks); | 786 remote_stream.AudioTracks(tracks); |
| 744 ASSERT_LE(1ul, tracks.size()); | 787 ASSERT_LE(1ul, tracks.size()); |
| 745 | 788 |
| 746 scoped_refptr<MockRTCStatsRequest> request( | 789 scoped_refptr<MockRTCStatsRequest> request( |
| 747 new rtc::RefCountedObject<MockRTCStatsRequest>()); | 790 new rtc::RefCountedObject<MockRTCStatsRequest>()); |
| 748 request->setSelector(tracks[0]); | 791 request->setSelector(tracks[0]); |
| 749 pc_handler_->getStats(request.get()); | 792 pc_handler_->getStats(request.get()); |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 890 NOTREACHED(); | 933 NOTREACHED(); |
| 891 } | 934 } |
| 892 } | 935 } |
| 893 EXPECT_EQ(undefined_stats_count, 1); | 936 EXPECT_EQ(undefined_stats_count, 1); |
| 894 EXPECT_EQ(defined_stats_count, 1); | 937 EXPECT_EQ(defined_stats_count, 1); |
| 895 } | 938 } |
| 896 | 939 |
| 897 TEST_F(RTCPeerConnectionHandlerTest, GetReceivers) { | 940 TEST_F(RTCPeerConnectionHandlerTest, GetReceivers) { |
| 898 std::vector<blink::WebMediaStream> remote_streams; | 941 std::vector<blink::WebMediaStream> remote_streams; |
| 899 | 942 |
| 900 pc_handler_->observer()->OnAddStream( | 943 InvokeOnAddStream(AddRemoteMockMediaStream("stream0", "video0", "audio0")); |
| 901 AddRemoteMockMediaStream("stream0", "video0", "audio0")); | |
| 902 RunMessageLoopsUntilIdle(); | |
| 903 remote_streams.push_back(mock_client_->remote_stream()); | 944 remote_streams.push_back(mock_client_->remote_stream()); |
| 904 pc_handler_->observer()->OnAddStream( | 945 InvokeOnAddStream(AddRemoteMockMediaStream("stream1", "video1", "audio1")); |
| 905 AddRemoteMockMediaStream("stream1", "video1", "audio1")); | |
| 906 RunMessageLoopsUntilIdle(); | |
| 907 remote_streams.push_back(mock_client_->remote_stream()); | 946 remote_streams.push_back(mock_client_->remote_stream()); |
| 908 pc_handler_->observer()->OnAddStream( | 947 InvokeOnAddStream(AddRemoteMockMediaStream("stream2", "video2", "audio2")); |
| 909 AddRemoteMockMediaStream("stream2", "video2", "audio2")); | |
| 910 RunMessageLoopsUntilIdle(); | |
| 911 remote_streams.push_back(mock_client_->remote_stream()); | 948 remote_streams.push_back(mock_client_->remote_stream()); |
| 912 | 949 |
| 913 std::set<std::string> expected_remote_track_ids; | 950 std::set<std::string> expected_remote_track_ids; |
| 914 expected_remote_track_ids.insert("video0"); | 951 expected_remote_track_ids.insert("video0"); |
| 915 expected_remote_track_ids.insert("audio0"); | 952 expected_remote_track_ids.insert("audio0"); |
| 916 expected_remote_track_ids.insert("video1"); | 953 expected_remote_track_ids.insert("video1"); |
| 917 expected_remote_track_ids.insert("audio1"); | 954 expected_remote_track_ids.insert("audio1"); |
| 918 expected_remote_track_ids.insert("video2"); | 955 expected_remote_track_ids.insert("video2"); |
| 919 expected_remote_track_ids.insert("audio2"); | 956 expected_remote_track_ids.insert("audio2"); |
| 920 | 957 |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1162 TrackRemoveStream( | 1199 TrackRemoveStream( |
| 1163 pc_handler_.get(), | 1200 pc_handler_.get(), |
| 1164 testing::Property(&blink::WebMediaStream::Id, | 1201 testing::Property(&blink::WebMediaStream::Id, |
| 1165 blink::WebString::FromASCII(remote_stream_label)), | 1202 blink::WebString::FromASCII(remote_stream_label)), |
| 1166 PeerConnectionTracker::SOURCE_REMOTE)); | 1203 PeerConnectionTracker::SOURCE_REMOTE)); |
| 1167 EXPECT_CALL(*mock_client_.get(), | 1204 EXPECT_CALL(*mock_client_.get(), |
| 1168 DidRemoveRemoteStream(testing::Property( | 1205 DidRemoveRemoteStream(testing::Property( |
| 1169 &blink::WebMediaStream::Id, | 1206 &blink::WebMediaStream::Id, |
| 1170 blink::WebString::FromASCII(remote_stream_label)))); | 1207 blink::WebString::FromASCII(remote_stream_label)))); |
| 1171 | 1208 |
| 1172 pc_handler_->observer()->OnAddStream(remote_stream); | 1209 InvokeOnAddStream(remote_stream); |
| 1173 RunMessageLoopsUntilIdle(); | 1210 InvokeOnRemoveStream(remote_stream); |
| 1174 pc_handler_->observer()->OnRemoveStream(remote_stream); | |
| 1175 RunMessageLoopsUntilIdle(); | |
| 1176 } | 1211 } |
| 1177 | 1212 |
| 1178 // This test that WebKit is notified about remote track state changes. | 1213 // This test that WebKit is notified about remote track state changes. |
| 1179 TEST_F(RTCPeerConnectionHandlerTest, RemoteTrackState) { | 1214 TEST_F(RTCPeerConnectionHandlerTest, RemoteTrackState) { |
| 1180 std::string remote_stream_label("remote_stream"); | 1215 std::string remote_stream_label("remote_stream"); |
| 1181 rtc::scoped_refptr<webrtc::MediaStreamInterface> remote_stream( | 1216 rtc::scoped_refptr<webrtc::MediaStreamInterface> remote_stream( |
| 1182 AddRemoteMockMediaStream(remote_stream_label, "video", "audio")); | 1217 AddRemoteMockMediaStream(remote_stream_label, "video", "audio")); |
| 1183 | 1218 |
| 1184 testing::InSequence sequence; | 1219 testing::InSequence sequence; |
| 1185 EXPECT_CALL(*mock_client_.get(), | 1220 EXPECT_CALL(*mock_client_.get(), |
| 1186 DidAddRemoteStream(testing::Property( | 1221 DidAddRemoteStream(testing::Property( |
| 1187 &blink::WebMediaStream::Id, | 1222 &blink::WebMediaStream::Id, |
| 1188 blink::WebString::FromASCII(remote_stream_label)))); | 1223 blink::WebString::FromASCII(remote_stream_label)))); |
| 1189 pc_handler_->observer()->OnAddStream(remote_stream); | 1224 InvokeOnAddStream(remote_stream); |
| 1190 RunMessageLoopsUntilIdle(); | |
| 1191 const blink::WebMediaStream& webkit_stream = mock_client_->remote_stream(); | 1225 const blink::WebMediaStream& webkit_stream = mock_client_->remote_stream(); |
| 1192 | 1226 |
| 1193 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; | 1227 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; |
| 1194 webkit_stream.AudioTracks(audio_tracks); | 1228 webkit_stream.AudioTracks(audio_tracks); |
| 1195 EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateLive, | 1229 EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateLive, |
| 1196 audio_tracks[0].Source().GetReadyState()); | 1230 audio_tracks[0].Source().GetReadyState()); |
| 1197 | 1231 |
| 1198 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; | 1232 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; |
| 1199 webkit_stream.VideoTracks(video_tracks); | 1233 webkit_stream.VideoTracks(video_tracks); |
| 1200 EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateLive, | 1234 EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateLive, |
| 1201 video_tracks[0].Source().GetReadyState()); | 1235 video_tracks[0].Source().GetReadyState()); |
| 1202 | 1236 |
| 1203 static_cast<MockWebRtcAudioTrack*>(remote_stream->GetAudioTracks()[0].get()) | 1237 InvokeOnSignalingThread( |
| 1204 ->SetEnded(); | 1238 base::Bind(&MockWebRtcAudioTrack::SetEnded, |
| 1205 RunMessageLoopsUntilIdle(); | 1239 base::Unretained(static_cast<MockWebRtcAudioTrack*>( |
| 1240 remote_stream->GetAudioTracks()[0].get())))); |
| 1206 EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateEnded, | 1241 EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateEnded, |
| 1207 audio_tracks[0].Source().GetReadyState()); | 1242 audio_tracks[0].Source().GetReadyState()); |
| 1208 | 1243 |
| 1209 static_cast<MockWebRtcVideoTrack*>(remote_stream->GetVideoTracks()[0].get()) | 1244 InvokeOnSignalingThread( |
| 1210 ->SetEnded(); | 1245 base::Bind(&MockWebRtcVideoTrack::SetEnded, |
| 1211 RunMessageLoopsUntilIdle(); | 1246 base::Unretained(static_cast<MockWebRtcVideoTrack*>( |
| 1247 remote_stream->GetVideoTracks()[0].get())))); |
| 1212 EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateEnded, | 1248 EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateEnded, |
| 1213 video_tracks[0].Source().GetReadyState()); | 1249 video_tracks[0].Source().GetReadyState()); |
| 1214 } | 1250 } |
| 1215 | 1251 |
| 1216 TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddAudioTrackFromRemoteStream) { | 1252 TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddAudioTrackFromRemoteStream) { |
| 1217 std::string remote_stream_label("remote_stream"); | 1253 std::string remote_stream_label("remote_stream"); |
| 1218 base::RunLoop run_loop; | 1254 base::RunLoop run_loop; |
| 1219 | 1255 |
| 1220 // Grab the added media stream when it's been successfully added to the PC. | 1256 // Grab the added media stream when it's been successfully added to the PC. |
| 1221 blink::WebMediaStream webkit_stream; | 1257 blink::WebMediaStream webkit_stream; |
| 1222 EXPECT_CALL(*mock_client_.get(), | 1258 EXPECT_CALL(*mock_client_.get(), |
| 1223 DidAddRemoteStream(testing::Property( | 1259 DidAddRemoteStream(testing::Property( |
| 1224 &blink::WebMediaStream::Id, | 1260 &blink::WebMediaStream::Id, |
| 1225 blink::WebString::FromASCII(remote_stream_label)))) | 1261 blink::WebString::FromASCII(remote_stream_label)))) |
| 1226 .WillOnce(DoAll(SaveArg<0>(&webkit_stream), | 1262 .WillOnce(DoAll(SaveArg<0>(&webkit_stream), |
| 1227 ExitMessageLoop(&message_loop_, run_loop.QuitClosure()))); | 1263 ExitMessageLoop(&message_loop_, run_loop.QuitClosure()))); |
| 1228 | 1264 |
| 1229 rtc::scoped_refptr<webrtc::MediaStreamInterface> remote_stream( | 1265 rtc::scoped_refptr<webrtc::MediaStreamInterface> remote_stream( |
| 1230 AddRemoteMockMediaStream(remote_stream_label, "video", "audio")); | 1266 AddRemoteMockMediaStream(remote_stream_label, "video", "audio")); |
| 1231 pc_handler_->observer()->OnAddStream(remote_stream); | 1267 InvokeOnAddStream(remote_stream); |
| 1232 run_loop.Run(); | 1268 run_loop.Run(); |
| 1233 | 1269 |
| 1234 { | 1270 { |
| 1235 // Test in a small scope so that |audio_tracks| don't hold on to destroyed | 1271 // Test in a small scope so that |audio_tracks| don't hold on to destroyed |
| 1236 // source later. | 1272 // source later. |
| 1237 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; | 1273 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; |
| 1238 webkit_stream.AudioTracks(audio_tracks); | 1274 webkit_stream.AudioTracks(audio_tracks); |
| 1239 EXPECT_EQ(1u, audio_tracks.size()); | 1275 EXPECT_EQ(1u, audio_tracks.size()); |
| 1240 } | 1276 } |
| 1241 | 1277 |
| 1242 // Remove the Webrtc audio track from the Webrtc MediaStream. | 1278 // Remove the Webrtc audio track from the Webrtc MediaStream. |
| 1243 scoped_refptr<webrtc::AudioTrackInterface> webrtc_track = | 1279 scoped_refptr<webrtc::AudioTrackInterface> webrtc_track = |
| 1244 remote_stream->GetAudioTracks()[0].get(); | 1280 remote_stream->GetAudioTracks()[0].get(); |
| 1245 remote_stream->RemoveTrack(webrtc_track.get()); | 1281 InvokeRemoveTrack(remote_stream, webrtc_track.get()); |
| 1246 RunMessageLoopsUntilIdle(); | |
| 1247 | 1282 |
| 1248 { | 1283 { |
| 1249 blink::WebVector<blink::WebMediaStreamTrack> modified_audio_tracks1; | 1284 blink::WebVector<blink::WebMediaStreamTrack> modified_audio_tracks1; |
| 1250 webkit_stream.AudioTracks(modified_audio_tracks1); | 1285 webkit_stream.AudioTracks(modified_audio_tracks1); |
| 1251 EXPECT_EQ(0u, modified_audio_tracks1.size()); | 1286 EXPECT_EQ(0u, modified_audio_tracks1.size()); |
| 1252 } | 1287 } |
| 1253 | 1288 |
| 1254 blink::WebHeap::CollectGarbageForTesting(); | 1289 blink::WebHeap::CollectGarbageForTesting(); |
| 1255 | 1290 |
| 1256 // Add the WebRtc audio track again. | 1291 // Add the WebRtc audio track again. |
| 1257 remote_stream->AddTrack(webrtc_track.get()); | 1292 InvokeAddTrack(remote_stream, webrtc_track.get()); |
| 1258 RunMessageLoopsUntilIdle(); | |
| 1259 blink::WebVector<blink::WebMediaStreamTrack> modified_audio_tracks2; | 1293 blink::WebVector<blink::WebMediaStreamTrack> modified_audio_tracks2; |
| 1260 webkit_stream.AudioTracks(modified_audio_tracks2); | 1294 webkit_stream.AudioTracks(modified_audio_tracks2); |
| 1261 EXPECT_EQ(1u, modified_audio_tracks2.size()); | 1295 EXPECT_EQ(1u, modified_audio_tracks2.size()); |
| 1262 } | 1296 } |
| 1263 | 1297 |
| 1264 TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddVideoTrackFromRemoteStream) { | 1298 TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddVideoTrackFromRemoteStream) { |
| 1265 std::string remote_stream_label("remote_stream"); | 1299 std::string remote_stream_label("remote_stream"); |
| 1266 base::RunLoop run_loop; | 1300 base::RunLoop run_loop; |
| 1267 | 1301 |
| 1268 // Grab the added media stream when it's been successfully added to the PC. | 1302 // Grab the added media stream when it's been successfully added to the PC. |
| 1269 blink::WebMediaStream webkit_stream; | 1303 blink::WebMediaStream webkit_stream; |
| 1270 EXPECT_CALL(*mock_client_.get(), | 1304 EXPECT_CALL(*mock_client_.get(), |
| 1271 DidAddRemoteStream(testing::Property( | 1305 DidAddRemoteStream(testing::Property( |
| 1272 &blink::WebMediaStream::Id, | 1306 &blink::WebMediaStream::Id, |
| 1273 blink::WebString::FromASCII(remote_stream_label)))) | 1307 blink::WebString::FromASCII(remote_stream_label)))) |
| 1274 .WillOnce(DoAll(SaveArg<0>(&webkit_stream), | 1308 .WillOnce(DoAll(SaveArg<0>(&webkit_stream), |
| 1275 ExitMessageLoop(&message_loop_, run_loop.QuitClosure()))); | 1309 ExitMessageLoop(&message_loop_, run_loop.QuitClosure()))); |
| 1276 | 1310 |
| 1277 rtc::scoped_refptr<webrtc::MediaStreamInterface> remote_stream( | 1311 rtc::scoped_refptr<webrtc::MediaStreamInterface> remote_stream( |
| 1278 AddRemoteMockMediaStream(remote_stream_label, "video", "audio")); | 1312 AddRemoteMockMediaStream(remote_stream_label, "video", "audio")); |
| 1279 pc_handler_->observer()->OnAddStream(remote_stream); | 1313 InvokeOnAddStream(remote_stream); |
| 1280 run_loop.Run(); | 1314 run_loop.Run(); |
| 1281 | 1315 |
| 1282 { | 1316 { |
| 1283 // Test in a small scope so that |video_tracks| don't hold on to destroyed | 1317 // Test in a small scope so that |video_tracks| don't hold on to destroyed |
| 1284 // source later. | 1318 // source later. |
| 1285 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; | 1319 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; |
| 1286 webkit_stream.VideoTracks(video_tracks); | 1320 webkit_stream.VideoTracks(video_tracks); |
| 1287 EXPECT_EQ(1u, video_tracks.size()); | 1321 EXPECT_EQ(1u, video_tracks.size()); |
| 1288 } | 1322 } |
| 1289 | 1323 |
| 1290 // Remove the Webrtc video track from the Webrtc MediaStream. | 1324 // Remove the Webrtc video track from the Webrtc MediaStream. |
| 1291 scoped_refptr<webrtc::VideoTrackInterface> webrtc_track = | 1325 scoped_refptr<webrtc::VideoTrackInterface> webrtc_track = |
| 1292 remote_stream->GetVideoTracks()[0].get(); | 1326 remote_stream->GetVideoTracks()[0].get(); |
| 1293 remote_stream->RemoveTrack(webrtc_track.get()); | 1327 InvokeRemoveTrack(remote_stream, webrtc_track.get()); |
| 1294 RunMessageLoopsUntilIdle(); | 1328 RunMessageLoopsUntilIdle(); |
| 1295 { | 1329 { |
| 1296 blink::WebVector<blink::WebMediaStreamTrack> modified_video_tracks1; | 1330 blink::WebVector<blink::WebMediaStreamTrack> modified_video_tracks1; |
| 1297 webkit_stream.VideoTracks(modified_video_tracks1); | 1331 webkit_stream.VideoTracks(modified_video_tracks1); |
| 1298 EXPECT_EQ(0u, modified_video_tracks1.size()); | 1332 EXPECT_EQ(0u, modified_video_tracks1.size()); |
| 1299 } | 1333 } |
| 1300 | 1334 |
| 1301 blink::WebHeap::CollectGarbageForTesting(); | 1335 blink::WebHeap::CollectGarbageForTesting(); |
| 1302 | 1336 |
| 1303 // Add the WebRtc video track again. | 1337 // Add the WebRtc video track again. |
| 1304 remote_stream->AddTrack(webrtc_track.get()); | 1338 InvokeAddTrack(remote_stream, webrtc_track.get()); |
| 1305 RunMessageLoopsUntilIdle(); | 1339 RunMessageLoopsUntilIdle(); |
| 1306 blink::WebVector<blink::WebMediaStreamTrack> modified_video_tracks2; | 1340 blink::WebVector<blink::WebMediaStreamTrack> modified_video_tracks2; |
| 1307 webkit_stream.VideoTracks(modified_video_tracks2); | 1341 webkit_stream.VideoTracks(modified_video_tracks2); |
| 1308 EXPECT_EQ(1u, modified_video_tracks2.size()); | 1342 EXPECT_EQ(1u, modified_video_tracks2.size()); |
| 1309 } | 1343 } |
| 1310 | 1344 |
| 1311 TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddTracksFromRemoteStream) { | 1345 TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddTracksFromRemoteStream) { |
| 1312 std::string remote_stream_label("remote_stream"); | 1346 std::string remote_stream_label("remote_stream"); |
| 1313 base::RunLoop run_loop; | 1347 base::RunLoop run_loop; |
| 1314 | 1348 |
| 1315 // Grab the added media stream when it's been successfully added to the PC. | 1349 // Grab the added media stream when it's been successfully added to the PC. |
| 1316 blink::WebMediaStream webkit_stream; | 1350 blink::WebMediaStream webkit_stream; |
| 1317 EXPECT_CALL(*mock_client_.get(), | 1351 EXPECT_CALL(*mock_client_.get(), |
| 1318 DidAddRemoteStream(testing::Property( | 1352 DidAddRemoteStream(testing::Property( |
| 1319 &blink::WebMediaStream::Id, | 1353 &blink::WebMediaStream::Id, |
| 1320 blink::WebString::FromASCII(remote_stream_label)))) | 1354 blink::WebString::FromASCII(remote_stream_label)))) |
| 1321 .WillOnce(DoAll(SaveArg<0>(&webkit_stream), | 1355 .WillOnce(DoAll(SaveArg<0>(&webkit_stream), |
| 1322 ExitMessageLoop(&message_loop_, run_loop.QuitClosure()))); | 1356 ExitMessageLoop(&message_loop_, run_loop.QuitClosure()))); |
| 1323 | 1357 |
| 1324 rtc::scoped_refptr<webrtc::MediaStreamInterface> remote_stream( | 1358 rtc::scoped_refptr<webrtc::MediaStreamInterface> remote_stream( |
| 1325 AddRemoteMockMediaStream(remote_stream_label, "video", "audio")); | 1359 AddRemoteMockMediaStream(remote_stream_label, "video", "audio")); |
| 1326 pc_handler_->observer()->OnAddStream(remote_stream); | 1360 InvokeOnAddStream(remote_stream); |
| 1327 run_loop.Run(); | 1361 run_loop.Run(); |
| 1328 | 1362 |
| 1329 { | 1363 { |
| 1330 // Test in a small scope so that |audio_tracks| don't hold on to destroyed | 1364 // Test in a small scope so that |audio_tracks| don't hold on to destroyed |
| 1331 // source later. | 1365 // source later. |
| 1332 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; | 1366 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; |
| 1333 webkit_stream.AudioTracks(audio_tracks); | 1367 webkit_stream.AudioTracks(audio_tracks); |
| 1334 EXPECT_EQ(1u, audio_tracks.size()); | 1368 EXPECT_EQ(1u, audio_tracks.size()); |
| 1335 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; | 1369 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; |
| 1336 webkit_stream.VideoTracks(video_tracks); | 1370 webkit_stream.VideoTracks(video_tracks); |
| 1337 EXPECT_EQ(1u, video_tracks.size()); | 1371 EXPECT_EQ(1u, video_tracks.size()); |
| 1338 } | 1372 } |
| 1339 | 1373 |
| 1340 // Remove the Webrtc tracks from the MediaStream. | 1374 // Remove the Webrtc tracks from the MediaStream. |
| 1341 auto audio_track = remote_stream->GetAudioTracks()[0]; | 1375 auto audio_track = remote_stream->GetAudioTracks()[0]; |
| 1342 EXPECT_TRUE(remote_stream->RemoveTrack(audio_track.get())); | 1376 InvokeRemoveTrack(remote_stream, audio_track.get()); |
| 1343 auto video_track = remote_stream->GetVideoTracks()[0]; | 1377 auto video_track = remote_stream->GetVideoTracks()[0]; |
| 1344 EXPECT_TRUE(remote_stream->RemoveTrack(video_track.get())); | 1378 InvokeRemoveTrack(remote_stream, video_track.get()); |
| 1345 RunMessageLoopsUntilIdle(); | 1379 RunMessageLoopsUntilIdle(); |
| 1346 | 1380 |
| 1347 { | 1381 { |
| 1348 blink::WebVector<blink::WebMediaStreamTrack> modified_audio_tracks; | 1382 blink::WebVector<blink::WebMediaStreamTrack> modified_audio_tracks; |
| 1349 webkit_stream.AudioTracks(modified_audio_tracks); | 1383 webkit_stream.AudioTracks(modified_audio_tracks); |
| 1350 EXPECT_EQ(0u, modified_audio_tracks.size()); | 1384 EXPECT_EQ(0u, modified_audio_tracks.size()); |
| 1351 blink::WebVector<blink::WebMediaStreamTrack> modified_video_tracks; | 1385 blink::WebVector<blink::WebMediaStreamTrack> modified_video_tracks; |
| 1352 webkit_stream.VideoTracks(modified_video_tracks); | 1386 webkit_stream.VideoTracks(modified_video_tracks); |
| 1353 EXPECT_EQ(0u, modified_video_tracks.size()); | 1387 EXPECT_EQ(0u, modified_video_tracks.size()); |
| 1354 } | 1388 } |
| 1355 | 1389 |
| 1356 blink::WebHeap::CollectGarbageForTesting(); | 1390 blink::WebHeap::CollectGarbageForTesting(); |
| 1357 | 1391 |
| 1358 // Add the tracks again. | 1392 // Add the tracks again. |
| 1359 remote_stream->AddTrack(audio_track.get()); | 1393 InvokeAddTrack(remote_stream, audio_track.get()); |
| 1360 RunMessageLoopsUntilIdle(); | 1394 InvokeAddTrack(remote_stream, video_track.get()); |
| 1361 remote_stream->AddTrack(video_track.get()); | |
| 1362 RunMessageLoopsUntilIdle(); | |
| 1363 | 1395 |
| 1364 blink::WebHeap::CollectGarbageForTesting(); | 1396 blink::WebHeap::CollectGarbageForTesting(); |
| 1365 | 1397 |
| 1366 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; | 1398 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; |
| 1367 webkit_stream.AudioTracks(audio_tracks); | 1399 webkit_stream.AudioTracks(audio_tracks); |
| 1368 EXPECT_EQ(1u, audio_tracks.size()); | 1400 EXPECT_EQ(1u, audio_tracks.size()); |
| 1369 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; | 1401 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; |
| 1370 webkit_stream.VideoTracks(video_tracks); | 1402 webkit_stream.VideoTracks(video_tracks); |
| 1371 EXPECT_EQ(1u, video_tracks.size()); | 1403 EXPECT_EQ(1u, video_tracks.size()); |
| 1372 } | 1404 } |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1428 testing::Ref(tracks[0]))); | 1460 testing::Ref(tracks[0]))); |
| 1429 | 1461 |
| 1430 std::unique_ptr<blink::WebRTCDTMFSenderHandler> sender( | 1462 std::unique_ptr<blink::WebRTCDTMFSenderHandler> sender( |
| 1431 pc_handler_->CreateDTMFSender(tracks[0])); | 1463 pc_handler_->CreateDTMFSender(tracks[0])); |
| 1432 EXPECT_TRUE(sender.get()); | 1464 EXPECT_TRUE(sender.get()); |
| 1433 | 1465 |
| 1434 StopAllTracks(local_stream); | 1466 StopAllTracks(local_stream); |
| 1435 } | 1467 } |
| 1436 | 1468 |
| 1437 } // namespace content | 1469 } // namespace content |
| OLD | NEW |