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 #include <queue> | 6 #include <queue> |
7 | 7 |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/callback_helpers.h" | 9 #include "base/callback_helpers.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
205 }; | 205 }; |
206 | 206 |
207 class MockMediaStreamUIProxy : public FakeMediaStreamUIProxy { | 207 class MockMediaStreamUIProxy : public FakeMediaStreamUIProxy { |
208 public: | 208 public: |
209 MOCK_METHOD2( | 209 MOCK_METHOD2( |
210 OnStarted, | 210 OnStarted, |
211 void(const base::Closure& stop, | 211 void(const base::Closure& stop, |
212 const MediaStreamUIProxy::WindowIdCallback& window_id_callback)); | 212 const MediaStreamUIProxy::WindowIdCallback& window_id_callback)); |
213 }; | 213 }; |
214 | 214 |
215 class MediaStreamManagerForTest : public MediaStreamManager { | |
216 public: | |
217 MediaStreamManagerForTest(media::AudioManager* audio_manager) | |
218 : MediaStreamManager(audio_manager), | |
219 mic_access_(true), | |
220 camera_access_(true) {} | |
221 | |
222 virtual ~MediaStreamManagerForTest() {} | |
223 | |
224 void set_mic_access(bool allow_access) { | |
225 mic_access_ = allow_access; | |
226 } | |
227 | |
228 void set_camera_access(bool allow_access) { | |
229 camera_access_ = allow_access; | |
230 } | |
231 | |
232 private: | |
233 virtual bool CheckMediaAccessPermissionOnUIThread( | |
234 int render_process_id, | |
235 const GURL& security_origin, | |
236 MediaStreamType type) OVERRIDE { | |
237 if (type == MEDIA_DEVICE_AUDIO_CAPTURE) | |
238 return mic_access_; | |
239 else if (type == MEDIA_DEVICE_VIDEO_CAPTURE) | |
240 return camera_access_; | |
241 return false; | |
242 } | |
243 | |
244 bool mic_access_; | |
245 bool camera_access_; | |
246 }; | |
247 | |
248 class MediaStreamDispatcherHostTest : public testing::Test { | 215 class MediaStreamDispatcherHostTest : public testing::Test { |
249 public: | 216 public: |
250 MediaStreamDispatcherHostTest() | 217 MediaStreamDispatcherHostTest() |
251 : old_browser_client_(NULL), | 218 : old_browser_client_(NULL), |
252 thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), | 219 thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), |
253 origin_("https://test.com") { | 220 origin_("https://test.com") { |
254 audio_manager_.reset( | 221 audio_manager_.reset( |
255 new media::MockAudioManager(base::MessageLoopProxy::current())); | 222 new media::MockAudioManager(base::MessageLoopProxy::current())); |
256 // Make sure we use fake devices to avoid long delays. | 223 // Make sure we use fake devices to avoid long delays. |
257 base::CommandLine::ForCurrentProcess()->AppendSwitch( | 224 base::CommandLine::ForCurrentProcess()->AppendSwitch( |
258 switches::kUseFakeDeviceForMediaStream); | 225 switches::kUseFakeDeviceForMediaStream); |
259 // Create our own MediaStreamManager. | 226 // Create our own MediaStreamManager. |
260 media_stream_manager_.reset( | 227 media_stream_manager_.reset(new MediaStreamManager(audio_manager_.get())); |
261 new MediaStreamManagerForTest(audio_manager_.get())); | |
262 video_capture_device_factory_ = | 228 video_capture_device_factory_ = |
263 static_cast<media::FakeVideoCaptureDeviceFactory*>( | 229 static_cast<media::FakeVideoCaptureDeviceFactory*>( |
264 media_stream_manager_->video_capture_manager() | 230 media_stream_manager_->video_capture_manager() |
265 ->video_capture_device_factory()); | 231 ->video_capture_device_factory()); |
266 DCHECK(video_capture_device_factory_); | 232 DCHECK(video_capture_device_factory_); |
267 | 233 |
268 MockResourceContext* mock_resource_context = | 234 MockResourceContext* mock_resource_context = |
269 static_cast<MockResourceContext*>( | 235 static_cast<MockResourceContext*>( |
270 browser_context_.GetResourceContext()); | 236 browser_context_.GetResourceContext()); |
271 | 237 |
(...skipping 19 matching lines...) Expand all Loading... |
291 &physical_audio_devices_); | 257 &physical_audio_devices_); |
292 ASSERT_GT(physical_audio_devices_.size(), 0u); | 258 ASSERT_GT(physical_audio_devices_.size(), 0u); |
293 } | 259 } |
294 | 260 |
295 virtual void TearDown() OVERRIDE { | 261 virtual void TearDown() OVERRIDE { |
296 host_->OnChannelClosing(); | 262 host_->OnChannelClosing(); |
297 } | 263 } |
298 | 264 |
299 protected: | 265 protected: |
300 virtual void SetupFakeUI(bool expect_started) { | 266 virtual void SetupFakeUI(bool expect_started) { |
301 scoped_ptr<MockMediaStreamUIProxy> stream_ui(new MockMediaStreamUIProxy()); | 267 stream_ui_ = new MockMediaStreamUIProxy(); |
302 if (expect_started) { | 268 if (expect_started) { |
303 EXPECT_CALL(*stream_ui, OnStarted(_, _)); | 269 EXPECT_CALL(*stream_ui_, OnStarted(_, _)); |
304 } | 270 } |
305 media_stream_manager_->UseFakeUI( | 271 media_stream_manager_->UseFakeUI( |
306 stream_ui.PassAs<FakeMediaStreamUIProxy>()); | 272 scoped_ptr<FakeMediaStreamUIProxy>(stream_ui_)); |
307 } | 273 } |
308 | 274 |
309 void GenerateStreamAndWaitForResult(int render_frame_id, | 275 void GenerateStreamAndWaitForResult(int render_frame_id, |
310 int page_request_id, | 276 int page_request_id, |
311 const StreamOptions& options) { | 277 const StreamOptions& options) { |
312 base::RunLoop run_loop; | 278 base::RunLoop run_loop; |
313 int expected_audio_array_size = | 279 int expected_audio_array_size = |
314 (options.audio_requested && | 280 (options.audio_requested && |
315 physical_audio_devices_.size() > 0) ? 1 : 0; | 281 physical_audio_devices_.size() > 0) ? 1 : 0; |
316 int expected_video_array_size = | 282 int expected_video_array_size = |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
439 } | 405 } |
440 | 406 |
441 void AddSourceIdConstraint(const std::string& source_id, | 407 void AddSourceIdConstraint(const std::string& source_id, |
442 StreamOptions::Constraints* constraints) { | 408 StreamOptions::Constraints* constraints) { |
443 constraints->push_back(StreamOptions::Constraint(kMediaStreamSourceInfoId, | 409 constraints->push_back(StreamOptions::Constraint(kMediaStreamSourceInfoId, |
444 source_id)); | 410 source_id)); |
445 } | 411 } |
446 | 412 |
447 scoped_refptr<MockMediaStreamDispatcherHost> host_; | 413 scoped_refptr<MockMediaStreamDispatcherHost> host_; |
448 scoped_ptr<media::AudioManager> audio_manager_; | 414 scoped_ptr<media::AudioManager> audio_manager_; |
449 scoped_ptr<MediaStreamManagerForTest> media_stream_manager_; | 415 scoped_ptr<MediaStreamManager> media_stream_manager_; |
| 416 MockMediaStreamUIProxy* stream_ui_; |
450 ContentBrowserClient* old_browser_client_; | 417 ContentBrowserClient* old_browser_client_; |
451 scoped_ptr<ContentClient> content_client_; | 418 scoped_ptr<ContentClient> content_client_; |
452 content::TestBrowserThreadBundle thread_bundle_; | 419 content::TestBrowserThreadBundle thread_bundle_; |
453 content::TestBrowserContext browser_context_; | 420 content::TestBrowserContext browser_context_; |
454 media::AudioDeviceNames physical_audio_devices_; | 421 media::AudioDeviceNames physical_audio_devices_; |
455 media::VideoCaptureDevice::Names physical_video_devices_; | 422 media::VideoCaptureDevice::Names physical_video_devices_; |
456 GURL origin_; | 423 GURL origin_; |
457 media::FakeVideoCaptureDeviceFactory* video_capture_device_factory_; | 424 media::FakeVideoCaptureDeviceFactory* video_capture_device_factory_; |
458 }; | 425 }; |
459 | 426 |
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
904 base::RunLoop run_loop; | 871 base::RunLoop run_loop; |
905 EXPECT_CALL(*host_.get(), OnDeviceStopped(kRenderId)) | 872 EXPECT_CALL(*host_.get(), OnDeviceStopped(kRenderId)) |
906 .WillOnce(testing::InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); | 873 .WillOnce(testing::InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); |
907 media_stream_manager_->OnDevicesChanged( | 874 media_stream_manager_->OnDevicesChanged( |
908 base::SystemMonitor::DEVTYPE_VIDEO_CAPTURE); | 875 base::SystemMonitor::DEVTYPE_VIDEO_CAPTURE); |
909 | 876 |
910 run_loop.Run(); | 877 run_loop.Run(); |
911 } | 878 } |
912 | 879 |
913 TEST_F(MediaStreamDispatcherHostTest, EnumerateAudioDevices) { | 880 TEST_F(MediaStreamDispatcherHostTest, EnumerateAudioDevices) { |
| 881 SetupFakeUI(false); |
914 EnumerateDevicesAndWaitForResult(kRenderId, kPageRequestId, | 882 EnumerateDevicesAndWaitForResult(kRenderId, kPageRequestId, |
915 MEDIA_DEVICE_AUDIO_CAPTURE); | 883 MEDIA_DEVICE_AUDIO_CAPTURE); |
916 EXPECT_TRUE(DoesContainLabels(host_->enumerated_devices_)); | 884 EXPECT_TRUE(DoesContainLabels(host_->enumerated_devices_)); |
917 } | 885 } |
918 | 886 |
919 TEST_F(MediaStreamDispatcherHostTest, EnumerateVideoDevices) { | 887 TEST_F(MediaStreamDispatcherHostTest, EnumerateVideoDevices) { |
| 888 SetupFakeUI(false); |
920 EnumerateDevicesAndWaitForResult(kRenderId, kPageRequestId, | 889 EnumerateDevicesAndWaitForResult(kRenderId, kPageRequestId, |
921 MEDIA_DEVICE_VIDEO_CAPTURE); | 890 MEDIA_DEVICE_VIDEO_CAPTURE); |
922 EXPECT_TRUE(DoesContainLabels(host_->enumerated_devices_)); | 891 EXPECT_TRUE(DoesContainLabels(host_->enumerated_devices_)); |
923 } | 892 } |
924 | 893 |
925 TEST_F(MediaStreamDispatcherHostTest, EnumerateAudioDevicesNoAccess) { | 894 TEST_F(MediaStreamDispatcherHostTest, EnumerateAudioDevicesNoAccess) { |
926 media_stream_manager_->set_mic_access(false); | 895 SetupFakeUI(false); |
| 896 stream_ui_->SetMicAccess(false); |
927 EnumerateDevicesAndWaitForResult(kRenderId, kPageRequestId, | 897 EnumerateDevicesAndWaitForResult(kRenderId, kPageRequestId, |
928 MEDIA_DEVICE_AUDIO_CAPTURE); | 898 MEDIA_DEVICE_AUDIO_CAPTURE); |
929 EXPECT_TRUE(DoesNotContainLabels(host_->enumerated_devices_)); | 899 EXPECT_TRUE(DoesNotContainLabels(host_->enumerated_devices_)); |
930 } | 900 } |
931 | 901 |
932 TEST_F(MediaStreamDispatcherHostTest, EnumerateVideoDevicesNoAccess) { | 902 TEST_F(MediaStreamDispatcherHostTest, EnumerateVideoDevicesNoAccess) { |
933 media_stream_manager_->set_camera_access(false); | 903 SetupFakeUI(false); |
| 904 stream_ui_->SetCameraAccess(false); |
934 EnumerateDevicesAndWaitForResult(kRenderId, kPageRequestId, | 905 EnumerateDevicesAndWaitForResult(kRenderId, kPageRequestId, |
935 MEDIA_DEVICE_VIDEO_CAPTURE); | 906 MEDIA_DEVICE_VIDEO_CAPTURE); |
936 EXPECT_TRUE(DoesNotContainLabels(host_->enumerated_devices_)); | 907 EXPECT_TRUE(DoesNotContainLabels(host_->enumerated_devices_)); |
937 } | 908 } |
938 | 909 |
939 }; // namespace content | 910 }; // namespace content |
OLD | NEW |