| 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 "base/memory/scoped_ptr.h" | 5 #include "base/memory/scoped_ptr.h" |
| 6 #include "base/message_loop.h" | 6 #include "base/message_loop.h" |
| 7 #include "base/utf_string_conversions.h" | 7 #include "base/utf_string_conversions.h" |
| 8 #include "content/renderer/media/media_stream_extra_data.h" | 8 #include "content/renderer/media/media_stream_extra_data.h" |
| 9 #include "content/renderer/media/media_stream_impl.h" | 9 #include "content/renderer/media/media_stream_impl.h" |
| 10 #include "content/renderer/media/mock_media_stream_dependency_factory.h" | 10 #include "content/renderer/media/mock_media_stream_dependency_factory.h" |
| 11 #include "content/renderer/media/mock_media_stream_dispatcher.h" | 11 #include "content/renderer/media/mock_media_stream_dispatcher.h" |
| 12 #include "content/renderer/media/video_capture_impl_manager.h" | 12 #include "content/renderer/media/video_capture_impl_manager.h" |
| 13 #include "media/base/video_decoder.h" | 13 #include "media/base/video_decoder.h" |
| 14 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
| 15 #include "third_party/WebKit/Source/Platform/chromium/public/WebMediaStreamCompo
nent.h" | 15 #include "third_party/WebKit/Source/Platform/chromium/public/WebMediaStream.h" |
| 16 #include "third_party/WebKit/Source/Platform/chromium/public/WebMediaStreamDescr
iptor.h" | |
| 17 #include "third_party/WebKit/Source/Platform/chromium/public/WebMediaStreamSourc
e.h" | 16 #include "third_party/WebKit/Source/Platform/chromium/public/WebMediaStreamSourc
e.h" |
| 17 #include "third_party/WebKit/Source/Platform/chromium/public/WebMediaStreamTrack
.h" |
| 18 #include "third_party/WebKit/Source/Platform/chromium/public/WebString.h" | 18 #include "third_party/WebKit/Source/Platform/chromium/public/WebString.h" |
| 19 #include "third_party/WebKit/Source/Platform/chromium/public/WebVector.h" | 19 #include "third_party/WebKit/Source/Platform/chromium/public/WebVector.h" |
| 20 | 20 |
| 21 namespace content { | 21 namespace content { |
| 22 | 22 |
| 23 class MediaStreamImplUnderTest : public MediaStreamImpl { | 23 class MediaStreamImplUnderTest : public MediaStreamImpl { |
| 24 public: | 24 public: |
| 25 enum RequestState { | 25 enum RequestState { |
| 26 REQUEST_NOT_STARTED, | 26 REQUEST_NOT_STARTED, |
| 27 REQUEST_NOT_COMPLETE, | 27 REQUEST_NOT_COMPLETE, |
| (...skipping 14 matching lines...) Expand all Loading... |
| 42 WebKit::WebVector<WebKit::WebMediaStreamSource> audio_sources( | 42 WebKit::WebVector<WebKit::WebMediaStreamSource> audio_sources( |
| 43 audio ? static_cast<size_t>(1) : 0); | 43 audio ? static_cast<size_t>(1) : 0); |
| 44 WebKit::WebVector<WebKit::WebMediaStreamSource> video_sources( | 44 WebKit::WebVector<WebKit::WebMediaStreamSource> video_sources( |
| 45 video ? static_cast<size_t>(1) : 0); | 45 video ? static_cast<size_t>(1) : 0); |
| 46 state_ = REQUEST_NOT_COMPLETE; | 46 state_ = REQUEST_NOT_COMPLETE; |
| 47 requestUserMedia(user_media_request, audio_sources, | 47 requestUserMedia(user_media_request, audio_sources, |
| 48 video_sources); | 48 video_sources); |
| 49 } | 49 } |
| 50 | 50 |
| 51 virtual void CompleteGetUserMediaRequest( | 51 virtual void CompleteGetUserMediaRequest( |
| 52 const WebKit::WebMediaStreamDescriptor& stream, | 52 const WebKit::WebMediaStream& stream, |
| 53 WebKit::WebUserMediaRequest* request_info, | 53 WebKit::WebUserMediaRequest* request_info, |
| 54 bool request_succeeded) OVERRIDE { | 54 bool request_succeeded) OVERRIDE { |
| 55 last_generated_stream_ = stream; | 55 last_generated_stream_ = stream; |
| 56 state_ = request_succeeded ? REQUEST_SUCCEEDED : REQUEST_FAILED; | 56 state_ = request_succeeded ? REQUEST_SUCCEEDED : REQUEST_FAILED; |
| 57 } | 57 } |
| 58 | 58 |
| 59 virtual WebKit::WebMediaStreamDescriptor GetMediaStream( | 59 virtual WebKit::WebMediaStream GetMediaStream( |
| 60 const GURL& url) OVERRIDE { | 60 const GURL& url) OVERRIDE { |
| 61 return last_generated_stream_; | 61 return last_generated_stream_; |
| 62 } | 62 } |
| 63 | 63 |
| 64 using MediaStreamImpl::OnLocalMediaStreamStop; | 64 using MediaStreamImpl::OnLocalMediaStreamStop; |
| 65 | 65 |
| 66 const WebKit::WebMediaStreamDescriptor& last_generated_stream() { | 66 const WebKit::WebMediaStream& last_generated_stream() { |
| 67 return last_generated_stream_; | 67 return last_generated_stream_; |
| 68 } | 68 } |
| 69 | 69 |
| 70 RequestState request_state() const { return state_; } | 70 RequestState request_state() const { return state_; } |
| 71 | 71 |
| 72 private: | 72 private: |
| 73 WebKit::WebMediaStreamDescriptor last_generated_stream_; | 73 WebKit::WebMediaStream last_generated_stream_; |
| 74 RequestState state_; | 74 RequestState state_; |
| 75 }; | 75 }; |
| 76 | 76 |
| 77 class MediaStreamImplTest : public ::testing::Test { | 77 class MediaStreamImplTest : public ::testing::Test { |
| 78 public: | 78 public: |
| 79 void SetUp() { | 79 void SetUp() { |
| 80 // Create our test object. | 80 // Create our test object. |
| 81 ms_dispatcher_.reset(new MockMediaStreamDispatcher()); | 81 ms_dispatcher_.reset(new MockMediaStreamDispatcher()); |
| 82 scoped_refptr<VideoCaptureImplManager> vc_manager( | 82 scoped_refptr<VideoCaptureImplManager> vc_manager( |
| 83 new VideoCaptureImplManager()); | 83 new VideoCaptureImplManager()); |
| 84 dependency_factory_.reset(new MockMediaStreamDependencyFactory()); | 84 dependency_factory_.reset(new MockMediaStreamDependencyFactory()); |
| 85 ms_impl_.reset(new MediaStreamImplUnderTest(ms_dispatcher_.get(), | 85 ms_impl_.reset(new MediaStreamImplUnderTest(ms_dispatcher_.get(), |
| 86 vc_manager.get(), | 86 vc_manager.get(), |
| 87 dependency_factory_.get())); | 87 dependency_factory_.get())); |
| 88 } | 88 } |
| 89 | 89 |
| 90 WebKit::WebMediaStreamDescriptor RequestLocalMediaStream(bool audio, | 90 WebKit::WebMediaStream RequestLocalMediaStream(bool audio, |
| 91 bool video) { | 91 bool video) { |
| 92 ms_impl_->RequestUserMedia(audio, video); | 92 ms_impl_->RequestUserMedia(audio, video); |
| 93 FakeMediaStreamDispatcherComplete(); | 93 FakeMediaStreamDispatcherComplete(); |
| 94 if (video) | 94 if (video) |
| 95 ChangeVideoSourceStateToLive(); | 95 ChangeVideoSourceStateToLive(); |
| 96 if (audio) | 96 if (audio) |
| 97 ChangeAudioSourceStateToLive(); | 97 ChangeAudioSourceStateToLive(); |
| 98 | 98 |
| 99 EXPECT_EQ(MediaStreamImplUnderTest::REQUEST_SUCCEEDED, | 99 EXPECT_EQ(MediaStreamImplUnderTest::REQUEST_SUCCEEDED, |
| 100 ms_impl_->request_state()); | 100 ms_impl_->request_state()); |
| 101 | 101 |
| 102 WebKit::WebMediaStreamDescriptor desc = ms_impl_->last_generated_stream(); | 102 WebKit::WebMediaStream desc = ms_impl_->last_generated_stream(); |
| 103 content::MediaStreamExtraData* extra_data = | 103 content::MediaStreamExtraData* extra_data = |
| 104 static_cast<content::MediaStreamExtraData*>(desc.extraData()); | 104 static_cast<content::MediaStreamExtraData*>(desc.extraData()); |
| 105 if (!extra_data || !extra_data->local_stream()) { | 105 if (!extra_data || !extra_data->local_stream()) { |
| 106 ADD_FAILURE(); | 106 ADD_FAILURE(); |
| 107 return desc; | 107 return desc; |
| 108 } | 108 } |
| 109 | 109 |
| 110 if (audio) | 110 if (audio) |
| 111 EXPECT_EQ(1u, extra_data->local_stream()->audio_tracks()->count()); | 111 EXPECT_EQ(1u, extra_data->local_stream()->audio_tracks()->count()); |
| 112 if (video) | 112 if (video) |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 151 } | 151 } |
| 152 | 152 |
| 153 protected: | 153 protected: |
| 154 scoped_ptr<MockMediaStreamDispatcher> ms_dispatcher_; | 154 scoped_ptr<MockMediaStreamDispatcher> ms_dispatcher_; |
| 155 scoped_ptr<MediaStreamImplUnderTest> ms_impl_; | 155 scoped_ptr<MediaStreamImplUnderTest> ms_impl_; |
| 156 scoped_ptr<MockMediaStreamDependencyFactory> dependency_factory_; | 156 scoped_ptr<MockMediaStreamDependencyFactory> dependency_factory_; |
| 157 }; | 157 }; |
| 158 | 158 |
| 159 TEST_F(MediaStreamImplTest, LocalMediaStream) { | 159 TEST_F(MediaStreamImplTest, LocalMediaStream) { |
| 160 // Test a stream with both audio and video. | 160 // Test a stream with both audio and video. |
| 161 WebKit::WebMediaStreamDescriptor mixed_desc = RequestLocalMediaStream(true, | 161 WebKit::WebMediaStream mixed_desc = RequestLocalMediaStream(true, true); |
| 162 true); | |
| 163 // Create a renderer for the stream. | 162 // Create a renderer for the stream. |
| 164 scoped_refptr<media::VideoDecoder> mixed_decoder( | 163 scoped_refptr<media::VideoDecoder> mixed_decoder( |
| 165 ms_impl_->GetVideoDecoder(GURL(), base::MessageLoopProxy::current())); | 164 ms_impl_->GetVideoDecoder(GURL(), base::MessageLoopProxy::current())); |
| 166 EXPECT_TRUE(mixed_decoder.get() != NULL); | 165 EXPECT_TRUE(mixed_decoder.get() != NULL); |
| 167 | 166 |
| 168 // Test a stream with audio only. | 167 // Test a stream with audio only. |
| 169 WebKit::WebMediaStreamDescriptor audio_desc = RequestLocalMediaStream(true, | 168 WebKit::WebMediaStream audio_desc = RequestLocalMediaStream(true, false); |
| 170 false); | |
| 171 scoped_refptr<media::VideoDecoder> audio_decoder( | 169 scoped_refptr<media::VideoDecoder> audio_decoder( |
| 172 ms_impl_->GetVideoDecoder(GURL(), base::MessageLoopProxy::current())); | 170 ms_impl_->GetVideoDecoder(GURL(), base::MessageLoopProxy::current())); |
| 173 EXPECT_TRUE(audio_decoder.get() == NULL); | 171 EXPECT_TRUE(audio_decoder.get() == NULL); |
| 174 | 172 |
| 175 // Test a stream with video only. | 173 // Test a stream with video only. |
| 176 WebKit::WebMediaStreamDescriptor video_desc = RequestLocalMediaStream(false, | 174 WebKit::WebMediaStream video_desc = RequestLocalMediaStream(false, true); |
| 177 true); | |
| 178 scoped_refptr<media::VideoDecoder> video_decoder( | 175 scoped_refptr<media::VideoDecoder> video_decoder( |
| 179 ms_impl_->GetVideoDecoder(GURL(), base::MessageLoopProxy::current())); | 176 ms_impl_->GetVideoDecoder(GURL(), base::MessageLoopProxy::current())); |
| 180 EXPECT_TRUE(video_decoder.get() != NULL); | 177 EXPECT_TRUE(video_decoder.get() != NULL); |
| 181 | 178 |
| 182 // Stop generated local streams. | 179 // Stop generated local streams. |
| 183 ms_impl_->OnLocalMediaStreamStop(mixed_desc.label().utf8()); | 180 ms_impl_->OnLocalMediaStreamStop(mixed_desc.label().utf8()); |
| 184 EXPECT_EQ(1, ms_dispatcher_->stop_stream_counter()); | 181 EXPECT_EQ(1, ms_dispatcher_->stop_stream_counter()); |
| 185 ms_impl_->OnLocalMediaStreamStop(audio_desc.label().utf8()); | 182 ms_impl_->OnLocalMediaStreamStop(audio_desc.label().utf8()); |
| 186 EXPECT_EQ(2, ms_dispatcher_->stop_stream_counter()); | 183 EXPECT_EQ(2, ms_dispatcher_->stop_stream_counter()); |
| 187 | 184 |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 237 ms_impl_->FrameWillClose(NULL); | 234 ms_impl_->FrameWillClose(NULL); |
| 238 EXPECT_EQ(1, ms_dispatcher_->stop_stream_counter()); | 235 EXPECT_EQ(1, ms_dispatcher_->stop_stream_counter()); |
| 239 ChangeVideoSourceStateToLive(); | 236 ChangeVideoSourceStateToLive(); |
| 240 EXPECT_EQ(MediaStreamImplUnderTest::REQUEST_NOT_COMPLETE, | 237 EXPECT_EQ(MediaStreamImplUnderTest::REQUEST_NOT_COMPLETE, |
| 241 ms_impl_->request_state()); | 238 ms_impl_->request_state()); |
| 242 } | 239 } |
| 243 | 240 |
| 244 // This test what happens if stop is called on a stream after the frame has | 241 // This test what happens if stop is called on a stream after the frame has |
| 245 // been reloaded. | 242 // been reloaded. |
| 246 TEST_F(MediaStreamImplTest, StopStreamAfterReload) { | 243 TEST_F(MediaStreamImplTest, StopStreamAfterReload) { |
| 247 WebKit::WebMediaStreamDescriptor mixed_desc = RequestLocalMediaStream(true, | 244 WebKit::WebMediaStream mixed_desc = RequestLocalMediaStream(true, true); |
| 248 true); | |
| 249 EXPECT_EQ(0, ms_dispatcher_->stop_stream_counter()); | 245 EXPECT_EQ(0, ms_dispatcher_->stop_stream_counter()); |
| 250 EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); | 246 EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); |
| 251 ms_impl_->FrameWillClose(NULL); | 247 ms_impl_->FrameWillClose(NULL); |
| 252 EXPECT_EQ(1, ms_dispatcher_->stop_stream_counter()); | 248 EXPECT_EQ(1, ms_dispatcher_->stop_stream_counter()); |
| 253 ms_impl_->OnLocalMediaStreamStop(mixed_desc.label().utf8()); | 249 ms_impl_->OnLocalMediaStreamStop(mixed_desc.label().utf8()); |
| 254 EXPECT_EQ(1, ms_dispatcher_->stop_stream_counter()); | 250 EXPECT_EQ(1, ms_dispatcher_->stop_stream_counter()); |
| 255 } | 251 } |
| 256 | 252 |
| 257 } // namespace content | 253 } // namespace content |
| OLD | NEW |