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/user_media_client_impl.h" | 5 #include "content/renderer/media/user_media_client_impl.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 #include <utility> | 10 #include <utility> |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
220 used_media_impl_.reset(new UserMediaClientImplUnderTest( | 220 used_media_impl_.reset(new UserMediaClientImplUnderTest( |
221 dependency_factory_.get(), | 221 dependency_factory_.get(), |
222 std::unique_ptr<MediaStreamDispatcher>(ms_dispatcher_))); | 222 std::unique_ptr<MediaStreamDispatcher>(ms_dispatcher_))); |
223 } | 223 } |
224 | 224 |
225 void TearDown() override { | 225 void TearDown() override { |
226 used_media_impl_.reset(); | 226 used_media_impl_.reset(); |
227 blink::WebHeap::collectAllGarbageForTesting(); | 227 blink::WebHeap::collectAllGarbageForTesting(); |
228 } | 228 } |
229 | 229 |
| 230 void LoadNewDocumentInFrame() { |
| 231 used_media_impl_->WillCommitProvisionalLoad(); |
| 232 } |
| 233 |
230 blink::WebMediaStream RequestLocalMediaStream() { | 234 blink::WebMediaStream RequestLocalMediaStream() { |
231 used_media_impl_->RequestUserMedia(); | 235 used_media_impl_->RequestUserMedia(); |
232 FakeMediaStreamDispatcherRequestUserMediaComplete(); | 236 FakeMediaStreamDispatcherRequestUserMediaComplete(); |
233 StartMockedVideoSource(); | 237 StartMockedVideoSource(); |
234 | 238 |
235 EXPECT_EQ(UserMediaClientImplUnderTest::REQUEST_SUCCEEDED, | 239 EXPECT_EQ(UserMediaClientImplUnderTest::REQUEST_SUCCEEDED, |
236 used_media_impl_->request_state()); | 240 used_media_impl_->request_state()); |
237 | 241 |
238 blink::WebMediaStream desc = used_media_impl_->last_generated_stream(); | 242 blink::WebMediaStream desc = used_media_impl_->last_generated_stream(); |
239 content::MediaStream* native_stream = | 243 content::MediaStream* native_stream = |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
449 // Makes sure the test itself don't hold a reference to the created | 453 // Makes sure the test itself don't hold a reference to the created |
450 // MediaStream. | 454 // MediaStream. |
451 used_media_impl_->ClearLastGeneratedStream(); | 455 used_media_impl_->ClearLastGeneratedStream(); |
452 blink::WebHeap::collectAllGarbageForTesting(); | 456 blink::WebHeap::collectAllGarbageForTesting(); |
453 | 457 |
454 // Expect the sources to be stopped when the MediaStream goes out of scope. | 458 // Expect the sources to be stopped when the MediaStream goes out of scope. |
455 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); | 459 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); |
456 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); | 460 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); |
457 } | 461 } |
458 | 462 |
459 // Test that the MediaStreams are deleted if the owning WebFrame is closing. | 463 // Test that the MediaStreams are deleted if a new document is loaded in the |
460 // In the unit test the owning frame is NULL. | 464 // frame. |
461 TEST_F(UserMediaClientImplTest, FrameWillClose) { | 465 TEST_F(UserMediaClientImplTest, LoadNewDocumentInFrame) { |
462 // Test a stream with both audio and video. | 466 // Test a stream with both audio and video. |
463 blink::WebMediaStream mixed_desc = RequestLocalMediaStream(); | 467 blink::WebMediaStream mixed_desc = RequestLocalMediaStream(); |
464 blink::WebMediaStream desc2 = RequestLocalMediaStream(); | 468 blink::WebMediaStream desc2 = RequestLocalMediaStream(); |
465 used_media_impl_->FrameWillClose(); | 469 LoadNewDocumentInFrame(); |
466 blink::WebHeap::collectAllGarbageForTesting(); | 470 blink::WebHeap::collectAllGarbageForTesting(); |
467 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); | 471 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); |
468 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); | 472 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); |
469 } | 473 } |
470 | 474 |
471 // This test what happens if a video source to a MediaSteam fails to start. | 475 // This test what happens if a video source to a MediaSteam fails to start. |
472 TEST_F(UserMediaClientImplTest, MediaVideoSourceFailToStart) { | 476 TEST_F(UserMediaClientImplTest, MediaVideoSourceFailToStart) { |
473 used_media_impl_->RequestUserMedia(); | 477 used_media_impl_->RequestUserMedia(); |
474 FakeMediaStreamDispatcherRequestUserMediaComplete(); | 478 FakeMediaStreamDispatcherRequestUserMediaComplete(); |
475 FailToStartMockedVideoSource(); | 479 FailToStartMockedVideoSource(); |
(...skipping 27 matching lines...) Expand all Loading... |
503 // started. | 507 // started. |
504 TEST_F(UserMediaClientImplTest, MediaStreamImplShutDown) { | 508 TEST_F(UserMediaClientImplTest, MediaStreamImplShutDown) { |
505 used_media_impl_->RequestUserMedia(); | 509 used_media_impl_->RequestUserMedia(); |
506 FakeMediaStreamDispatcherRequestUserMediaComplete(); | 510 FakeMediaStreamDispatcherRequestUserMediaComplete(); |
507 EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); | 511 EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); |
508 EXPECT_EQ(UserMediaClientImplUnderTest::REQUEST_NOT_COMPLETE, | 512 EXPECT_EQ(UserMediaClientImplUnderTest::REQUEST_NOT_COMPLETE, |
509 used_media_impl_->request_state()); | 513 used_media_impl_->request_state()); |
510 used_media_impl_.reset(); | 514 used_media_impl_.reset(); |
511 } | 515 } |
512 | 516 |
513 // This test what happens if the WebFrame is closed while the MediaStream is | 517 // This test what happens if a new document is loaded in the frame while the |
514 // being generated by the MediaStreamDispatcher. | 518 // MediaStream is being generated by the MediaStreamDispatcher. |
515 TEST_F(UserMediaClientImplTest, ReloadFrameWhileGeneratingStream) { | 519 TEST_F(UserMediaClientImplTest, ReloadFrameWhileGeneratingStream) { |
516 used_media_impl_->RequestUserMedia(); | 520 used_media_impl_->RequestUserMedia(); |
517 used_media_impl_->FrameWillClose(); | 521 LoadNewDocumentInFrame(); |
518 EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); | 522 EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); |
519 EXPECT_EQ(0, ms_dispatcher_->stop_audio_device_counter()); | 523 EXPECT_EQ(0, ms_dispatcher_->stop_audio_device_counter()); |
520 EXPECT_EQ(0, ms_dispatcher_->stop_video_device_counter()); | 524 EXPECT_EQ(0, ms_dispatcher_->stop_video_device_counter()); |
521 EXPECT_EQ(UserMediaClientImplUnderTest::REQUEST_NOT_COMPLETE, | 525 EXPECT_EQ(UserMediaClientImplUnderTest::REQUEST_NOT_COMPLETE, |
522 used_media_impl_->request_state()); | 526 used_media_impl_->request_state()); |
523 } | 527 } |
524 | 528 |
525 // This test what happens if the WebFrame is closed while the sources are being | 529 // This test what happens if a newdocument is loaded in the frame while the |
526 // started. | 530 // sources are being started. |
527 TEST_F(UserMediaClientImplTest, ReloadFrameWhileGeneratingSources) { | 531 TEST_F(UserMediaClientImplTest, ReloadFrameWhileGeneratingSources) { |
528 used_media_impl_->RequestUserMedia(); | 532 used_media_impl_->RequestUserMedia(); |
529 FakeMediaStreamDispatcherRequestUserMediaComplete(); | 533 FakeMediaStreamDispatcherRequestUserMediaComplete(); |
530 EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); | 534 EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); |
531 used_media_impl_->FrameWillClose(); | 535 LoadNewDocumentInFrame(); |
532 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); | 536 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); |
533 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); | 537 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); |
534 EXPECT_EQ(UserMediaClientImplUnderTest::REQUEST_NOT_COMPLETE, | 538 EXPECT_EQ(UserMediaClientImplUnderTest::REQUEST_NOT_COMPLETE, |
535 used_media_impl_->request_state()); | 539 used_media_impl_->request_state()); |
536 } | 540 } |
537 | 541 |
538 // This test what happens if stop is called on a track after the frame has | 542 // This test what happens if stop is called on a track after the frame has |
539 // been reloaded. | 543 // been reloaded. |
540 TEST_F(UserMediaClientImplTest, StopTrackAfterReload) { | 544 TEST_F(UserMediaClientImplTest, StopTrackAfterReload) { |
541 blink::WebMediaStream mixed_desc = RequestLocalMediaStream(); | 545 blink::WebMediaStream mixed_desc = RequestLocalMediaStream(); |
542 EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); | 546 EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); |
543 used_media_impl_->FrameWillClose(); | 547 LoadNewDocumentInFrame(); |
544 blink::WebHeap::collectAllGarbageForTesting(); | 548 blink::WebHeap::collectAllGarbageForTesting(); |
545 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); | 549 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); |
546 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); | 550 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); |
547 | 551 |
548 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; | 552 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; |
549 mixed_desc.audioTracks(audio_tracks); | 553 mixed_desc.audioTracks(audio_tracks); |
550 MediaStreamTrack* audio_track = MediaStreamTrack::GetTrack(audio_tracks[0]); | 554 MediaStreamTrack* audio_track = MediaStreamTrack::GetTrack(audio_tracks[0]); |
551 audio_track->Stop(); | 555 audio_track->Stop(); |
552 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); | 556 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); |
553 | 557 |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
704 // Remove video track. This should trigger | 708 // Remove video track. This should trigger |
705 // UserMediaClientImpl::OnLocalSourceStopped, and has video track to be | 709 // UserMediaClientImpl::OnLocalSourceStopped, and has video track to be |
706 // removed from its |local_sources_|. | 710 // removed from its |local_sources_|. |
707 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; | 711 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; |
708 mixed_desc.videoTracks(video_tracks); | 712 mixed_desc.videoTracks(video_tracks); |
709 MediaStreamTrack* video_track = MediaStreamTrack::GetTrack(video_tracks[0]); | 713 MediaStreamTrack* video_track = MediaStreamTrack::GetTrack(video_tracks[0]); |
710 video_track->Stop(); | 714 video_track->Stop(); |
711 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); | 715 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); |
712 EXPECT_EQ(0, ms_dispatcher_->stop_audio_device_counter()); | 716 EXPECT_EQ(0, ms_dispatcher_->stop_audio_device_counter()); |
713 | 717 |
714 // Now we close the web frame, if in the above Stop() call, | 718 // Now we load a new document in the web frame. If in the above Stop() call, |
715 // UserMediaClientImpl accidentally removed audio track, then video track will | 719 // UserMediaClientImpl accidentally removed audio track, then video track will |
716 // be removed again here, which is incorrect. | 720 // be removed again here, which is incorrect. |
717 used_media_impl_->FrameWillClose(); | 721 LoadNewDocumentInFrame(); |
718 blink::WebHeap::collectAllGarbageForTesting(); | 722 blink::WebHeap::collectAllGarbageForTesting(); |
719 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); | 723 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); |
720 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); | 724 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); |
721 } | 725 } |
722 | 726 |
723 } // namespace content | 727 } // namespace content |
OLD | NEW |