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

Unified Diff: content/renderer/media/media_stream_impl_unittest.cc

Issue 524363003: Changed name of MediaStreamImpl to UserMediaClientImpl. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: content/renderer/media/media_stream_impl_unittest.cc
diff --git a/content/renderer/media/media_stream_impl_unittest.cc b/content/renderer/media/media_stream_impl_unittest.cc
deleted file mode 100644
index c94a48762028b18b641913c664c7c6020213a4f4..0000000000000000000000000000000000000000
--- a/content/renderer/media/media_stream_impl_unittest.cc
+++ /dev/null
@@ -1,488 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/memory/scoped_ptr.h"
-#include "base/message_loop/message_loop.h"
-#include "base/strings/utf_string_conversions.h"
-#include "content/child/child_process.h"
-#include "content/renderer/media/media_stream.h"
-#include "content/renderer/media/media_stream_impl.h"
-#include "content/renderer/media/media_stream_track.h"
-#include "content/renderer/media/mock_media_stream_dispatcher.h"
-#include "content/renderer/media/mock_media_stream_video_source.h"
-#include "content/renderer/media/webrtc/mock_peer_connection_dependency_factory.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/WebKit/public/platform/WebMediaDeviceInfo.h"
-#include "third_party/WebKit/public/platform/WebMediaStream.h"
-#include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
-#include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
-#include "third_party/WebKit/public/platform/WebString.h"
-#include "third_party/WebKit/public/platform/WebVector.h"
-
-namespace content {
-
-class MockMediaStreamVideoCapturerSource : public MockMediaStreamVideoSource {
- public:
- MockMediaStreamVideoCapturerSource(
- const StreamDeviceInfo& device,
- const SourceStoppedCallback& stop_callback,
- PeerConnectionDependencyFactory* factory)
- : MockMediaStreamVideoSource(false) {
- SetDeviceInfo(device);
- SetStopCallback(stop_callback);
- }
-};
-
-class MediaStreamImplUnderTest : public MediaStreamImpl {
- public:
- enum RequestState {
- REQUEST_NOT_STARTED,
- REQUEST_NOT_COMPLETE,
- REQUEST_SUCCEEDED,
- REQUEST_FAILED,
- };
-
- MediaStreamImplUnderTest(
- PeerConnectionDependencyFactory* dependency_factory,
- scoped_ptr<MediaStreamDispatcher> media_stream_dispatcher)
- : MediaStreamImpl(
- NULL, dependency_factory, media_stream_dispatcher.Pass()),
- state_(REQUEST_NOT_STARTED),
- result_(NUM_MEDIA_REQUEST_RESULTS),
- result_name_(""),
- factory_(dependency_factory),
- video_source_(NULL) {
- }
-
- void RequestUserMedia() {
- blink::WebUserMediaRequest user_media_request;
- state_ = REQUEST_NOT_COMPLETE;
- requestUserMedia(user_media_request);
- }
-
- void RequestMediaDevices() {
- blink::WebMediaDevicesRequest media_devices_request;
- state_ = REQUEST_NOT_COMPLETE;
- requestMediaDevices(media_devices_request);
- }
-
- virtual void GetUserMediaRequestSucceeded(
- const blink::WebMediaStream& stream,
- blink::WebUserMediaRequest* request_info) OVERRIDE {
- last_generated_stream_ = stream;
- state_ = REQUEST_SUCCEEDED;
- }
-
- virtual void GetUserMediaRequestFailed(
- blink::WebUserMediaRequest* request_info,
- content::MediaStreamRequestResult result) OVERRIDE {
- last_generated_stream_.reset();
- state_ = REQUEST_FAILED;
- result_ = result;
- }
-
- virtual void GetUserMediaRequestTrackStartedFailed(
- blink::WebUserMediaRequest* request_info,
- MediaStreamRequestResult result,
- const blink::WebString& result_name) OVERRIDE {
- last_generated_stream_.reset();
- state_ = REQUEST_FAILED;
- result_ = result;
- result_name_ = result_name;
- }
-
- virtual void EnumerateDevicesSucceded(
- blink::WebMediaDevicesRequest* request,
- blink::WebVector<blink::WebMediaDeviceInfo>& devices) OVERRIDE {
- state_ = REQUEST_SUCCEEDED;
- last_devices_ = devices;
- }
-
- virtual MediaStreamVideoSource* CreateVideoSource(
- const StreamDeviceInfo& device,
- const MediaStreamSource::SourceStoppedCallback& stop_callback) OVERRIDE {
- video_source_ = new MockMediaStreamVideoCapturerSource(device,
- stop_callback,
- factory_);
- return video_source_;
- }
-
- const blink::WebMediaStream& last_generated_stream() {
- return last_generated_stream_;
- }
-
- const blink::WebVector<blink::WebMediaDeviceInfo>& last_devices() {
- return last_devices_;
- }
-
- void ClearLastGeneratedStream() {
- last_generated_stream_.reset();
- }
-
- MockMediaStreamVideoCapturerSource* last_created_video_source() const {
- return video_source_;
- }
-
- RequestState request_state() const { return state_; }
- content::MediaStreamRequestResult error_reason() const { return result_; }
- blink::WebString error_name() const { return result_name_; }
-
- private:
- blink::WebMediaStream last_generated_stream_;
- RequestState state_;
- content::MediaStreamRequestResult result_;
- blink::WebString result_name_;
- blink::WebVector<blink::WebMediaDeviceInfo> last_devices_;
- PeerConnectionDependencyFactory* factory_;
- MockMediaStreamVideoCapturerSource* video_source_;
-};
-
-class MediaStreamImplTest : public ::testing::Test {
- public:
- virtual void SetUp() {
- // Create our test object.
- child_process_.reset(new ChildProcess());
- dependency_factory_.reset(new MockPeerConnectionDependencyFactory());
- ms_dispatcher_ = new MockMediaStreamDispatcher();
- ms_impl_.reset(new MediaStreamImplUnderTest(
- dependency_factory_.get(),
- scoped_ptr<MediaStreamDispatcher>(ms_dispatcher_).Pass()));
- }
-
- blink::WebMediaStream RequestLocalMediaStream() {
- ms_impl_->RequestUserMedia();
- FakeMediaStreamDispatcherRequestUserMediaComplete();
- StartMockedVideoSource();
-
- EXPECT_EQ(MediaStreamImplUnderTest::REQUEST_SUCCEEDED,
- ms_impl_->request_state());
-
- blink::WebMediaStream desc = ms_impl_->last_generated_stream();
- content::MediaStream* native_stream =
- content::MediaStream::GetMediaStream(desc);
- if (!native_stream) {
- ADD_FAILURE();
- return desc;
- }
-
- blink::WebVector<blink::WebMediaStreamTrack> audio_tracks;
- desc.audioTracks(audio_tracks);
- blink::WebVector<blink::WebMediaStreamTrack> video_tracks;
- desc.videoTracks(video_tracks);
-
- EXPECT_EQ(1u, audio_tracks.size());
- EXPECT_EQ(1u, video_tracks.size());
- EXPECT_NE(audio_tracks[0].id(), video_tracks[0].id());
- return desc;
- }
-
- void FakeMediaStreamDispatcherRequestUserMediaComplete() {
- // Audio request ID is used as the shared request ID.
- ms_impl_->OnStreamGenerated(ms_dispatcher_->audio_input_request_id(),
- ms_dispatcher_->stream_label(),
- ms_dispatcher_->audio_input_array(),
- ms_dispatcher_->video_array());
- }
-
- void FakeMediaStreamDispatcherRequestMediaDevicesComplete() {
- ms_impl_->OnDevicesEnumerated(ms_dispatcher_->audio_input_request_id(),
- ms_dispatcher_->audio_input_array());
- ms_impl_->OnDevicesEnumerated(ms_dispatcher_->audio_output_request_id(),
- ms_dispatcher_->audio_output_array());
- ms_impl_->OnDevicesEnumerated(ms_dispatcher_->video_request_id(),
- ms_dispatcher_->video_array());
- }
-
- void StartMockedVideoSource() {
- MockMediaStreamVideoCapturerSource* video_source =
- ms_impl_->last_created_video_source();
- if (video_source->SourceHasAttemptedToStart())
- video_source->StartMockedSource();
- }
-
- void FailToStartMockedVideoSource() {
- MockMediaStreamVideoCapturerSource* video_source =
- ms_impl_->last_created_video_source();
- if (video_source->SourceHasAttemptedToStart())
- video_source->FailToStartMockedSource();
- }
-
- void FailToCreateNextAudioCapturer() {
- dependency_factory_->FailToCreateNextAudioCapturer();
- }
-
- protected:
- base::MessageLoop message_loop_;
- scoped_ptr<ChildProcess> child_process_;
- MockMediaStreamDispatcher* ms_dispatcher_; // Owned my |ms_impl_|.
- scoped_ptr<MediaStreamImplUnderTest> ms_impl_;
- scoped_ptr<MockPeerConnectionDependencyFactory> dependency_factory_;
-};
-
-TEST_F(MediaStreamImplTest, GenerateMediaStream) {
- // Generate a stream with both audio and video.
- blink::WebMediaStream mixed_desc = RequestLocalMediaStream();
-}
-
-// Test that the same source object is used if two MediaStreams are generated
-// using the same source.
-TEST_F(MediaStreamImplTest, GenerateTwoMediaStreamsWithSameSource) {
- blink::WebMediaStream desc1 = RequestLocalMediaStream();
- blink::WebMediaStream desc2 = RequestLocalMediaStream();
-
- blink::WebVector<blink::WebMediaStreamTrack> desc1_video_tracks;
- desc1.videoTracks(desc1_video_tracks);
- blink::WebVector<blink::WebMediaStreamTrack> desc2_video_tracks;
- desc2.videoTracks(desc2_video_tracks);
- EXPECT_EQ(desc1_video_tracks[0].source().id(),
- desc2_video_tracks[0].source().id());
-
- EXPECT_EQ(desc1_video_tracks[0].source().extraData(),
- desc2_video_tracks[0].source().extraData());
-
- blink::WebVector<blink::WebMediaStreamTrack> desc1_audio_tracks;
- desc1.audioTracks(desc1_audio_tracks);
- blink::WebVector<blink::WebMediaStreamTrack> desc2_audio_tracks;
- desc2.audioTracks(desc2_audio_tracks);
- EXPECT_EQ(desc1_audio_tracks[0].source().id(),
- desc2_audio_tracks[0].source().id());
-
- EXPECT_EQ(desc1_audio_tracks[0].source().extraData(),
- desc2_audio_tracks[0].source().extraData());
-}
-
-// Test that the same source object is not used if two MediaStreams are
-// generated using different sources.
-TEST_F(MediaStreamImplTest, GenerateTwoMediaStreamsWithDifferentSources) {
- blink::WebMediaStream desc1 = RequestLocalMediaStream();
- // Make sure another device is selected (another |session_id|) in the next
- // gUM request.
- ms_dispatcher_->IncrementSessionId();
- blink::WebMediaStream desc2 = RequestLocalMediaStream();
-
- blink::WebVector<blink::WebMediaStreamTrack> desc1_video_tracks;
- desc1.videoTracks(desc1_video_tracks);
- blink::WebVector<blink::WebMediaStreamTrack> desc2_video_tracks;
- desc2.videoTracks(desc2_video_tracks);
- EXPECT_NE(desc1_video_tracks[0].source().id(),
- desc2_video_tracks[0].source().id());
-
- EXPECT_NE(desc1_video_tracks[0].source().extraData(),
- desc2_video_tracks[0].source().extraData());
-
- blink::WebVector<blink::WebMediaStreamTrack> desc1_audio_tracks;
- desc1.audioTracks(desc1_audio_tracks);
- blink::WebVector<blink::WebMediaStreamTrack> desc2_audio_tracks;
- desc2.audioTracks(desc2_audio_tracks);
- EXPECT_NE(desc1_audio_tracks[0].source().id(),
- desc2_audio_tracks[0].source().id());
-
- EXPECT_NE(desc1_audio_tracks[0].source().extraData(),
- desc2_audio_tracks[0].source().extraData());
-}
-
-TEST_F(MediaStreamImplTest, StopLocalTracks) {
- // Generate a stream with both audio and video.
- blink::WebMediaStream mixed_desc = RequestLocalMediaStream();
-
- blink::WebVector<blink::WebMediaStreamTrack> audio_tracks;
- mixed_desc.audioTracks(audio_tracks);
- MediaStreamTrack* audio_track = MediaStreamTrack::GetTrack(audio_tracks[0]);
- audio_track->Stop();
- EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter());
-
- blink::WebVector<blink::WebMediaStreamTrack> video_tracks;
- mixed_desc.videoTracks(video_tracks);
- MediaStreamTrack* video_track = MediaStreamTrack::GetTrack(video_tracks[0]);
- video_track->Stop();
- EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter());
-}
-
-// This test that a source is not stopped even if the tracks in a
-// MediaStream is stopped if there are two MediaStreams with tracks using the
-// same device. The source is stopped
-// if there are no more MediaStream tracks using the device.
-TEST_F(MediaStreamImplTest, StopLocalTracksWhenTwoStreamUseSameDevices) {
- // Generate a stream with both audio and video.
- blink::WebMediaStream desc1 = RequestLocalMediaStream();
- blink::WebMediaStream desc2 = RequestLocalMediaStream();
-
- blink::WebVector<blink::WebMediaStreamTrack> audio_tracks1;
- desc1.audioTracks(audio_tracks1);
- MediaStreamTrack* audio_track1 = MediaStreamTrack::GetTrack(audio_tracks1[0]);
- audio_track1->Stop();
- EXPECT_EQ(0, ms_dispatcher_->stop_audio_device_counter());
-
- blink::WebVector<blink::WebMediaStreamTrack> audio_tracks2;
- desc2.audioTracks(audio_tracks2);
- MediaStreamTrack* audio_track2 = MediaStreamTrack::GetTrack(audio_tracks2[0]);
- audio_track2->Stop();
- EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter());
-
- blink::WebVector<blink::WebMediaStreamTrack> video_tracks1;
- desc1.videoTracks(video_tracks1);
- MediaStreamTrack* video_track1 = MediaStreamTrack::GetTrack(video_tracks1[0]);
- video_track1->Stop();
- EXPECT_EQ(0, ms_dispatcher_->stop_video_device_counter());
-
- blink::WebVector<blink::WebMediaStreamTrack> video_tracks2;
- desc2.videoTracks(video_tracks2);
- MediaStreamTrack* video_track2 = MediaStreamTrack::GetTrack(video_tracks2[0]);
- video_track2->Stop();
- EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter());
-}
-
-TEST_F(MediaStreamImplTest, StopSourceWhenMediaStreamGoesOutOfScope) {
- // Generate a stream with both audio and video.
- RequestLocalMediaStream();
- // Makes sure the test itself don't hold a reference to the created
- // MediaStream.
- ms_impl_->ClearLastGeneratedStream();
-
- // Expect the sources to be stopped when the MediaStream goes out of scope.
- EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter());
- EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter());
-}
-
-// Test that the MediaStreams are deleted if the owning WebFrame is closing.
-// In the unit test the owning frame is NULL.
-TEST_F(MediaStreamImplTest, FrameWillClose) {
- // Test a stream with both audio and video.
- blink::WebMediaStream mixed_desc = RequestLocalMediaStream();
- blink::WebMediaStream desc2 = RequestLocalMediaStream();
- ms_impl_->FrameWillClose();
- EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter());
- EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter());
-}
-
-// This test what happens if a video source to a MediaSteam fails to start.
-TEST_F(MediaStreamImplTest, MediaVideoSourceFailToStart) {
- ms_impl_->RequestUserMedia();
- FakeMediaStreamDispatcherRequestUserMediaComplete();
- FailToStartMockedVideoSource();
- EXPECT_EQ(MediaStreamImplUnderTest::REQUEST_FAILED,
- ms_impl_->request_state());
- EXPECT_EQ(MEDIA_DEVICE_TRACK_START_FAILURE,
- ms_impl_->error_reason());
- EXPECT_EQ(1, ms_dispatcher_->request_stream_counter());
- EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter());
- EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter());
-}
-
-// This test what happens if an audio source fail to initialize.
-TEST_F(MediaStreamImplTest, MediaAudioSourceFailToInitialize) {
- FailToCreateNextAudioCapturer();
- ms_impl_->RequestUserMedia();
- FakeMediaStreamDispatcherRequestUserMediaComplete();
- StartMockedVideoSource();
- EXPECT_EQ(MediaStreamImplUnderTest::REQUEST_FAILED,
- ms_impl_->request_state());
- EXPECT_EQ(MEDIA_DEVICE_TRACK_START_FAILURE,
- ms_impl_->error_reason());
- EXPECT_EQ(1, ms_dispatcher_->request_stream_counter());
- EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter());
- EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter());
-}
-
-// This test what happens if MediaStreamImpl is deleted before a source has
-// started.
-TEST_F(MediaStreamImplTest, MediaStreamImplShutDown) {
- ms_impl_->RequestUserMedia();
- FakeMediaStreamDispatcherRequestUserMediaComplete();
- EXPECT_EQ(1, ms_dispatcher_->request_stream_counter());
- EXPECT_EQ(MediaStreamImplUnderTest::REQUEST_NOT_COMPLETE,
- ms_impl_->request_state());
- ms_impl_.reset();
-}
-
-// This test what happens if the WebFrame is closed while the MediaStream is
-// being generated by the MediaStreamDispatcher.
-TEST_F(MediaStreamImplTest, ReloadFrameWhileGeneratingStream) {
- ms_impl_->RequestUserMedia();
- ms_impl_->FrameWillClose();
- EXPECT_EQ(1, ms_dispatcher_->request_stream_counter());
- EXPECT_EQ(0, ms_dispatcher_->stop_audio_device_counter());
- EXPECT_EQ(0, ms_dispatcher_->stop_video_device_counter());
- EXPECT_EQ(MediaStreamImplUnderTest::REQUEST_NOT_COMPLETE,
- ms_impl_->request_state());
-}
-
-// This test what happens if the WebFrame is closed while the sources are being
-// started.
-TEST_F(MediaStreamImplTest, ReloadFrameWhileGeneratingSources) {
- ms_impl_->RequestUserMedia();
- FakeMediaStreamDispatcherRequestUserMediaComplete();
- EXPECT_EQ(1, ms_dispatcher_->request_stream_counter());
- ms_impl_->FrameWillClose();
- EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter());
- EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter());
- EXPECT_EQ(MediaStreamImplUnderTest::REQUEST_NOT_COMPLETE,
- ms_impl_->request_state());
-}
-
-// This test what happens if stop is called on a track after the frame has
-// been reloaded.
-TEST_F(MediaStreamImplTest, StopTrackAfterReload) {
- blink::WebMediaStream mixed_desc = RequestLocalMediaStream();
- EXPECT_EQ(1, ms_dispatcher_->request_stream_counter());
- ms_impl_->FrameWillClose();
- EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter());
- EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter());
-
- blink::WebVector<blink::WebMediaStreamTrack> audio_tracks;
- mixed_desc.audioTracks(audio_tracks);
- MediaStreamTrack* audio_track = MediaStreamTrack::GetTrack(audio_tracks[0]);
- audio_track->Stop();
- EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter());
-
- blink::WebVector<blink::WebMediaStreamTrack> video_tracks;
- mixed_desc.videoTracks(video_tracks);
- MediaStreamTrack* video_track = MediaStreamTrack::GetTrack(video_tracks[0]);
- video_track->Stop();
- EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter());
-}
-
-TEST_F(MediaStreamImplTest, EnumerateMediaDevices) {
- ms_impl_->RequestMediaDevices();
- FakeMediaStreamDispatcherRequestMediaDevicesComplete();
-
- EXPECT_EQ(MediaStreamImplUnderTest::REQUEST_SUCCEEDED,
- ms_impl_->request_state());
-
- // Audio input device with matched output ID.
- EXPECT_FALSE(ms_impl_->last_devices()[0].deviceId().isEmpty());
- EXPECT_EQ(blink::WebMediaDeviceInfo::MediaDeviceKindAudioInput,
- ms_impl_->last_devices()[0].kind());
- EXPECT_FALSE(ms_impl_->last_devices()[0].label().isEmpty());
- EXPECT_FALSE(ms_impl_->last_devices()[0].groupId().isEmpty());
-
- // Audio input device without matched output ID.
- EXPECT_FALSE(ms_impl_->last_devices()[1].deviceId().isEmpty());
- EXPECT_EQ(blink::WebMediaDeviceInfo::MediaDeviceKindAudioInput,
- ms_impl_->last_devices()[1].kind());
- EXPECT_FALSE(ms_impl_->last_devices()[1].label().isEmpty());
- EXPECT_FALSE(ms_impl_->last_devices()[1].groupId().isEmpty());
-
- // Video input device.
- EXPECT_FALSE(ms_impl_->last_devices()[2].deviceId().isEmpty());
- EXPECT_EQ(blink::WebMediaDeviceInfo::MediaDeviceKindVideoInput,
- ms_impl_->last_devices()[2].kind());
- EXPECT_FALSE(ms_impl_->last_devices()[2].label().isEmpty());
- EXPECT_TRUE(ms_impl_->last_devices()[2].groupId().isEmpty());
-
- // Audio output device.
- EXPECT_FALSE(ms_impl_->last_devices()[3].deviceId().isEmpty());
- EXPECT_EQ(blink::WebMediaDeviceInfo::MediaDeviceKindAudioOutput,
- ms_impl_->last_devices()[3].kind());
- EXPECT_FALSE(ms_impl_->last_devices()[3].label().isEmpty());
- EXPECT_FALSE(ms_impl_->last_devices()[3].groupId().isEmpty());
-
- // Verfify group IDs.
- EXPECT_TRUE(ms_impl_->last_devices()[0].groupId().equals(
- ms_impl_->last_devices()[3].groupId()));
- EXPECT_FALSE(ms_impl_->last_devices()[1].groupId().equals(
- ms_impl_->last_devices()[3].groupId()));
-}
-
-} // namespace content

Powered by Google App Engine
This is Rietveld 408576698