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 <string> | 5 #include <string> |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
9 #include "content/browser/browser_thread_impl.h" | 9 #include "content/browser/browser_thread_impl.h" |
10 #include "content/browser/renderer_host/media/audio_input_device_manager.h" | |
11 #include "content/browser/renderer_host/media/media_stream_dispatcher_host.h" | 10 #include "content/browser/renderer_host/media/media_stream_dispatcher_host.h" |
12 #include "content/browser/renderer_host/media/media_stream_manager.h" | 11 #include "content/browser/renderer_host/media/media_stream_manager.h" |
13 #include "content/browser/renderer_host/media/mock_media_observer.h" | 12 #include "content/browser/renderer_host/media/mock_media_observer.h" |
14 #include "content/browser/renderer_host/media/video_capture_manager.h" | 13 #include "content/browser/renderer_host/media/video_capture_manager.h" |
15 #include "content/common/media/media_stream_messages.h" | 14 #include "content/common/media/media_stream_messages.h" |
16 #include "content/common/media/media_stream_options.h" | 15 #include "content/common/media/media_stream_options.h" |
17 #include "content/public/test/mock_resource_context.h" | 16 #include "content/public/test/mock_resource_context.h" |
18 #include "content/test/test_content_browser_client.h" | 17 #include "content/test/test_content_browser_client.h" |
19 #include "content/test/test_content_client.h" | 18 #include "content/test/test_content_client.h" |
20 #include "ipc/ipc_message_macros.h" | 19 #include "ipc/ipc_message_macros.h" |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
55 MOCK_METHOD2(OnVideoDeviceFailed, void(int routing_id, int index)); | 54 MOCK_METHOD2(OnVideoDeviceFailed, void(int routing_id, int index)); |
56 MOCK_METHOD0(GetMediaObserver, content::MediaObserver*()); | 55 MOCK_METHOD0(GetMediaObserver, content::MediaObserver*()); |
57 | 56 |
58 // Accessor to private functions. | 57 // Accessor to private functions. |
59 void OnGenerateStream(int page_request_id, const StreamOptions& components) { | 58 void OnGenerateStream(int page_request_id, const StreamOptions& components) { |
60 MediaStreamDispatcherHost::OnGenerateStream(kRenderId, | 59 MediaStreamDispatcherHost::OnGenerateStream(kRenderId, |
61 page_request_id, | 60 page_request_id, |
62 components, | 61 components, |
63 GURL()); | 62 GURL()); |
64 } | 63 } |
| 64 void OnGenerateStreamForDevice(int page_request_id, |
| 65 const StreamOptions& components, |
| 66 const std::string& device_id) { |
| 67 MediaStreamDispatcherHost::OnGenerateStreamForDevice(kRenderId, |
| 68 page_request_id, |
| 69 components, |
| 70 device_id, |
| 71 GURL()); |
| 72 } |
65 void OnStopGeneratedStream(const std::string& label) { | 73 void OnStopGeneratedStream(const std::string& label) { |
66 MediaStreamDispatcherHost::OnStopGeneratedStream(kRenderId, label); | 74 MediaStreamDispatcherHost::OnStopGeneratedStream(kRenderId, label); |
67 } | 75 } |
68 | 76 |
69 // Return the number of streams that have been opened or is being open. | 77 // Return the number of streams that have been opened or is being open. |
70 size_t NumberOfStreams() { | 78 size_t NumberOfStreams() { |
71 return streams_.size(); | 79 return streams_.size(); |
72 } | 80 } |
73 | 81 |
74 std::string label_; | 82 std::string label_; |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
165 // MediaStreamManager must be created and called on IO thread. | 173 // MediaStreamManager must be created and called on IO thread. |
166 message_loop_.reset(new MessageLoop(MessageLoop::TYPE_IO)); | 174 message_loop_.reset(new MessageLoop(MessageLoop::TYPE_IO)); |
167 io_thread_.reset(new BrowserThreadImpl(BrowserThread::IO, | 175 io_thread_.reset(new BrowserThreadImpl(BrowserThread::IO, |
168 message_loop_.get())); | 176 message_loop_.get())); |
169 | 177 |
170 // Create our own media observer. | 178 // Create our own media observer. |
171 media_observer_.reset(new MockMediaObserver()); | 179 media_observer_.reset(new MockMediaObserver()); |
172 | 180 |
173 // Create our own MediaStreamManager. | 181 // Create our own MediaStreamManager. |
174 audio_manager_.reset(media::AudioManager::Create()); | 182 audio_manager_.reset(media::AudioManager::Create()); |
175 scoped_refptr<media_stream::AudioInputDeviceManager> | 183 media_stream_manager_.reset( |
176 audio_input_device_manager( | 184 new media_stream::MediaStreamManager(audio_manager_.get())); |
177 new media_stream::AudioInputDeviceManager(audio_manager_.get())); | |
178 scoped_refptr<media_stream::VideoCaptureManager> video_capture_manager( | |
179 new media_stream::VideoCaptureManager()); | |
180 media_stream_manager_.reset(new media_stream::MediaStreamManager( | |
181 audio_input_device_manager, video_capture_manager)); | |
182 // Make sure we use fake devices to avoid long delays. | 185 // Make sure we use fake devices to avoid long delays. |
183 media_stream_manager_->UseFakeDevice(); | 186 media_stream_manager_->UseFakeDevice(); |
184 | 187 |
185 host_ = new MockMediaStreamDispatcherHost(message_loop_.get(), | 188 host_ = new MockMediaStreamDispatcherHost(message_loop_.get(), |
186 media_stream_manager_.get()); | 189 media_stream_manager_.get()); |
187 | 190 |
188 // Use the fake content client and browser. | 191 // Use the fake content client and browser. |
189 old_client_ = content::GetContentClient(); | 192 old_client_ = content::GetContentClient(); |
190 old_browser_client_ = content::GetContentClient()->browser(); | 193 old_browser_client_ = content::GetContentClient()->browser(); |
191 content_client_.reset(new TestContentClient); | 194 content_client_.reset(new TestContentClient); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
233 std::string label = host_->label_; | 236 std::string label = host_->label_; |
234 | 237 |
235 EXPECT_EQ(host_->audio_devices_.size(), 0u); | 238 EXPECT_EQ(host_->audio_devices_.size(), 0u); |
236 EXPECT_EQ(host_->video_devices_.size(), 1u); | 239 EXPECT_EQ(host_->video_devices_.size(), 1u); |
237 EXPECT_EQ(host_->NumberOfStreams(), 1u); | 240 EXPECT_EQ(host_->NumberOfStreams(), 1u); |
238 | 241 |
239 host_->OnStopGeneratedStream(label); | 242 host_->OnStopGeneratedStream(label); |
240 EXPECT_EQ(host_->NumberOfStreams(), 0u); | 243 EXPECT_EQ(host_->NumberOfStreams(), 0u); |
241 } | 244 } |
242 | 245 |
| 246 TEST_F(MediaStreamDispatcherHostTest, GenerateStreamForDevice) { |
| 247 static const char kDeviceId[] = "/dev/video0"; |
| 248 |
| 249 StreamOptions options(content::MEDIA_NO_SERVICE, |
| 250 content::MEDIA_DEVICE_VIDEO_CAPTURE); |
| 251 |
| 252 EXPECT_CALL(*host_, GetMediaObserver()) |
| 253 .WillRepeatedly(Return(media_observer_.get())); |
| 254 EXPECT_CALL(*host_, OnStreamGenerated(kRenderId, kPageRequestId, 0, 1)); |
| 255 host_->OnGenerateStreamForDevice(kPageRequestId, options, kDeviceId); |
| 256 |
| 257 EXPECT_CALL(*media_observer_.get(), OnCaptureDevicesOpened(_, _, _)); |
| 258 EXPECT_CALL(*media_observer_.get(), OnCaptureDevicesClosed(_, _, _)); |
| 259 |
| 260 WaitForResult(); |
| 261 |
| 262 std::string label = host_->label_; |
| 263 |
| 264 EXPECT_EQ(0u, host_->audio_devices_.size()); |
| 265 EXPECT_EQ(1u, host_->video_devices_.size()); |
| 266 EXPECT_EQ(1u, host_->NumberOfStreams()); |
| 267 |
| 268 host_->OnStopGeneratedStream(label); |
| 269 EXPECT_EQ(0u, host_->NumberOfStreams()); |
| 270 } |
| 271 |
243 TEST_F(MediaStreamDispatcherHostTest, GenerateThreeStreams) { | 272 TEST_F(MediaStreamDispatcherHostTest, GenerateThreeStreams) { |
244 // This test opens three video capture devices. Two fake devices exists and it | 273 // This test opens three video capture devices. Two fake devices exists and it |
245 // is expected the last call to |Open()| will open the first device again, but | 274 // is expected the last call to |Open()| will open the first device again, but |
246 // with a different label. | 275 // with a different label. |
247 StreamOptions options(false, true); | 276 StreamOptions options(false, true); |
248 | 277 |
249 // Generate first stream. | 278 // Generate first stream. |
250 EXPECT_CALL(*host_, GetMediaObserver()) | 279 EXPECT_CALL(*host_, GetMediaObserver()) |
251 .WillRepeatedly(Return(media_observer_.get())); | 280 .WillRepeatedly(Return(media_observer_.get())); |
252 EXPECT_CALL(*host_, OnStreamGenerated(kRenderId, kPageRequestId, 0, 1)); | 281 EXPECT_CALL(*host_, OnStreamGenerated(kRenderId, kPageRequestId, 0, 1)); |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
383 // Calling OnChannelClosing() to cancel all the pending/generated streams. | 412 // Calling OnChannelClosing() to cancel all the pending/generated streams. |
384 EXPECT_CALL(*media_observer_.get(), OnCaptureDevicesClosed(_, _, _)) | 413 EXPECT_CALL(*media_observer_.get(), OnCaptureDevicesClosed(_, _, _)) |
385 .Times(3); | 414 .Times(3); |
386 host_->OnChannelClosing(); | 415 host_->OnChannelClosing(); |
387 | 416 |
388 // Streams should have been cleaned up. | 417 // Streams should have been cleaned up. |
389 EXPECT_EQ(host_->NumberOfStreams(), 0u); | 418 EXPECT_EQ(host_->NumberOfStreams(), 0u); |
390 } | 419 } |
391 | 420 |
392 }; // namespace media_stream | 421 }; // namespace media_stream |
OLD | NEW |