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

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

Issue 1966043006: Revert of MediaStream audio: Refactor 3 separate "glue" implementations into one. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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
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 <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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698