| 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 <memory> | 9 #include <memory> |
| 10 #include <string> | 10 #include <string> |
| 11 #include <vector> | 11 #include <vector> |
| 12 | 12 |
| 13 #include "base/location.h" | 13 #include "base/location.h" |
| 14 #include "base/run_loop.h" | 14 #include "base/run_loop.h" |
| 15 #include "base/single_thread_task_runner.h" | 15 #include "base/single_thread_task_runner.h" |
| 16 #include "base/strings/utf_string_conversions.h" | 16 #include "base/strings/utf_string_conversions.h" |
| 17 #include "base/thread_task_runner_handle.h" | 17 #include "base/thread_task_runner_handle.h" |
| 18 #include "base/values.h" | 18 #include "base/values.h" |
| 19 #include "content/child/child_process.h" | 19 #include "content/child/child_process.h" |
| 20 #include "content/renderer/media/media_stream.h" | 20 #include "content/renderer/media/media_stream.h" |
| 21 #include "content/renderer/media/media_stream_audio_source.h" | 21 #include "content/renderer/media/media_stream_audio_source.h" |
| 22 #include "content/renderer/media/media_stream_audio_track.h" | |
| 23 #include "content/renderer/media/media_stream_source.h" | 22 #include "content/renderer/media/media_stream_source.h" |
| 24 #include "content/renderer/media/media_stream_video_track.h" | 23 #include "content/renderer/media/media_stream_video_track.h" |
| 25 #include "content/renderer/media/mock_audio_device_factory.h" | |
| 26 #include "content/renderer/media/mock_constraint_factory.h" | |
| 27 #include "content/renderer/media/mock_data_channel_impl.h" | 24 #include "content/renderer/media/mock_data_channel_impl.h" |
| 28 #include "content/renderer/media/mock_media_stream_video_source.h" | 25 #include "content/renderer/media/mock_media_stream_video_source.h" |
| 29 #include "content/renderer/media/mock_peer_connection_impl.h" | 26 #include "content/renderer/media/mock_peer_connection_impl.h" |
| 30 #include "content/renderer/media/mock_web_rtc_peer_connection_handler_client.h" | 27 #include "content/renderer/media/mock_web_rtc_peer_connection_handler_client.h" |
| 31 #include "content/renderer/media/peer_connection_tracker.h" | 28 #include "content/renderer/media/peer_connection_tracker.h" |
| 32 #include "content/renderer/media/webrtc/mock_peer_connection_dependency_factory.
h" | 29 #include "content/renderer/media/webrtc/mock_peer_connection_dependency_factory.
h" |
| 33 #include "content/renderer/media/webrtc/processed_local_audio_source.h" | 30 #include "content/renderer/media/webrtc/webrtc_local_audio_track_adapter.h" |
| 31 #include "content/renderer/media/webrtc_local_audio_track.h" |
| 34 #include "testing/gmock/include/gmock/gmock.h" | 32 #include "testing/gmock/include/gmock/gmock.h" |
| 35 #include "testing/gtest/include/gtest/gtest.h" | 33 #include "testing/gtest/include/gtest/gtest.h" |
| 36 #include "third_party/WebKit/public/platform/WebMediaConstraints.h" | 34 #include "third_party/WebKit/public/platform/WebMediaConstraints.h" |
| 37 #include "third_party/WebKit/public/platform/WebMediaStream.h" | 35 #include "third_party/WebKit/public/platform/WebMediaStream.h" |
| 38 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" | 36 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" |
| 39 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" | 37 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" |
| 40 #include "third_party/WebKit/public/platform/WebRTCConfiguration.h" | 38 #include "third_party/WebKit/public/platform/WebRTCConfiguration.h" |
| 41 #include "third_party/WebKit/public/platform/WebRTCDTMFSenderHandler.h" | 39 #include "third_party/WebKit/public/platform/WebRTCDTMFSenderHandler.h" |
| 42 #include "third_party/WebKit/public/platform/WebRTCDataChannelHandler.h" | 40 #include "third_party/WebKit/public/platform/WebRTCDataChannelHandler.h" |
| 43 #include "third_party/WebKit/public/platform/WebRTCDataChannelInit.h" | 41 #include "third_party/WebKit/public/platform/WebRTCDataChannelInit.h" |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 243 mock_dependency_factory_.reset(); | 241 mock_dependency_factory_.reset(); |
| 244 mock_client_.reset(); | 242 mock_client_.reset(); |
| 245 blink::WebHeap::collectAllGarbageForTesting(); | 243 blink::WebHeap::collectAllGarbageForTesting(); |
| 246 } | 244 } |
| 247 | 245 |
| 248 // Creates a WebKit local MediaStream. | 246 // Creates a WebKit local MediaStream. |
| 249 blink::WebMediaStream CreateLocalMediaStream( | 247 blink::WebMediaStream CreateLocalMediaStream( |
| 250 const std::string& stream_label) { | 248 const std::string& stream_label) { |
| 251 std::string video_track_label("video-label"); | 249 std::string video_track_label("video-label"); |
| 252 std::string audio_track_label("audio-label"); | 250 std::string audio_track_label("audio-label"); |
| 253 blink::WebMediaStreamSource blink_audio_source; | 251 blink::WebMediaStreamSource audio_source; |
| 254 blink_audio_source.initialize(blink::WebString::fromUTF8(audio_track_label), | 252 audio_source.initialize(blink::WebString::fromUTF8(audio_track_label), |
| 255 blink::WebMediaStreamSource::TypeAudio, | 253 blink::WebMediaStreamSource::TypeAudio, |
| 256 blink::WebString::fromUTF8("audio_track"), | 254 blink::WebString::fromUTF8("audio_track"), |
| 257 false /* remote */); | 255 false /* remote */); |
| 258 ProcessedLocalAudioSource* const audio_source = | 256 audio_source.setExtraData(new MediaStreamAudioSource()); |
| 259 new ProcessedLocalAudioSource( | |
| 260 -1 /* consumer_render_frame_id is N/A for non-browser tests */, | |
| 261 StreamDeviceInfo(MEDIA_DEVICE_AUDIO_CAPTURE, "Mock device", | |
| 262 "mock_device_id", | |
| 263 media::AudioParameters::kAudioCDSampleRate, | |
| 264 media::CHANNEL_LAYOUT_STEREO, | |
| 265 media::AudioParameters::kAudioCDSampleRate / 100), | |
| 266 mock_dependency_factory_.get()); | |
| 267 audio_source->SetAllowInvalidRenderFrameIdForTesting(true); | |
| 268 audio_source->SetSourceConstraints( | |
| 269 MockConstraintFactory().CreateWebMediaConstraints()); | |
| 270 blink_audio_source.setExtraData(audio_source); // Takes ownership. | |
| 271 | |
| 272 blink::WebMediaStreamSource video_source; | 257 blink::WebMediaStreamSource video_source; |
| 273 video_source.initialize(blink::WebString::fromUTF8(video_track_label), | 258 video_source.initialize(blink::WebString::fromUTF8(video_track_label), |
| 274 blink::WebMediaStreamSource::TypeVideo, | 259 blink::WebMediaStreamSource::TypeVideo, |
| 275 blink::WebString::fromUTF8("video_track"), | 260 blink::WebString::fromUTF8("video_track"), |
| 276 false /* remote */); | 261 false /* remote */); |
| 277 MockMediaStreamVideoSource* native_video_source = | 262 MockMediaStreamVideoSource* native_video_source = |
| 278 new MockMediaStreamVideoSource(false); | 263 new MockMediaStreamVideoSource(false); |
| 279 video_source.setExtraData(native_video_source); | 264 video_source.setExtraData(native_video_source); |
| 280 | 265 |
| 281 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks( | 266 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks( |
| 282 static_cast<size_t>(1)); | 267 static_cast<size_t>(1)); |
| 283 audio_tracks[0].initialize(blink_audio_source.id(), blink_audio_source); | 268 audio_tracks[0].initialize(audio_source.id(), audio_source); |
| 284 EXPECT_CALL(*mock_audio_device_factory_.mock_capturer_source(), | 269 scoped_refptr<WebRtcLocalAudioTrackAdapter> adapter( |
| 285 Initialize(_, _, -1)); | 270 WebRtcLocalAudioTrackAdapter::Create(audio_track_label, nullptr)); |
| 286 EXPECT_CALL(*mock_audio_device_factory_.mock_capturer_source(), | 271 std::unique_ptr<WebRtcLocalAudioTrack> native_track( |
| 287 SetAutomaticGainControl(true)); | 272 new WebRtcLocalAudioTrack(adapter.get())); |
| 288 EXPECT_CALL(*mock_audio_device_factory_.mock_capturer_source(), Start()); | 273 audio_tracks[0].setExtraData(native_track.release()); |
| 289 EXPECT_CALL(*mock_audio_device_factory_.mock_capturer_source(), Stop()); | |
| 290 CHECK(audio_source->ConnectToTrack(audio_tracks[0])); | |
| 291 blink::WebVector<blink::WebMediaStreamTrack> video_tracks( | 274 blink::WebVector<blink::WebMediaStreamTrack> video_tracks( |
| 292 static_cast<size_t>(1)); | 275 static_cast<size_t>(1)); |
| 293 blink::WebMediaConstraints video_constraints; | 276 blink::WebMediaConstraints video_constraints; |
| 294 video_constraints.initialize(); | 277 video_constraints.initialize(); |
| 295 video_tracks[0] = MediaStreamVideoTrack::CreateVideoTrack( | 278 video_tracks[0] = MediaStreamVideoTrack::CreateVideoTrack( |
| 296 native_video_source, video_constraints, | 279 native_video_source, video_constraints, |
| 297 MediaStreamVideoSource::ConstraintsCallback(), true); | 280 MediaStreamVideoSource::ConstraintsCallback(), true); |
| 298 | 281 |
| 299 blink::WebMediaStream local_stream; | 282 blink::WebMediaStream local_stream; |
| 300 local_stream.initialize(base::UTF8ToUTF16(stream_label), audio_tracks, | 283 local_stream.initialize(base::UTF8ToUTF16(stream_label), audio_tracks, |
| (...skipping 13 matching lines...) Expand all Loading... |
| 314 if (!video_track_label.empty()) { | 297 if (!video_track_label.empty()) { |
| 315 stream->AddTrack(MockWebRtcVideoTrack::Create(video_track_label).get()); | 298 stream->AddTrack(MockWebRtcVideoTrack::Create(video_track_label).get()); |
| 316 } | 299 } |
| 317 if (!audio_track_label.empty()) { | 300 if (!audio_track_label.empty()) { |
| 318 stream->AddTrack(MockWebRtcAudioTrack::Create(audio_track_label).get()); | 301 stream->AddTrack(MockWebRtcAudioTrack::Create(audio_track_label).get()); |
| 319 } | 302 } |
| 320 mock_peer_connection_->AddRemoteStream(stream.get()); | 303 mock_peer_connection_->AddRemoteStream(stream.get()); |
| 321 return stream; | 304 return stream; |
| 322 } | 305 } |
| 323 | 306 |
| 324 void StopAllTracks(const blink::WebMediaStream& stream) { | |
| 325 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; | |
| 326 stream.audioTracks(audio_tracks); | |
| 327 for (const auto& track : audio_tracks) | |
| 328 MediaStreamAudioTrack::From(track)->Stop(); | |
| 329 | |
| 330 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; | |
| 331 stream.videoTracks(video_tracks); | |
| 332 for (const auto& track : video_tracks) | |
| 333 MediaStreamVideoTrack::GetVideoTrack(track)->Stop(); | |
| 334 } | |
| 335 | |
| 336 base::MessageLoop message_loop_; | 307 base::MessageLoop message_loop_; |
| 337 std::unique_ptr<ChildProcess> child_process_; | 308 std::unique_ptr<ChildProcess> child_process_; |
| 338 std::unique_ptr<MockWebRTCPeerConnectionHandlerClient> mock_client_; | 309 std::unique_ptr<MockWebRTCPeerConnectionHandlerClient> mock_client_; |
| 339 std::unique_ptr<MockPeerConnectionDependencyFactory> mock_dependency_factory_; | 310 std::unique_ptr<MockPeerConnectionDependencyFactory> mock_dependency_factory_; |
| 340 std::unique_ptr<NiceMock<MockPeerConnectionTracker>> mock_tracker_; | 311 std::unique_ptr<NiceMock<MockPeerConnectionTracker>> mock_tracker_; |
| 341 std::unique_ptr<RTCPeerConnectionHandlerUnderTest> pc_handler_; | 312 std::unique_ptr<RTCPeerConnectionHandlerUnderTest> pc_handler_; |
| 342 MockAudioDeviceFactory mock_audio_device_factory_; | |
| 343 | 313 |
| 344 // Weak reference to the mocked native peer connection implementation. | 314 // Weak reference to the mocked native peer connection implementation. |
| 345 MockPeerConnectionImpl* mock_peer_connection_; | 315 MockPeerConnectionImpl* mock_peer_connection_; |
| 346 }; | 316 }; |
| 347 | 317 |
| 348 TEST_F(RTCPeerConnectionHandlerTest, Destruct) { | 318 TEST_F(RTCPeerConnectionHandlerTest, Destruct) { |
| 349 EXPECT_CALL(*mock_tracker_.get(), UnregisterPeerConnection(pc_handler_.get())) | 319 EXPECT_CALL(*mock_tracker_.get(), UnregisterPeerConnection(pc_handler_.get())) |
| 350 .Times(1); | 320 .Times(1); |
| 351 pc_handler_.reset(NULL); | 321 pc_handler_.reset(NULL); |
| 352 } | 322 } |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 517 EXPECT_EQ(stream_label, mock_peer_connection_->stream_label()); | 487 EXPECT_EQ(stream_label, mock_peer_connection_->stream_label()); |
| 518 EXPECT_EQ(1u, | 488 EXPECT_EQ(1u, |
| 519 mock_peer_connection_->local_streams()->at(0)->GetAudioTracks().size()); | 489 mock_peer_connection_->local_streams()->at(0)->GetAudioTracks().size()); |
| 520 EXPECT_EQ(1u, | 490 EXPECT_EQ(1u, |
| 521 mock_peer_connection_->local_streams()->at(0)->GetVideoTracks().size()); | 491 mock_peer_connection_->local_streams()->at(0)->GetVideoTracks().size()); |
| 522 | 492 |
| 523 EXPECT_FALSE(pc_handler_->addStream(local_stream, constraints)); | 493 EXPECT_FALSE(pc_handler_->addStream(local_stream, constraints)); |
| 524 | 494 |
| 525 pc_handler_->removeStream(local_stream); | 495 pc_handler_->removeStream(local_stream); |
| 526 EXPECT_EQ(0u, mock_peer_connection_->local_streams()->count()); | 496 EXPECT_EQ(0u, mock_peer_connection_->local_streams()->count()); |
| 527 | |
| 528 StopAllTracks(local_stream); | |
| 529 } | 497 } |
| 530 | 498 |
| 531 TEST_F(RTCPeerConnectionHandlerTest, addStreamWithStoppedAudioAndVideoTrack) { | 499 TEST_F(RTCPeerConnectionHandlerTest, addStreamWithStoppedAudioAndVideoTrack) { |
| 532 std::string stream_label = "local_stream"; | 500 std::string stream_label = "local_stream"; |
| 533 blink::WebMediaStream local_stream( | 501 blink::WebMediaStream local_stream( |
| 534 CreateLocalMediaStream(stream_label)); | 502 CreateLocalMediaStream(stream_label)); |
| 535 blink::WebMediaConstraints constraints; | 503 blink::WebMediaConstraints constraints; |
| 536 | 504 |
| 537 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; | 505 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; |
| 538 local_stream.audioTracks(audio_tracks); | 506 local_stream.audioTracks(audio_tracks); |
| 539 MediaStreamAudioSource* native_audio_source = | 507 MediaStreamAudioSource* native_audio_source = |
| 540 MediaStreamAudioSource::From(audio_tracks[0].source()); | 508 MediaStreamAudioSource::From(audio_tracks[0].source()); |
| 541 native_audio_source->StopSource(); | 509 native_audio_source->StopSource(); |
| 542 | 510 |
| 543 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; | 511 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; |
| 544 local_stream.videoTracks(video_tracks); | 512 local_stream.videoTracks(video_tracks); |
| 545 MediaStreamVideoSource* native_video_source = | 513 MediaStreamVideoSource* native_video_source = |
| 546 static_cast<MediaStreamVideoSource*>( | 514 static_cast<MediaStreamVideoSource*>( |
| 547 video_tracks[0].source().getExtraData()); | 515 video_tracks[0].source().getExtraData()); |
| 548 native_video_source->StopSource(); | 516 native_video_source->StopSource(); |
| 549 | 517 |
| 550 EXPECT_TRUE(pc_handler_->addStream(local_stream, constraints)); | 518 EXPECT_TRUE(pc_handler_->addStream(local_stream, constraints)); |
| 551 EXPECT_EQ(stream_label, mock_peer_connection_->stream_label()); | 519 EXPECT_EQ(stream_label, mock_peer_connection_->stream_label()); |
| 552 EXPECT_EQ( | 520 EXPECT_EQ( |
| 553 1u, | 521 1u, |
| 554 mock_peer_connection_->local_streams()->at(0)->GetAudioTracks().size()); | 522 mock_peer_connection_->local_streams()->at(0)->GetAudioTracks().size()); |
| 555 EXPECT_EQ( | 523 EXPECT_EQ( |
| 556 1u, | 524 1u, |
| 557 mock_peer_connection_->local_streams()->at(0)->GetVideoTracks().size()); | 525 mock_peer_connection_->local_streams()->at(0)->GetVideoTracks().size()); |
| 558 | |
| 559 StopAllTracks(local_stream); | |
| 560 } | 526 } |
| 561 | 527 |
| 562 TEST_F(RTCPeerConnectionHandlerTest, GetStatsNoSelector) { | 528 TEST_F(RTCPeerConnectionHandlerTest, GetStatsNoSelector) { |
| 563 scoped_refptr<MockRTCStatsRequest> request( | 529 scoped_refptr<MockRTCStatsRequest> request( |
| 564 new rtc::RefCountedObject<MockRTCStatsRequest>()); | 530 new rtc::RefCountedObject<MockRTCStatsRequest>()); |
| 565 pc_handler_->getStats(request.get()); | 531 pc_handler_->getStats(request.get()); |
| 566 base::RunLoop().RunUntilIdle(); | 532 base::RunLoop().RunUntilIdle(); |
| 567 ASSERT_TRUE(request->result()); | 533 ASSERT_TRUE(request->result()); |
| 568 EXPECT_LT(1, request->result()->report_count()); | 534 EXPECT_LT(1, request->result()->report_count()); |
| 569 } | 535 } |
| (...skipping 17 matching lines...) Expand all Loading... |
| 587 blink::WebVector<blink::WebMediaStreamTrack> tracks; | 553 blink::WebVector<blink::WebMediaStreamTrack> tracks; |
| 588 local_stream.audioTracks(tracks); | 554 local_stream.audioTracks(tracks); |
| 589 ASSERT_LE(1ul, tracks.size()); | 555 ASSERT_LE(1ul, tracks.size()); |
| 590 | 556 |
| 591 scoped_refptr<MockRTCStatsRequest> request( | 557 scoped_refptr<MockRTCStatsRequest> request( |
| 592 new rtc::RefCountedObject<MockRTCStatsRequest>()); | 558 new rtc::RefCountedObject<MockRTCStatsRequest>()); |
| 593 request->setSelector(tracks[0]); | 559 request->setSelector(tracks[0]); |
| 594 pc_handler_->getStats(request.get()); | 560 pc_handler_->getStats(request.get()); |
| 595 base::RunLoop().RunUntilIdle(); | 561 base::RunLoop().RunUntilIdle(); |
| 596 EXPECT_EQ(1, request->result()->report_count()); | 562 EXPECT_EQ(1, request->result()->report_count()); |
| 597 | |
| 598 StopAllTracks(local_stream); | |
| 599 } | 563 } |
| 600 | 564 |
| 601 TEST_F(RTCPeerConnectionHandlerTest, GetStatsWithRemoteSelector) { | 565 TEST_F(RTCPeerConnectionHandlerTest, GetStatsWithRemoteSelector) { |
| 602 scoped_refptr<webrtc::MediaStreamInterface> stream( | 566 scoped_refptr<webrtc::MediaStreamInterface> stream( |
| 603 AddRemoteMockMediaStream("remote_stream", "video", "audio")); | 567 AddRemoteMockMediaStream("remote_stream", "video", "audio")); |
| 604 pc_handler_->observer()->OnAddStream(stream.get()); | 568 pc_handler_->observer()->OnAddStream(stream.get()); |
| 605 base::RunLoop().RunUntilIdle(); | 569 base::RunLoop().RunUntilIdle(); |
| 606 const blink::WebMediaStream& remote_stream = mock_client_->remote_stream(); | 570 const blink::WebMediaStream& remote_stream = mock_client_->remote_stream(); |
| 607 | 571 |
| 608 blink::WebVector<blink::WebMediaStreamTrack> tracks; | 572 blink::WebVector<blink::WebMediaStreamTrack> tracks; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 628 local_stream.audioTracks(tracks); | 592 local_stream.audioTracks(tracks); |
| 629 blink::WebMediaStreamTrack component = tracks[0]; | 593 blink::WebMediaStreamTrack component = tracks[0]; |
| 630 mock_peer_connection_->SetGetStatsResult(false); | 594 mock_peer_connection_->SetGetStatsResult(false); |
| 631 | 595 |
| 632 scoped_refptr<MockRTCStatsRequest> request( | 596 scoped_refptr<MockRTCStatsRequest> request( |
| 633 new rtc::RefCountedObject<MockRTCStatsRequest>()); | 597 new rtc::RefCountedObject<MockRTCStatsRequest>()); |
| 634 request->setSelector(component); | 598 request->setSelector(component); |
| 635 pc_handler_->getStats(request.get()); | 599 pc_handler_->getStats(request.get()); |
| 636 base::RunLoop().RunUntilIdle(); | 600 base::RunLoop().RunUntilIdle(); |
| 637 EXPECT_EQ(0, request->result()->report_count()); | 601 EXPECT_EQ(0, request->result()->report_count()); |
| 638 | |
| 639 StopAllTracks(local_stream); | |
| 640 } | 602 } |
| 641 | 603 |
| 642 TEST_F(RTCPeerConnectionHandlerTest, OnSignalingChange) { | 604 TEST_F(RTCPeerConnectionHandlerTest, OnSignalingChange) { |
| 643 testing::InSequence sequence; | 605 testing::InSequence sequence; |
| 644 | 606 |
| 645 webrtc::PeerConnectionInterface::SignalingState new_state = | 607 webrtc::PeerConnectionInterface::SignalingState new_state = |
| 646 webrtc::PeerConnectionInterface::kHaveRemoteOffer; | 608 webrtc::PeerConnectionInterface::kHaveRemoteOffer; |
| 647 EXPECT_CALL(*mock_tracker_.get(), TrackSignalingStateChange( | 609 EXPECT_CALL(*mock_tracker_.get(), TrackSignalingStateChange( |
| 648 pc_handler_.get(), | 610 pc_handler_.get(), |
| 649 WebRTCPeerConnectionHandlerClient::SignalingStateHaveRemoteOffer)); | 611 WebRTCPeerConnectionHandlerClient::SignalingStateHaveRemoteOffer)); |
| (...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1056 local_stream.audioTracks(tracks); | 1018 local_stream.audioTracks(tracks); |
| 1057 ASSERT_LE(1ul, tracks.size()); | 1019 ASSERT_LE(1ul, tracks.size()); |
| 1058 | 1020 |
| 1059 EXPECT_CALL(*mock_tracker_.get(), | 1021 EXPECT_CALL(*mock_tracker_.get(), |
| 1060 TrackCreateDTMFSender(pc_handler_.get(), | 1022 TrackCreateDTMFSender(pc_handler_.get(), |
| 1061 testing::Ref(tracks[0]))); | 1023 testing::Ref(tracks[0]))); |
| 1062 | 1024 |
| 1063 std::unique_ptr<blink::WebRTCDTMFSenderHandler> sender( | 1025 std::unique_ptr<blink::WebRTCDTMFSenderHandler> sender( |
| 1064 pc_handler_->createDTMFSender(tracks[0])); | 1026 pc_handler_->createDTMFSender(tracks[0])); |
| 1065 EXPECT_TRUE(sender.get()); | 1027 EXPECT_TRUE(sender.get()); |
| 1066 | |
| 1067 StopAllTracks(local_stream); | |
| 1068 } | 1028 } |
| 1069 | 1029 |
| 1070 } // namespace content | 1030 } // namespace content |
| OLD | NEW |