| 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> |
| 11 #include <set> | 11 #include <set> |
| 12 #include <string> | 12 #include <string> |
| 13 #include <vector> | 13 #include <vector> |
| 14 | 14 |
| 15 #include "base/location.h" | 15 #include "base/location.h" |
| 16 #include "base/message_loop/message_loop.h" | 16 #include "base/message_loop/message_loop.h" |
| 17 #include "base/run_loop.h" | 17 #include "base/run_loop.h" |
| 18 #include "base/single_thread_task_runner.h" | 18 #include "base/single_thread_task_runner.h" |
| 19 #include "base/strings/utf_string_conversions.h" | 19 #include "base/strings/utf_string_conversions.h" |
| 20 #include "base/synchronization/waitable_event.h" |
| 20 #include "base/threading/thread_task_runner_handle.h" | 21 #include "base/threading/thread_task_runner_handle.h" |
| 21 #include "base/values.h" | 22 #include "base/values.h" |
| 22 #include "content/child/child_process.h" | 23 #include "content/child/child_process.h" |
| 23 #include "content/renderer/media/media_stream.h" | 24 #include "content/renderer/media/media_stream.h" |
| 24 #include "content/renderer/media/media_stream_audio_source.h" | 25 #include "content/renderer/media/media_stream_audio_source.h" |
| 25 #include "content/renderer/media/media_stream_audio_track.h" | 26 #include "content/renderer/media/media_stream_audio_track.h" |
| 26 #include "content/renderer/media/media_stream_source.h" | 27 #include "content/renderer/media/media_stream_source.h" |
| 27 #include "content/renderer/media/media_stream_video_track.h" | 28 #include "content/renderer/media/media_stream_video_track.h" |
| 28 #include "content/renderer/media/mock_audio_device_factory.h" | 29 #include "content/renderer/media/mock_audio_device_factory.h" |
| 29 #include "content/renderer/media/mock_constraint_factory.h" | 30 #include "content/renderer/media/mock_constraint_factory.h" |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 242 } | 243 } |
| 243 | 244 |
| 244 MockPeerConnectionImpl* native_peer_connection() { | 245 MockPeerConnectionImpl* native_peer_connection() { |
| 245 return static_cast<MockPeerConnectionImpl*>( | 246 return static_cast<MockPeerConnectionImpl*>( |
| 246 RTCPeerConnectionHandler::native_peer_connection()); | 247 RTCPeerConnectionHandler::native_peer_connection()); |
| 247 } | 248 } |
| 248 | 249 |
| 249 webrtc::PeerConnectionObserver* observer() { | 250 webrtc::PeerConnectionObserver* observer() { |
| 250 return native_peer_connection()->observer(); | 251 return native_peer_connection()->observer(); |
| 251 } | 252 } |
| 252 | |
| 253 scoped_refptr<base::SingleThreadTaskRunner> | |
| 254 signaling_thread() const override { | |
| 255 return base::ThreadTaskRunnerHandle::Get(); | |
| 256 } | |
| 257 }; | 253 }; |
| 258 | 254 |
| 259 class RTCPeerConnectionHandlerTest : public ::testing::Test { | 255 class RTCPeerConnectionHandlerTest : public ::testing::Test { |
| 260 public: | 256 public: |
| 261 RTCPeerConnectionHandlerTest() : mock_peer_connection_(NULL) { | 257 RTCPeerConnectionHandlerTest() : mock_peer_connection_(NULL) { |
| 262 child_process_.reset(new ChildProcess()); | 258 child_process_.reset(new ChildProcess()); |
| 263 } | 259 } |
| 264 | 260 |
| 265 void SetUp() override { | 261 void SetUp() override { |
| 266 mock_client_.reset(new NiceMock<MockWebRTCPeerConnectionHandlerClient>()); | 262 mock_client_.reset(new NiceMock<MockWebRTCPeerConnectionHandlerClient>()); |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 370 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; | 366 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; |
| 371 stream.VideoTracks(video_tracks); | 367 stream.VideoTracks(video_tracks); |
| 372 for (const auto& track : video_tracks) | 368 for (const auto& track : video_tracks) |
| 373 MediaStreamVideoTrack::GetVideoTrack(track)->Stop(); | 369 MediaStreamVideoTrack::GetVideoTrack(track)->Stop(); |
| 374 } | 370 } |
| 375 | 371 |
| 376 static void OnAudioSourceStarted(MediaStreamSource* source, | 372 static void OnAudioSourceStarted(MediaStreamSource* source, |
| 377 MediaStreamRequestResult result, | 373 MediaStreamRequestResult result, |
| 378 const blink::WebString& result_name) {} | 374 const blink::WebString& result_name) {} |
| 379 | 375 |
| 376 // 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. |
| 378 void RunMessageLoopsUntilIdle() { |
| 379 base::WaitableEvent waitable_event( |
| 380 base::WaitableEvent::ResetPolicy::MANUAL, |
| 381 base::WaitableEvent::InitialState::NOT_SIGNALED); |
| 382 mock_dependency_factory_->GetWebRtcSignalingThread()->PostTask( |
| 383 FROM_HERE, |
| 384 base::Bind(&RTCPeerConnectionHandlerTest::SignalWaitableEvent, |
| 385 base::Unretained(this), &waitable_event)); |
| 386 waitable_event.Wait(); |
| 387 base::RunLoop().RunUntilIdle(); |
| 388 } |
| 389 |
| 390 private: |
| 391 void SignalWaitableEvent(base::WaitableEvent* waitable_event) { |
| 392 waitable_event->Signal(); |
| 393 } |
| 394 |
| 395 public: |
| 380 base::MessageLoop message_loop_; | 396 base::MessageLoop message_loop_; |
| 381 std::unique_ptr<ChildProcess> child_process_; | 397 std::unique_ptr<ChildProcess> child_process_; |
| 382 std::unique_ptr<MockWebRTCPeerConnectionHandlerClient> mock_client_; | 398 std::unique_ptr<MockWebRTCPeerConnectionHandlerClient> mock_client_; |
| 383 std::unique_ptr<MockPeerConnectionDependencyFactory> mock_dependency_factory_; | 399 std::unique_ptr<MockPeerConnectionDependencyFactory> mock_dependency_factory_; |
| 384 std::unique_ptr<NiceMock<MockPeerConnectionTracker>> mock_tracker_; | 400 std::unique_ptr<NiceMock<MockPeerConnectionTracker>> mock_tracker_; |
| 385 std::unique_ptr<RTCPeerConnectionHandlerUnderTest> pc_handler_; | 401 std::unique_ptr<RTCPeerConnectionHandlerUnderTest> pc_handler_; |
| 386 MockAudioDeviceFactory mock_audio_device_factory_; | 402 MockAudioDeviceFactory mock_audio_device_factory_; |
| 387 | 403 |
| 388 // Weak reference to the mocked native peer connection implementation. | 404 // Weak reference to the mocked native peer connection implementation. |
| 389 MockPeerConnectionImpl* mock_peer_connection_; | 405 MockPeerConnectionImpl* mock_peer_connection_; |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 426 | 442 |
| 427 EXPECT_CALL(*mock_client_.get(), DidRemoveRemoteStream(_)).Times(0); | 443 EXPECT_CALL(*mock_client_.get(), DidRemoveRemoteStream(_)).Times(0); |
| 428 pc_handler_->observer()->OnRemoveStream(remote_stream); | 444 pc_handler_->observer()->OnRemoveStream(remote_stream); |
| 429 | 445 |
| 430 EXPECT_CALL(*mock_client_.get(), DidAddRemoteDataChannel(_)).Times(0); | 446 EXPECT_CALL(*mock_client_.get(), DidAddRemoteDataChannel(_)).Times(0); |
| 431 webrtc::DataChannelInit config; | 447 webrtc::DataChannelInit config; |
| 432 rtc::scoped_refptr<webrtc::DataChannelInterface> remote_data_channel( | 448 rtc::scoped_refptr<webrtc::DataChannelInterface> remote_data_channel( |
| 433 new rtc::RefCountedObject<MockDataChannel>("dummy", &config)); | 449 new rtc::RefCountedObject<MockDataChannel>("dummy", &config)); |
| 434 pc_handler_->observer()->OnDataChannel(remote_data_channel); | 450 pc_handler_->observer()->OnDataChannel(remote_data_channel); |
| 435 | 451 |
| 436 base::RunLoop().RunUntilIdle(); | 452 RunMessageLoopsUntilIdle(); |
| 437 } | 453 } |
| 438 | 454 |
| 439 TEST_F(RTCPeerConnectionHandlerTest, DestructAllHandlers) { | 455 TEST_F(RTCPeerConnectionHandlerTest, DestructAllHandlers) { |
| 440 EXPECT_CALL(*mock_client_.get(), ReleasePeerConnectionHandler()).Times(1); | 456 EXPECT_CALL(*mock_client_.get(), ReleasePeerConnectionHandler()).Times(1); |
| 441 RTCPeerConnectionHandler::DestructAllHandlers(); | 457 RTCPeerConnectionHandler::DestructAllHandlers(); |
| 442 } | 458 } |
| 443 | 459 |
| 444 TEST_F(RTCPeerConnectionHandlerTest, CreateOffer) { | 460 TEST_F(RTCPeerConnectionHandlerTest, CreateOffer) { |
| 445 blink::WebRTCSessionDescriptionRequest request; | 461 blink::WebRTCSessionDescriptionRequest request; |
| 446 blink::WebMediaConstraints options; | 462 blink::WebMediaConstraints options; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 473 // PeerConnectionTracker::TrackSetSessionDescription is expected to be called | 489 // PeerConnectionTracker::TrackSetSessionDescription is expected to be called |
| 474 // before |mock_peer_connection| is called. | 490 // before |mock_peer_connection| is called. |
| 475 testing::InSequence sequence; | 491 testing::InSequence sequence; |
| 476 EXPECT_CALL(*mock_tracker_.get(), | 492 EXPECT_CALL(*mock_tracker_.get(), |
| 477 TrackSetSessionDescription(pc_handler_.get(), kDummySdp, | 493 TrackSetSessionDescription(pc_handler_.get(), kDummySdp, |
| 478 kDummySdpType, | 494 kDummySdpType, |
| 479 PeerConnectionTracker::SOURCE_LOCAL)); | 495 PeerConnectionTracker::SOURCE_LOCAL)); |
| 480 EXPECT_CALL(*mock_peer_connection_, SetLocalDescription(_, _)); | 496 EXPECT_CALL(*mock_peer_connection_, SetLocalDescription(_, _)); |
| 481 | 497 |
| 482 pc_handler_->SetLocalDescription(request, description); | 498 pc_handler_->SetLocalDescription(request, description); |
| 483 base::RunLoop().RunUntilIdle(); | 499 RunMessageLoopsUntilIdle(); |
| 484 EXPECT_EQ(description.GetType(), pc_handler_->LocalDescription().GetType()); | 500 EXPECT_EQ(description.GetType(), pc_handler_->LocalDescription().GetType()); |
| 485 EXPECT_EQ(description.Sdp(), pc_handler_->LocalDescription().Sdp()); | 501 EXPECT_EQ(description.Sdp(), pc_handler_->LocalDescription().Sdp()); |
| 486 | 502 |
| 487 std::string sdp_string; | 503 std::string sdp_string; |
| 488 ASSERT_TRUE(mock_peer_connection_->local_description() != NULL); | 504 ASSERT_TRUE(mock_peer_connection_->local_description() != NULL); |
| 489 EXPECT_EQ(kDummySdpType, mock_peer_connection_->local_description()->type()); | 505 EXPECT_EQ(kDummySdpType, mock_peer_connection_->local_description()->type()); |
| 490 mock_peer_connection_->local_description()->ToString(&sdp_string); | 506 mock_peer_connection_->local_description()->ToString(&sdp_string); |
| 491 EXPECT_EQ(kDummySdp, sdp_string); | 507 EXPECT_EQ(kDummySdp, sdp_string); |
| 492 | 508 |
| 493 // TODO(deadbeef): Also mock the "success" callback from the PeerConnection | 509 // TODO(deadbeef): Also mock the "success" callback from the PeerConnection |
| (...skipping 15 matching lines...) Expand all Loading... |
| 509 PeerConnectionTracker::SOURCE_LOCAL)); | 525 PeerConnectionTracker::SOURCE_LOCAL)); |
| 510 EXPECT_CALL( | 526 EXPECT_CALL( |
| 511 *mock_tracker_.get(), | 527 *mock_tracker_.get(), |
| 512 TrackSessionDescriptionCallback( | 528 TrackSessionDescriptionCallback( |
| 513 pc_handler_.get(), | 529 pc_handler_.get(), |
| 514 PeerConnectionTracker::ACTION_SET_LOCAL_DESCRIPTION, "OnFailure", _)); | 530 PeerConnectionTracker::ACTION_SET_LOCAL_DESCRIPTION, "OnFailure", _)); |
| 515 | 531 |
| 516 // Used to simulate a parse failure. | 532 // Used to simulate a parse failure. |
| 517 mock_dependency_factory_->SetFailToCreateSessionDescription(true); | 533 mock_dependency_factory_->SetFailToCreateSessionDescription(true); |
| 518 pc_handler_->SetLocalDescription(request, description); | 534 pc_handler_->SetLocalDescription(request, description); |
| 519 base::RunLoop().RunUntilIdle(); | 535 RunMessageLoopsUntilIdle(); |
| 520 // A description that failed to be applied shouldn't be stored. | 536 // A description that failed to be applied shouldn't be stored. |
| 521 EXPECT_TRUE(pc_handler_->LocalDescription().Sdp().IsEmpty()); | 537 EXPECT_TRUE(pc_handler_->LocalDescription().Sdp().IsEmpty()); |
| 522 } | 538 } |
| 523 | 539 |
| 524 TEST_F(RTCPeerConnectionHandlerTest, setRemoteDescription) { | 540 TEST_F(RTCPeerConnectionHandlerTest, setRemoteDescription) { |
| 525 blink::WebRTCVoidRequest request; | 541 blink::WebRTCVoidRequest request; |
| 526 blink::WebRTCSessionDescription description; | 542 blink::WebRTCSessionDescription description; |
| 527 description.Initialize(kDummySdpType, kDummySdp); | 543 description.Initialize(kDummySdpType, kDummySdp); |
| 528 | 544 |
| 529 // PeerConnectionTracker::TrackSetSessionDescription is expected to be called | 545 // PeerConnectionTracker::TrackSetSessionDescription is expected to be called |
| 530 // before |mock_peer_connection| is called. | 546 // before |mock_peer_connection| is called. |
| 531 testing::InSequence sequence; | 547 testing::InSequence sequence; |
| 532 EXPECT_CALL(*mock_tracker_.get(), | 548 EXPECT_CALL(*mock_tracker_.get(), |
| 533 TrackSetSessionDescription(pc_handler_.get(), kDummySdp, | 549 TrackSetSessionDescription(pc_handler_.get(), kDummySdp, |
| 534 kDummySdpType, | 550 kDummySdpType, |
| 535 PeerConnectionTracker::SOURCE_REMOTE)); | 551 PeerConnectionTracker::SOURCE_REMOTE)); |
| 536 EXPECT_CALL(*mock_peer_connection_, SetRemoteDescription(_, _)); | 552 EXPECT_CALL(*mock_peer_connection_, SetRemoteDescription(_, _)); |
| 537 | 553 |
| 538 pc_handler_->SetRemoteDescription(request, description); | 554 pc_handler_->SetRemoteDescription(request, description); |
| 539 base::RunLoop().RunUntilIdle(); | 555 RunMessageLoopsUntilIdle(); |
| 540 EXPECT_EQ(description.GetType(), pc_handler_->RemoteDescription().GetType()); | 556 EXPECT_EQ(description.GetType(), pc_handler_->RemoteDescription().GetType()); |
| 541 EXPECT_EQ(description.Sdp(), pc_handler_->RemoteDescription().Sdp()); | 557 EXPECT_EQ(description.Sdp(), pc_handler_->RemoteDescription().Sdp()); |
| 542 | 558 |
| 543 std::string sdp_string; | 559 std::string sdp_string; |
| 544 ASSERT_TRUE(mock_peer_connection_->remote_description() != NULL); | 560 ASSERT_TRUE(mock_peer_connection_->remote_description() != NULL); |
| 545 EXPECT_EQ(kDummySdpType, mock_peer_connection_->remote_description()->type()); | 561 EXPECT_EQ(kDummySdpType, mock_peer_connection_->remote_description()->type()); |
| 546 mock_peer_connection_->remote_description()->ToString(&sdp_string); | 562 mock_peer_connection_->remote_description()->ToString(&sdp_string); |
| 547 EXPECT_EQ(kDummySdp, sdp_string); | 563 EXPECT_EQ(kDummySdp, sdp_string); |
| 548 | 564 |
| 549 // TODO(deadbeef): Also mock the "success" callback from the PeerConnection | 565 // TODO(deadbeef): Also mock the "success" callback from the PeerConnection |
| (...skipping 15 matching lines...) Expand all Loading... |
| 565 PeerConnectionTracker::SOURCE_REMOTE)); | 581 PeerConnectionTracker::SOURCE_REMOTE)); |
| 566 EXPECT_CALL(*mock_tracker_.get(), | 582 EXPECT_CALL(*mock_tracker_.get(), |
| 567 TrackSessionDescriptionCallback( | 583 TrackSessionDescriptionCallback( |
| 568 pc_handler_.get(), | 584 pc_handler_.get(), |
| 569 PeerConnectionTracker::ACTION_SET_REMOTE_DESCRIPTION, | 585 PeerConnectionTracker::ACTION_SET_REMOTE_DESCRIPTION, |
| 570 "OnFailure", _)); | 586 "OnFailure", _)); |
| 571 | 587 |
| 572 // Used to simulate a parse failure. | 588 // Used to simulate a parse failure. |
| 573 mock_dependency_factory_->SetFailToCreateSessionDescription(true); | 589 mock_dependency_factory_->SetFailToCreateSessionDescription(true); |
| 574 pc_handler_->SetRemoteDescription(request, description); | 590 pc_handler_->SetRemoteDescription(request, description); |
| 575 base::RunLoop().RunUntilIdle(); | 591 RunMessageLoopsUntilIdle(); |
| 576 // A description that failed to be applied shouldn't be stored. | 592 // A description that failed to be applied shouldn't be stored. |
| 577 EXPECT_TRUE(pc_handler_->RemoteDescription().Sdp().IsEmpty()); | 593 EXPECT_TRUE(pc_handler_->RemoteDescription().Sdp().IsEmpty()); |
| 578 } | 594 } |
| 579 | 595 |
| 580 TEST_F(RTCPeerConnectionHandlerTest, setConfiguration) { | 596 TEST_F(RTCPeerConnectionHandlerTest, setConfiguration) { |
| 581 blink::WebRTCConfiguration config; | 597 blink::WebRTCConfiguration config; |
| 582 | 598 |
| 583 EXPECT_CALL(*mock_tracker_.get(), | 599 EXPECT_CALL(*mock_tracker_.get(), |
| 584 TrackSetConfiguration(pc_handler_.get(), _)); | 600 TrackSetConfiguration(pc_handler_.get(), _)); |
| 585 // TODO(perkj): Test that the parameters in |config| can be translated when a | 601 // TODO(perkj): Test that the parameters in |config| can be translated when a |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 674 1u, | 690 1u, |
| 675 mock_peer_connection_->local_streams()->at(0)->GetVideoTracks().size()); | 691 mock_peer_connection_->local_streams()->at(0)->GetVideoTracks().size()); |
| 676 | 692 |
| 677 StopAllTracks(local_stream); | 693 StopAllTracks(local_stream); |
| 678 } | 694 } |
| 679 | 695 |
| 680 TEST_F(RTCPeerConnectionHandlerTest, GetStatsNoSelector) { | 696 TEST_F(RTCPeerConnectionHandlerTest, GetStatsNoSelector) { |
| 681 scoped_refptr<MockRTCStatsRequest> request( | 697 scoped_refptr<MockRTCStatsRequest> request( |
| 682 new rtc::RefCountedObject<MockRTCStatsRequest>()); | 698 new rtc::RefCountedObject<MockRTCStatsRequest>()); |
| 683 pc_handler_->getStats(request.get()); | 699 pc_handler_->getStats(request.get()); |
| 684 base::RunLoop().RunUntilIdle(); | 700 RunMessageLoopsUntilIdle(); |
| 685 ASSERT_TRUE(request->result()); | 701 ASSERT_TRUE(request->result()); |
| 686 EXPECT_LT(1, request->result()->report_count()); | 702 EXPECT_LT(1, request->result()->report_count()); |
| 687 } | 703 } |
| 688 | 704 |
| 689 TEST_F(RTCPeerConnectionHandlerTest, GetStatsAfterClose) { | 705 TEST_F(RTCPeerConnectionHandlerTest, GetStatsAfterClose) { |
| 690 scoped_refptr<MockRTCStatsRequest> request( | 706 scoped_refptr<MockRTCStatsRequest> request( |
| 691 new rtc::RefCountedObject<MockRTCStatsRequest>()); | 707 new rtc::RefCountedObject<MockRTCStatsRequest>()); |
| 692 pc_handler_->Stop(); | 708 pc_handler_->Stop(); |
| 693 base::RunLoop().RunUntilIdle(); | 709 RunMessageLoopsUntilIdle(); |
| 694 pc_handler_->getStats(request.get()); | 710 pc_handler_->getStats(request.get()); |
| 695 base::RunLoop().RunUntilIdle(); | 711 RunMessageLoopsUntilIdle(); |
| 696 ASSERT_TRUE(request->result()); | 712 ASSERT_TRUE(request->result()); |
| 697 EXPECT_LT(1, request->result()->report_count()); | 713 EXPECT_LT(1, request->result()->report_count()); |
| 698 } | 714 } |
| 699 | 715 |
| 700 TEST_F(RTCPeerConnectionHandlerTest, GetStatsWithLocalSelector) { | 716 TEST_F(RTCPeerConnectionHandlerTest, GetStatsWithLocalSelector) { |
| 701 blink::WebMediaStream local_stream( | 717 blink::WebMediaStream local_stream( |
| 702 CreateLocalMediaStream("local_stream")); | 718 CreateLocalMediaStream("local_stream")); |
| 703 blink::WebMediaConstraints constraints; | 719 blink::WebMediaConstraints constraints; |
| 704 pc_handler_->AddStream(local_stream, constraints); | 720 pc_handler_->AddStream(local_stream, constraints); |
| 705 blink::WebVector<blink::WebMediaStreamTrack> tracks; | 721 blink::WebVector<blink::WebMediaStreamTrack> tracks; |
| 706 local_stream.AudioTracks(tracks); | 722 local_stream.AudioTracks(tracks); |
| 707 ASSERT_LE(1ul, tracks.size()); | 723 ASSERT_LE(1ul, tracks.size()); |
| 708 | 724 |
| 709 scoped_refptr<MockRTCStatsRequest> request( | 725 scoped_refptr<MockRTCStatsRequest> request( |
| 710 new rtc::RefCountedObject<MockRTCStatsRequest>()); | 726 new rtc::RefCountedObject<MockRTCStatsRequest>()); |
| 711 request->setSelector(tracks[0]); | 727 request->setSelector(tracks[0]); |
| 712 pc_handler_->getStats(request.get()); | 728 pc_handler_->getStats(request.get()); |
| 713 base::RunLoop().RunUntilIdle(); | 729 RunMessageLoopsUntilIdle(); |
| 714 EXPECT_EQ(1, request->result()->report_count()); | 730 EXPECT_EQ(1, request->result()->report_count()); |
| 715 | 731 |
| 716 StopAllTracks(local_stream); | 732 StopAllTracks(local_stream); |
| 717 } | 733 } |
| 718 | 734 |
| 719 TEST_F(RTCPeerConnectionHandlerTest, GetStatsWithRemoteSelector) { | 735 TEST_F(RTCPeerConnectionHandlerTest, GetStatsWithRemoteSelector) { |
| 720 rtc::scoped_refptr<webrtc::MediaStreamInterface> stream( | 736 rtc::scoped_refptr<webrtc::MediaStreamInterface> stream( |
| 721 AddRemoteMockMediaStream("remote_stream", "video", "audio")); | 737 AddRemoteMockMediaStream("remote_stream", "video", "audio")); |
| 722 pc_handler_->observer()->OnAddStream(stream); | 738 pc_handler_->observer()->OnAddStream(stream); |
| 723 base::RunLoop().RunUntilIdle(); | 739 RunMessageLoopsUntilIdle(); |
| 724 const blink::WebMediaStream& remote_stream = mock_client_->remote_stream(); | 740 const blink::WebMediaStream& remote_stream = mock_client_->remote_stream(); |
| 725 | 741 |
| 726 blink::WebVector<blink::WebMediaStreamTrack> tracks; | 742 blink::WebVector<blink::WebMediaStreamTrack> tracks; |
| 727 remote_stream.AudioTracks(tracks); | 743 remote_stream.AudioTracks(tracks); |
| 728 ASSERT_LE(1ul, tracks.size()); | 744 ASSERT_LE(1ul, tracks.size()); |
| 729 | 745 |
| 730 scoped_refptr<MockRTCStatsRequest> request( | 746 scoped_refptr<MockRTCStatsRequest> request( |
| 731 new rtc::RefCountedObject<MockRTCStatsRequest>()); | 747 new rtc::RefCountedObject<MockRTCStatsRequest>()); |
| 732 request->setSelector(tracks[0]); | 748 request->setSelector(tracks[0]); |
| 733 pc_handler_->getStats(request.get()); | 749 pc_handler_->getStats(request.get()); |
| 734 base::RunLoop().RunUntilIdle(); | 750 RunMessageLoopsUntilIdle(); |
| 735 EXPECT_EQ(1, request->result()->report_count()); | 751 EXPECT_EQ(1, request->result()->report_count()); |
| 736 } | 752 } |
| 737 | 753 |
| 738 TEST_F(RTCPeerConnectionHandlerTest, GetStatsWithBadSelector) { | 754 TEST_F(RTCPeerConnectionHandlerTest, GetStatsWithBadSelector) { |
| 739 // The setup is the same as GetStatsWithLocalSelector, but the stream is not | 755 // The setup is the same as GetStatsWithLocalSelector, but the stream is not |
| 740 // added to the PeerConnection. | 756 // added to the PeerConnection. |
| 741 blink::WebMediaStream local_stream( | 757 blink::WebMediaStream local_stream( |
| 742 CreateLocalMediaStream("local_stream_2")); | 758 CreateLocalMediaStream("local_stream_2")); |
| 743 blink::WebMediaConstraints constraints; | 759 blink::WebMediaConstraints constraints; |
| 744 blink::WebVector<blink::WebMediaStreamTrack> tracks; | 760 blink::WebVector<blink::WebMediaStreamTrack> tracks; |
| 745 | 761 |
| 746 local_stream.AudioTracks(tracks); | 762 local_stream.AudioTracks(tracks); |
| 747 blink::WebMediaStreamTrack component = tracks[0]; | 763 blink::WebMediaStreamTrack component = tracks[0]; |
| 748 mock_peer_connection_->SetGetStatsResult(false); | 764 mock_peer_connection_->SetGetStatsResult(false); |
| 749 | 765 |
| 750 scoped_refptr<MockRTCStatsRequest> request( | 766 scoped_refptr<MockRTCStatsRequest> request( |
| 751 new rtc::RefCountedObject<MockRTCStatsRequest>()); | 767 new rtc::RefCountedObject<MockRTCStatsRequest>()); |
| 752 request->setSelector(component); | 768 request->setSelector(component); |
| 753 pc_handler_->getStats(request.get()); | 769 pc_handler_->getStats(request.get()); |
| 754 base::RunLoop().RunUntilIdle(); | 770 RunMessageLoopsUntilIdle(); |
| 755 EXPECT_EQ(0, request->result()->report_count()); | 771 EXPECT_EQ(0, request->result()->report_count()); |
| 756 | 772 |
| 757 StopAllTracks(local_stream); | 773 StopAllTracks(local_stream); |
| 758 } | 774 } |
| 759 | 775 |
| 760 TEST_F(RTCPeerConnectionHandlerTest, GetRTCStats) { | 776 TEST_F(RTCPeerConnectionHandlerTest, GetRTCStats) { |
| 761 WhitelistStatsForTesting(webrtc::RTCTestStats::kType); | 777 WhitelistStatsForTesting(webrtc::RTCTestStats::kType); |
| 762 | 778 |
| 763 rtc::scoped_refptr<webrtc::RTCStatsReport> report = | 779 rtc::scoped_refptr<webrtc::RTCStatsReport> report = |
| 764 webrtc::RTCStatsReport::Create(); | 780 webrtc::RTCStatsReport::Create(); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 782 stats_defined_members->m_sequence_uint64 = ToSequence<uint64_t>(42); | 798 stats_defined_members->m_sequence_uint64 = ToSequence<uint64_t>(42); |
| 783 stats_defined_members->m_sequence_double = ToSequence<double>(42); | 799 stats_defined_members->m_sequence_double = ToSequence<double>(42); |
| 784 stats_defined_members->m_sequence_string = ToSequence<std::string>("42"); | 800 stats_defined_members->m_sequence_string = ToSequence<std::string>("42"); |
| 785 report->AddStats(std::unique_ptr<const webrtc::RTCStats>( | 801 report->AddStats(std::unique_ptr<const webrtc::RTCStats>( |
| 786 stats_defined_members.release())); | 802 stats_defined_members.release())); |
| 787 | 803 |
| 788 pc_handler_->native_peer_connection()->SetGetStatsReport(report); | 804 pc_handler_->native_peer_connection()->SetGetStatsReport(report); |
| 789 std::unique_ptr<blink::WebRTCStatsReport> result; | 805 std::unique_ptr<blink::WebRTCStatsReport> result; |
| 790 pc_handler_->GetStats(std::unique_ptr<blink::WebRTCStatsReportCallback>( | 806 pc_handler_->GetStats(std::unique_ptr<blink::WebRTCStatsReportCallback>( |
| 791 new MockRTCStatsReportCallback(&result))); | 807 new MockRTCStatsReportCallback(&result))); |
| 792 base::RunLoop().RunUntilIdle(); | 808 RunMessageLoopsUntilIdle(); |
| 793 EXPECT_TRUE(result); | 809 EXPECT_TRUE(result); |
| 794 | 810 |
| 795 int undefined_stats_count = 0; | 811 int undefined_stats_count = 0; |
| 796 int defined_stats_count = 0; | 812 int defined_stats_count = 0; |
| 797 for (std::unique_ptr<blink::WebRTCStats> stats = result->Next(); stats; | 813 for (std::unique_ptr<blink::WebRTCStats> stats = result->Next(); stats; |
| 798 stats.reset(result->Next().release())) { | 814 stats.reset(result->Next().release())) { |
| 799 EXPECT_EQ(stats->GetType().Utf8(), webrtc::RTCTestStats::kType); | 815 EXPECT_EQ(stats->GetType().Utf8(), webrtc::RTCTestStats::kType); |
| 800 if (stats->Id().Utf8() == "RTCUndefinedStats") { | 816 if (stats->Id().Utf8() == "RTCUndefinedStats") { |
| 801 ++undefined_stats_count; | 817 ++undefined_stats_count; |
| 802 EXPECT_EQ(stats->Timestamp(), 1.0); | 818 EXPECT_EQ(stats->Timestamp(), 1.0); |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 876 } | 892 } |
| 877 EXPECT_EQ(undefined_stats_count, 1); | 893 EXPECT_EQ(undefined_stats_count, 1); |
| 878 EXPECT_EQ(defined_stats_count, 1); | 894 EXPECT_EQ(defined_stats_count, 1); |
| 879 } | 895 } |
| 880 | 896 |
| 881 TEST_F(RTCPeerConnectionHandlerTest, GetReceivers) { | 897 TEST_F(RTCPeerConnectionHandlerTest, GetReceivers) { |
| 882 std::vector<blink::WebMediaStream> remote_streams; | 898 std::vector<blink::WebMediaStream> remote_streams; |
| 883 | 899 |
| 884 pc_handler_->observer()->OnAddStream( | 900 pc_handler_->observer()->OnAddStream( |
| 885 AddRemoteMockMediaStream("stream0", "video0", "audio0")); | 901 AddRemoteMockMediaStream("stream0", "video0", "audio0")); |
| 886 base::RunLoop().RunUntilIdle(); | 902 RunMessageLoopsUntilIdle(); |
| 887 remote_streams.push_back(mock_client_->remote_stream()); | 903 remote_streams.push_back(mock_client_->remote_stream()); |
| 888 pc_handler_->observer()->OnAddStream( | 904 pc_handler_->observer()->OnAddStream( |
| 889 AddRemoteMockMediaStream("stream1", "video1", "audio1")); | 905 AddRemoteMockMediaStream("stream1", "video1", "audio1")); |
| 890 base::RunLoop().RunUntilIdle(); | 906 RunMessageLoopsUntilIdle(); |
| 891 remote_streams.push_back(mock_client_->remote_stream()); | 907 remote_streams.push_back(mock_client_->remote_stream()); |
| 892 pc_handler_->observer()->OnAddStream( | 908 pc_handler_->observer()->OnAddStream( |
| 893 AddRemoteMockMediaStream("stream2", "video2", "audio2")); | 909 AddRemoteMockMediaStream("stream2", "video2", "audio2")); |
| 894 base::RunLoop().RunUntilIdle(); | 910 RunMessageLoopsUntilIdle(); |
| 895 remote_streams.push_back(mock_client_->remote_stream()); | 911 remote_streams.push_back(mock_client_->remote_stream()); |
| 896 | 912 |
| 897 std::set<std::string> expected_remote_track_ids; | 913 std::set<std::string> expected_remote_track_ids; |
| 898 expected_remote_track_ids.insert("video0"); | 914 expected_remote_track_ids.insert("video0"); |
| 899 expected_remote_track_ids.insert("audio0"); | 915 expected_remote_track_ids.insert("audio0"); |
| 900 expected_remote_track_ids.insert("video1"); | 916 expected_remote_track_ids.insert("video1"); |
| 901 expected_remote_track_ids.insert("audio1"); | 917 expected_remote_track_ids.insert("audio1"); |
| 902 expected_remote_track_ids.insert("video2"); | 918 expected_remote_track_ids.insert("video2"); |
| 903 expected_remote_track_ids.insert("audio2"); | 919 expected_remote_track_ids.insert("audio2"); |
| 904 | 920 |
| (...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1147 pc_handler_.get(), | 1163 pc_handler_.get(), |
| 1148 testing::Property(&blink::WebMediaStream::Id, | 1164 testing::Property(&blink::WebMediaStream::Id, |
| 1149 blink::WebString::FromASCII(remote_stream_label)), | 1165 blink::WebString::FromASCII(remote_stream_label)), |
| 1150 PeerConnectionTracker::SOURCE_REMOTE)); | 1166 PeerConnectionTracker::SOURCE_REMOTE)); |
| 1151 EXPECT_CALL(*mock_client_.get(), | 1167 EXPECT_CALL(*mock_client_.get(), |
| 1152 DidRemoveRemoteStream(testing::Property( | 1168 DidRemoveRemoteStream(testing::Property( |
| 1153 &blink::WebMediaStream::Id, | 1169 &blink::WebMediaStream::Id, |
| 1154 blink::WebString::FromASCII(remote_stream_label)))); | 1170 blink::WebString::FromASCII(remote_stream_label)))); |
| 1155 | 1171 |
| 1156 pc_handler_->observer()->OnAddStream(remote_stream); | 1172 pc_handler_->observer()->OnAddStream(remote_stream); |
| 1157 base::RunLoop().RunUntilIdle(); | 1173 RunMessageLoopsUntilIdle(); |
| 1158 pc_handler_->observer()->OnRemoveStream(remote_stream); | 1174 pc_handler_->observer()->OnRemoveStream(remote_stream); |
| 1159 base::RunLoop().RunUntilIdle(); | 1175 RunMessageLoopsUntilIdle(); |
| 1160 } | 1176 } |
| 1161 | 1177 |
| 1162 // This test that WebKit is notified about remote track state changes. | 1178 // This test that WebKit is notified about remote track state changes. |
| 1163 TEST_F(RTCPeerConnectionHandlerTest, RemoteTrackState) { | 1179 TEST_F(RTCPeerConnectionHandlerTest, RemoteTrackState) { |
| 1164 std::string remote_stream_label("remote_stream"); | 1180 std::string remote_stream_label("remote_stream"); |
| 1165 rtc::scoped_refptr<webrtc::MediaStreamInterface> remote_stream( | 1181 rtc::scoped_refptr<webrtc::MediaStreamInterface> remote_stream( |
| 1166 AddRemoteMockMediaStream(remote_stream_label, "video", "audio")); | 1182 AddRemoteMockMediaStream(remote_stream_label, "video", "audio")); |
| 1167 | 1183 |
| 1168 testing::InSequence sequence; | 1184 testing::InSequence sequence; |
| 1169 EXPECT_CALL(*mock_client_.get(), | 1185 EXPECT_CALL(*mock_client_.get(), |
| 1170 DidAddRemoteStream(testing::Property( | 1186 DidAddRemoteStream(testing::Property( |
| 1171 &blink::WebMediaStream::Id, | 1187 &blink::WebMediaStream::Id, |
| 1172 blink::WebString::FromASCII(remote_stream_label)))); | 1188 blink::WebString::FromASCII(remote_stream_label)))); |
| 1173 pc_handler_->observer()->OnAddStream(remote_stream); | 1189 pc_handler_->observer()->OnAddStream(remote_stream); |
| 1174 base::RunLoop().RunUntilIdle(); | 1190 RunMessageLoopsUntilIdle(); |
| 1175 const blink::WebMediaStream& webkit_stream = mock_client_->remote_stream(); | 1191 const blink::WebMediaStream& webkit_stream = mock_client_->remote_stream(); |
| 1176 | 1192 |
| 1177 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; | 1193 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; |
| 1178 webkit_stream.AudioTracks(audio_tracks); | 1194 webkit_stream.AudioTracks(audio_tracks); |
| 1179 EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateLive, | 1195 EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateLive, |
| 1180 audio_tracks[0].Source().GetReadyState()); | 1196 audio_tracks[0].Source().GetReadyState()); |
| 1181 | 1197 |
| 1182 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; | 1198 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; |
| 1183 webkit_stream.VideoTracks(video_tracks); | 1199 webkit_stream.VideoTracks(video_tracks); |
| 1184 EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateLive, | 1200 EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateLive, |
| 1185 video_tracks[0].Source().GetReadyState()); | 1201 video_tracks[0].Source().GetReadyState()); |
| 1186 | 1202 |
| 1187 static_cast<MockWebRtcAudioTrack*>(remote_stream->GetAudioTracks()[0].get()) | 1203 static_cast<MockWebRtcAudioTrack*>(remote_stream->GetAudioTracks()[0].get()) |
| 1188 ->SetEnded(); | 1204 ->SetEnded(); |
| 1189 base::RunLoop().RunUntilIdle(); | 1205 RunMessageLoopsUntilIdle(); |
| 1190 EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateEnded, | 1206 EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateEnded, |
| 1191 audio_tracks[0].Source().GetReadyState()); | 1207 audio_tracks[0].Source().GetReadyState()); |
| 1192 | 1208 |
| 1193 static_cast<MockWebRtcVideoTrack*>(remote_stream->GetVideoTracks()[0].get()) | 1209 static_cast<MockWebRtcVideoTrack*>(remote_stream->GetVideoTracks()[0].get()) |
| 1194 ->SetEnded(); | 1210 ->SetEnded(); |
| 1195 base::RunLoop().RunUntilIdle(); | 1211 RunMessageLoopsUntilIdle(); |
| 1196 EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateEnded, | 1212 EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateEnded, |
| 1197 video_tracks[0].Source().GetReadyState()); | 1213 video_tracks[0].Source().GetReadyState()); |
| 1198 } | 1214 } |
| 1199 | 1215 |
| 1200 TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddAudioTrackFromRemoteStream) { | 1216 TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddAudioTrackFromRemoteStream) { |
| 1201 std::string remote_stream_label("remote_stream"); | 1217 std::string remote_stream_label("remote_stream"); |
| 1202 base::RunLoop run_loop; | 1218 base::RunLoop run_loop; |
| 1203 | 1219 |
| 1204 // Grab the added media stream when it's been successfully added to the PC. | 1220 // Grab the added media stream when it's been successfully added to the PC. |
| 1205 blink::WebMediaStream webkit_stream; | 1221 blink::WebMediaStream webkit_stream; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1220 // source later. | 1236 // source later. |
| 1221 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; | 1237 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; |
| 1222 webkit_stream.AudioTracks(audio_tracks); | 1238 webkit_stream.AudioTracks(audio_tracks); |
| 1223 EXPECT_EQ(1u, audio_tracks.size()); | 1239 EXPECT_EQ(1u, audio_tracks.size()); |
| 1224 } | 1240 } |
| 1225 | 1241 |
| 1226 // Remove the Webrtc audio track from the Webrtc MediaStream. | 1242 // Remove the Webrtc audio track from the Webrtc MediaStream. |
| 1227 scoped_refptr<webrtc::AudioTrackInterface> webrtc_track = | 1243 scoped_refptr<webrtc::AudioTrackInterface> webrtc_track = |
| 1228 remote_stream->GetAudioTracks()[0].get(); | 1244 remote_stream->GetAudioTracks()[0].get(); |
| 1229 remote_stream->RemoveTrack(webrtc_track.get()); | 1245 remote_stream->RemoveTrack(webrtc_track.get()); |
| 1230 base::RunLoop().RunUntilIdle(); | 1246 RunMessageLoopsUntilIdle(); |
| 1231 | 1247 |
| 1232 { | 1248 { |
| 1233 blink::WebVector<blink::WebMediaStreamTrack> modified_audio_tracks1; | 1249 blink::WebVector<blink::WebMediaStreamTrack> modified_audio_tracks1; |
| 1234 webkit_stream.AudioTracks(modified_audio_tracks1); | 1250 webkit_stream.AudioTracks(modified_audio_tracks1); |
| 1235 EXPECT_EQ(0u, modified_audio_tracks1.size()); | 1251 EXPECT_EQ(0u, modified_audio_tracks1.size()); |
| 1236 } | 1252 } |
| 1237 | 1253 |
| 1238 blink::WebHeap::CollectGarbageForTesting(); | 1254 blink::WebHeap::CollectGarbageForTesting(); |
| 1239 | 1255 |
| 1240 // Add the WebRtc audio track again. | 1256 // Add the WebRtc audio track again. |
| 1241 remote_stream->AddTrack(webrtc_track.get()); | 1257 remote_stream->AddTrack(webrtc_track.get()); |
| 1242 base::RunLoop().RunUntilIdle(); | 1258 RunMessageLoopsUntilIdle(); |
| 1243 blink::WebVector<blink::WebMediaStreamTrack> modified_audio_tracks2; | 1259 blink::WebVector<blink::WebMediaStreamTrack> modified_audio_tracks2; |
| 1244 webkit_stream.AudioTracks(modified_audio_tracks2); | 1260 webkit_stream.AudioTracks(modified_audio_tracks2); |
| 1245 EXPECT_EQ(1u, modified_audio_tracks2.size()); | 1261 EXPECT_EQ(1u, modified_audio_tracks2.size()); |
| 1246 } | 1262 } |
| 1247 | 1263 |
| 1248 TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddVideoTrackFromRemoteStream) { | 1264 TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddVideoTrackFromRemoteStream) { |
| 1249 std::string remote_stream_label("remote_stream"); | 1265 std::string remote_stream_label("remote_stream"); |
| 1250 base::RunLoop run_loop; | 1266 base::RunLoop run_loop; |
| 1251 | 1267 |
| 1252 // Grab the added media stream when it's been successfully added to the PC. | 1268 // Grab the added media stream when it's been successfully added to the PC. |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1268 // source later. | 1284 // source later. |
| 1269 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; | 1285 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; |
| 1270 webkit_stream.VideoTracks(video_tracks); | 1286 webkit_stream.VideoTracks(video_tracks); |
| 1271 EXPECT_EQ(1u, video_tracks.size()); | 1287 EXPECT_EQ(1u, video_tracks.size()); |
| 1272 } | 1288 } |
| 1273 | 1289 |
| 1274 // Remove the Webrtc video track from the Webrtc MediaStream. | 1290 // Remove the Webrtc video track from the Webrtc MediaStream. |
| 1275 scoped_refptr<webrtc::VideoTrackInterface> webrtc_track = | 1291 scoped_refptr<webrtc::VideoTrackInterface> webrtc_track = |
| 1276 remote_stream->GetVideoTracks()[0].get(); | 1292 remote_stream->GetVideoTracks()[0].get(); |
| 1277 remote_stream->RemoveTrack(webrtc_track.get()); | 1293 remote_stream->RemoveTrack(webrtc_track.get()); |
| 1278 base::RunLoop().RunUntilIdle(); | 1294 RunMessageLoopsUntilIdle(); |
| 1279 { | 1295 { |
| 1280 blink::WebVector<blink::WebMediaStreamTrack> modified_video_tracks1; | 1296 blink::WebVector<blink::WebMediaStreamTrack> modified_video_tracks1; |
| 1281 webkit_stream.VideoTracks(modified_video_tracks1); | 1297 webkit_stream.VideoTracks(modified_video_tracks1); |
| 1282 EXPECT_EQ(0u, modified_video_tracks1.size()); | 1298 EXPECT_EQ(0u, modified_video_tracks1.size()); |
| 1283 } | 1299 } |
| 1284 | 1300 |
| 1285 blink::WebHeap::CollectGarbageForTesting(); | 1301 blink::WebHeap::CollectGarbageForTesting(); |
| 1286 | 1302 |
| 1287 // Add the WebRtc video track again. | 1303 // Add the WebRtc video track again. |
| 1288 remote_stream->AddTrack(webrtc_track.get()); | 1304 remote_stream->AddTrack(webrtc_track.get()); |
| 1289 base::RunLoop().RunUntilIdle(); | 1305 RunMessageLoopsUntilIdle(); |
| 1290 blink::WebVector<blink::WebMediaStreamTrack> modified_video_tracks2; | 1306 blink::WebVector<blink::WebMediaStreamTrack> modified_video_tracks2; |
| 1291 webkit_stream.VideoTracks(modified_video_tracks2); | 1307 webkit_stream.VideoTracks(modified_video_tracks2); |
| 1292 EXPECT_EQ(1u, modified_video_tracks2.size()); | 1308 EXPECT_EQ(1u, modified_video_tracks2.size()); |
| 1293 } | 1309 } |
| 1294 | 1310 |
| 1295 TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddTracksFromRemoteStream) { | 1311 TEST_F(RTCPeerConnectionHandlerTest, RemoveAndAddTracksFromRemoteStream) { |
| 1296 std::string remote_stream_label("remote_stream"); | 1312 std::string remote_stream_label("remote_stream"); |
| 1297 base::RunLoop run_loop; | 1313 base::RunLoop run_loop; |
| 1298 | 1314 |
| 1299 // Grab the added media stream when it's been successfully added to the PC. | 1315 // Grab the added media stream when it's been successfully added to the PC. |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1319 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; | 1335 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; |
| 1320 webkit_stream.VideoTracks(video_tracks); | 1336 webkit_stream.VideoTracks(video_tracks); |
| 1321 EXPECT_EQ(1u, video_tracks.size()); | 1337 EXPECT_EQ(1u, video_tracks.size()); |
| 1322 } | 1338 } |
| 1323 | 1339 |
| 1324 // Remove the Webrtc tracks from the MediaStream. | 1340 // Remove the Webrtc tracks from the MediaStream. |
| 1325 auto audio_track = remote_stream->GetAudioTracks()[0]; | 1341 auto audio_track = remote_stream->GetAudioTracks()[0]; |
| 1326 EXPECT_TRUE(remote_stream->RemoveTrack(audio_track.get())); | 1342 EXPECT_TRUE(remote_stream->RemoveTrack(audio_track.get())); |
| 1327 auto video_track = remote_stream->GetVideoTracks()[0]; | 1343 auto video_track = remote_stream->GetVideoTracks()[0]; |
| 1328 EXPECT_TRUE(remote_stream->RemoveTrack(video_track.get())); | 1344 EXPECT_TRUE(remote_stream->RemoveTrack(video_track.get())); |
| 1329 base::RunLoop().RunUntilIdle(); | 1345 RunMessageLoopsUntilIdle(); |
| 1330 | 1346 |
| 1331 { | 1347 { |
| 1332 blink::WebVector<blink::WebMediaStreamTrack> modified_audio_tracks; | 1348 blink::WebVector<blink::WebMediaStreamTrack> modified_audio_tracks; |
| 1333 webkit_stream.AudioTracks(modified_audio_tracks); | 1349 webkit_stream.AudioTracks(modified_audio_tracks); |
| 1334 EXPECT_EQ(0u, modified_audio_tracks.size()); | 1350 EXPECT_EQ(0u, modified_audio_tracks.size()); |
| 1335 blink::WebVector<blink::WebMediaStreamTrack> modified_video_tracks; | 1351 blink::WebVector<blink::WebMediaStreamTrack> modified_video_tracks; |
| 1336 webkit_stream.VideoTracks(modified_video_tracks); | 1352 webkit_stream.VideoTracks(modified_video_tracks); |
| 1337 EXPECT_EQ(0u, modified_video_tracks.size()); | 1353 EXPECT_EQ(0u, modified_video_tracks.size()); |
| 1338 } | 1354 } |
| 1339 | 1355 |
| 1340 blink::WebHeap::CollectGarbageForTesting(); | 1356 blink::WebHeap::CollectGarbageForTesting(); |
| 1341 | 1357 |
| 1342 // Add the tracks again. | 1358 // Add the tracks again. |
| 1343 remote_stream->AddTrack(audio_track.get()); | 1359 remote_stream->AddTrack(audio_track.get()); |
| 1344 base::RunLoop().RunUntilIdle(); | 1360 RunMessageLoopsUntilIdle(); |
| 1345 remote_stream->AddTrack(video_track.get()); | 1361 remote_stream->AddTrack(video_track.get()); |
| 1346 base::RunLoop().RunUntilIdle(); | 1362 RunMessageLoopsUntilIdle(); |
| 1347 | 1363 |
| 1348 blink::WebHeap::CollectGarbageForTesting(); | 1364 blink::WebHeap::CollectGarbageForTesting(); |
| 1349 | 1365 |
| 1350 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; | 1366 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; |
| 1351 webkit_stream.AudioTracks(audio_tracks); | 1367 webkit_stream.AudioTracks(audio_tracks); |
| 1352 EXPECT_EQ(1u, audio_tracks.size()); | 1368 EXPECT_EQ(1u, audio_tracks.size()); |
| 1353 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; | 1369 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; |
| 1354 webkit_stream.VideoTracks(video_tracks); | 1370 webkit_stream.VideoTracks(video_tracks); |
| 1355 EXPECT_EQ(1u, video_tracks.size()); | 1371 EXPECT_EQ(1u, video_tracks.size()); |
| 1356 } | 1372 } |
| 1357 | 1373 |
| 1358 TEST_F(RTCPeerConnectionHandlerTest, OnIceCandidate) { | 1374 TEST_F(RTCPeerConnectionHandlerTest, OnIceCandidate) { |
| 1359 testing::InSequence sequence; | 1375 testing::InSequence sequence; |
| 1360 EXPECT_CALL(*mock_tracker_.get(), | 1376 EXPECT_CALL(*mock_tracker_.get(), |
| 1361 TrackAddIceCandidate(pc_handler_.get(), _, | 1377 TrackAddIceCandidate(pc_handler_.get(), _, |
| 1362 PeerConnectionTracker::SOURCE_LOCAL, true)); | 1378 PeerConnectionTracker::SOURCE_LOCAL, true)); |
| 1363 EXPECT_CALL(*mock_client_.get(), DidGenerateICECandidate(_)); | 1379 EXPECT_CALL(*mock_client_.get(), DidGenerateICECandidate(_)); |
| 1364 | 1380 |
| 1365 std::unique_ptr<webrtc::IceCandidateInterface> native_candidate( | 1381 std::unique_ptr<webrtc::IceCandidateInterface> native_candidate( |
| 1366 mock_dependency_factory_->CreateIceCandidate("sdpMid", 1, kDummySdp)); | 1382 mock_dependency_factory_->CreateIceCandidate("sdpMid", 1, kDummySdp)); |
| 1367 pc_handler_->observer()->OnIceCandidate(native_candidate.get()); | 1383 pc_handler_->observer()->OnIceCandidate(native_candidate.get()); |
| 1368 base::RunLoop().RunUntilIdle(); | 1384 RunMessageLoopsUntilIdle(); |
| 1369 EXPECT_EQ("sdpMid", mock_client_->candidate_mid()); | 1385 EXPECT_EQ("sdpMid", mock_client_->candidate_mid()); |
| 1370 EXPECT_EQ(1, mock_client_->candidate_mlineindex()); | 1386 EXPECT_EQ(1, mock_client_->candidate_mlineindex()); |
| 1371 EXPECT_EQ(kDummySdp, mock_client_->candidate_sdp()); | 1387 EXPECT_EQ(kDummySdp, mock_client_->candidate_sdp()); |
| 1372 } | 1388 } |
| 1373 | 1389 |
| 1374 TEST_F(RTCPeerConnectionHandlerTest, OnRenegotiationNeeded) { | 1390 TEST_F(RTCPeerConnectionHandlerTest, OnRenegotiationNeeded) { |
| 1375 testing::InSequence sequence; | 1391 testing::InSequence sequence; |
| 1376 EXPECT_CALL(*mock_tracker_.get(), | 1392 EXPECT_CALL(*mock_tracker_.get(), |
| 1377 TrackOnRenegotiationNeeded(pc_handler_.get())); | 1393 TrackOnRenegotiationNeeded(pc_handler_.get())); |
| 1378 EXPECT_CALL(*mock_client_.get(), NegotiationNeeded()); | 1394 EXPECT_CALL(*mock_client_.get(), NegotiationNeeded()); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1412 testing::Ref(tracks[0]))); | 1428 testing::Ref(tracks[0]))); |
| 1413 | 1429 |
| 1414 std::unique_ptr<blink::WebRTCDTMFSenderHandler> sender( | 1430 std::unique_ptr<blink::WebRTCDTMFSenderHandler> sender( |
| 1415 pc_handler_->CreateDTMFSender(tracks[0])); | 1431 pc_handler_->CreateDTMFSender(tracks[0])); |
| 1416 EXPECT_TRUE(sender.get()); | 1432 EXPECT_TRUE(sender.get()); |
| 1417 | 1433 |
| 1418 StopAllTracks(local_stream); | 1434 StopAllTracks(local_stream); |
| 1419 } | 1435 } |
| 1420 | 1436 |
| 1421 } // namespace content | 1437 } // namespace content |
| OLD | NEW |