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

Side by Side Diff: content/renderer/media/rtc_peer_connection_handler_unittest.cc

Issue 2924033002: TrackObserver DCHECK not on main thread, tests updated. (Closed)
Patch Set: MediaStreamRemoteVideoSourceTest using the signaling thread Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | content/renderer/media/webrtc/media_stream_remote_video_source_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « no previous file | content/renderer/media/webrtc/media_stream_remote_video_source_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698