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/mock_resource_context.h" | 10 #include "content/browser/mock_resource_context.h" |
(...skipping 17 matching lines...) Expand all Loading... |
28 | 28 |
29 const int kProcessId = 5; | 29 const int kProcessId = 5; |
30 const int kRenderId = 6; | 30 const int kRenderId = 6; |
31 const int kPageRequestId = 7; | 31 const int kPageRequestId = 7; |
32 | 32 |
33 namespace media_stream { | 33 namespace media_stream { |
34 | 34 |
35 class MockMediaStreamDispatcherHost : public MediaStreamDispatcherHost { | 35 class MockMediaStreamDispatcherHost : public MediaStreamDispatcherHost { |
36 public: | 36 public: |
37 MockMediaStreamDispatcherHost(content::ResourceContext* resource_context, | 37 MockMediaStreamDispatcherHost(content::ResourceContext* resource_context, |
38 MessageLoop* message_loop) | 38 MessageLoop* message_loop, |
39 : MediaStreamDispatcherHost(resource_context, kProcessId), | 39 AudioManager* audio_manager) |
| 40 : MediaStreamDispatcherHost(resource_context, kProcessId, audio_manager), |
40 message_loop_(message_loop) {} | 41 message_loop_(message_loop) {} |
41 virtual ~MockMediaStreamDispatcherHost() {} | 42 virtual ~MockMediaStreamDispatcherHost() {} |
42 | 43 |
43 // A list of mock methods. | 44 // A list of mock methods. |
44 MOCK_METHOD4(OnStreamGenerated, | 45 MOCK_METHOD4(OnStreamGenerated, |
45 void(int routing_id, int request_id, int audio_array_size, | 46 void(int routing_id, int request_id, int audio_array_size, |
46 int video_array_size)); | 47 int video_array_size)); |
47 MOCK_METHOD2(OnStreamGenerationFailed, void(int routing_id, int request_id)); | 48 MOCK_METHOD2(OnStreamGenerationFailed, void(int routing_id, int request_id)); |
48 MOCK_METHOD2(OnAudioDeviceFailed, void(int routing_id, int index)); | 49 MOCK_METHOD2(OnAudioDeviceFailed, void(int routing_id, int index)); |
49 MOCK_METHOD2(OnVideoDeviceFailed, void(int routing_id, int index)); | 50 MOCK_METHOD2(OnVideoDeviceFailed, void(int routing_id, int index)); |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
146 message_loop_.reset(new MessageLoop(MessageLoop::TYPE_IO)); | 147 message_loop_.reset(new MessageLoop(MessageLoop::TYPE_IO)); |
147 // ResourceContext must be created on UI thread. | 148 // ResourceContext must be created on UI thread. |
148 ui_thread_.reset(new BrowserThreadImpl(BrowserThread::UI, | 149 ui_thread_.reset(new BrowserThreadImpl(BrowserThread::UI, |
149 message_loop_.get())); | 150 message_loop_.get())); |
150 // MediaStreamManager must be created and called on IO thread. | 151 // MediaStreamManager must be created and called on IO thread. |
151 io_thread_.reset(new BrowserThreadImpl(BrowserThread::IO, | 152 io_thread_.reset(new BrowserThreadImpl(BrowserThread::IO, |
152 message_loop_.get())); | 153 message_loop_.get())); |
153 | 154 |
154 audio_manager_.reset(AudioManager::Create()); | 155 audio_manager_.reset(AudioManager::Create()); |
155 | 156 |
156 // Create a MediaStreamManager instance and hand over pointer to | |
157 // ResourceContext. | |
158 media_stream_manager_.reset(new MediaStreamManager(audio_manager_.get())); | |
159 // Make sure we use fake devices to avoid long delays. | 157 // Make sure we use fake devices to avoid long delays. |
160 media_stream_manager_->UseFakeDevice(); | 158 MediaStreamManager::GetForResourceContext( |
161 resource_context_.set_media_stream_manager(media_stream_manager_.get()); | 159 &resource_context_, audio_manager_.get())->UseFakeDevice(); |
162 | 160 |
163 host_ = new MockMediaStreamDispatcherHost( | 161 host_ = new MockMediaStreamDispatcherHost( |
164 &resource_context_, message_loop_.get()); | 162 &resource_context_, message_loop_.get(), audio_manager_.get()); |
165 } | 163 } |
166 | 164 |
167 virtual void TearDown() { | 165 virtual void TearDown() { |
168 // Needed to make sure the manager finishes all tasks on its own thread. | 166 // Needed to make sure the manager finishes all tasks on its own thread. |
169 SyncWithVideoCaptureManagerThread(); | 167 SyncWithVideoCaptureManagerThread(); |
170 } | 168 } |
171 | 169 |
172 // Called on the VideoCaptureManager thread. | 170 // Called on the VideoCaptureManager thread. |
173 static void PostQuitMessageLoop(MessageLoop* message_loop) { | 171 static void PostQuitMessageLoop(MessageLoop* message_loop) { |
174 message_loop->PostTask(FROM_HERE, MessageLoop::QuitClosure()); | 172 message_loop->PostTask(FROM_HERE, MessageLoop::QuitClosure()); |
(...skipping 10 matching lines...) Expand all Loading... |
185 | 183 |
186 // SyncWithVideoCaptureManagerThread() waits until all pending tasks on the | 184 // SyncWithVideoCaptureManagerThread() waits until all pending tasks on the |
187 // video_capture_manager thread are executed while also processing pending | 185 // video_capture_manager thread are executed while also processing pending |
188 // task in message_loop_ on the current thread. It is used to synchronize | 186 // task in message_loop_ on the current thread. It is used to synchronize |
189 // with the video capture manager thread when we are stopping a video | 187 // with the video capture manager thread when we are stopping a video |
190 // capture device. | 188 // capture device. |
191 void SyncWithVideoCaptureManagerThread() { | 189 void SyncWithVideoCaptureManagerThread() { |
192 message_loop_->PostTask( | 190 message_loop_->PostTask( |
193 FROM_HERE, | 191 FROM_HERE, |
194 base::Bind(&PostQuitOnVideoCaptureManagerThread, | 192 base::Bind(&PostQuitOnVideoCaptureManagerThread, |
195 message_loop_.get(), media_stream_manager_.get())); | 193 message_loop_.get(), |
| 194 MediaStreamManager::GetForResourceContext( |
| 195 &resource_context_, audio_manager_.get()))); |
196 message_loop_->Run(); | 196 message_loop_->Run(); |
197 } | 197 } |
198 | 198 |
199 scoped_refptr<MockMediaStreamDispatcherHost> host_; | 199 scoped_refptr<MockMediaStreamDispatcherHost> host_; |
200 scoped_ptr<MessageLoop> message_loop_; | 200 scoped_ptr<MessageLoop> message_loop_; |
201 scoped_ptr<BrowserThreadImpl> ui_thread_; | 201 scoped_ptr<BrowserThreadImpl> ui_thread_; |
202 scoped_ptr<BrowserThreadImpl> io_thread_; | 202 scoped_ptr<BrowserThreadImpl> io_thread_; |
203 scoped_ptr<MediaStreamManager> media_stream_manager_; | |
204 scoped_ptr<AudioManager> audio_manager_; | 203 scoped_ptr<AudioManager> audio_manager_; |
205 content::MockResourceContext resource_context_; | 204 content::MockResourceContext resource_context_; |
206 }; | 205 }; |
207 | 206 |
208 TEST_F(MediaStreamDispatcherHostTest, GenerateStream) { | 207 TEST_F(MediaStreamDispatcherHostTest, GenerateStream) { |
209 StreamOptions options(false, StreamOptions::kFacingUser); | 208 StreamOptions options(false, StreamOptions::kFacingUser); |
210 | 209 |
211 EXPECT_CALL(*host_, OnStreamGenerated(kRenderId, kPageRequestId, 0, 1)); | 210 EXPECT_CALL(*host_, OnStreamGenerated(kRenderId, kPageRequestId, 0, 1)); |
212 host_->OnGenerateStream(kPageRequestId, options); | 211 host_->OnGenerateStream(kPageRequestId, options); |
213 | 212 |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
293 host_->OnGenerateStream(kPageRequestId, options); | 292 host_->OnGenerateStream(kPageRequestId, options); |
294 WaitForResult(); | 293 WaitForResult(); |
295 std::string label = host_->label_; | 294 std::string label = host_->label_; |
296 | 295 |
297 EXPECT_EQ(host_->audio_devices_.size(), 0u); | 296 EXPECT_EQ(host_->audio_devices_.size(), 0u); |
298 EXPECT_EQ(host_->video_devices_.size(), 1u); | 297 EXPECT_EQ(host_->video_devices_.size(), 1u); |
299 EXPECT_EQ(host_->NumberOfStreams(), 1u); | 298 EXPECT_EQ(host_->NumberOfStreams(), 1u); |
300 | 299 |
301 EXPECT_CALL(*host_, OnVideoDeviceFailed(kRenderId, 0)); | 300 EXPECT_CALL(*host_, OnVideoDeviceFailed(kRenderId, 0)); |
302 int session_id = host_->video_devices_[0].session_id; | 301 int session_id = host_->video_devices_[0].session_id; |
303 resource_context_.GetMediaStreamManager()->video_capture_manager()->Error( | 302 MediaStreamManager::GetForResourceContext( |
304 session_id); | 303 &resource_context_, audio_manager_.get())-> |
| 304 video_capture_manager()->Error(session_id); |
305 WaitForResult(); | 305 WaitForResult(); |
306 EXPECT_EQ(host_->video_devices_.size(), 0u); | 306 EXPECT_EQ(host_->video_devices_.size(), 0u); |
307 EXPECT_EQ(host_->NumberOfStreams(), 1u); | 307 EXPECT_EQ(host_->NumberOfStreams(), 1u); |
308 | 308 |
309 // TODO(perkj): test audio device failure? | 309 // TODO(perkj): test audio device failure? |
310 | 310 |
311 host_->OnStopGeneratedStream(label); | 311 host_->OnStopGeneratedStream(label); |
312 EXPECT_EQ(host_->NumberOfStreams(), 0u); | 312 EXPECT_EQ(host_->NumberOfStreams(), 0u); |
313 } | 313 } |
314 | 314 |
315 }; // namespace media_stream | 315 }; // namespace media_stream |
OLD | NEW |