| 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 |