| 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 |