| 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 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 const int kPageRequestId = 7; | 45 const int kPageRequestId = 7; |
| 46 | 46 |
| 47 namespace content { | 47 namespace content { |
| 48 | 48 |
| 49 class MockMediaStreamDispatcherHost : public MediaStreamDispatcherHost, | 49 class MockMediaStreamDispatcherHost : public MediaStreamDispatcherHost, |
| 50 public TestContentBrowserClient { | 50 public TestContentBrowserClient { |
| 51 public: | 51 public: |
| 52 MockMediaStreamDispatcherHost( | 52 MockMediaStreamDispatcherHost( |
| 53 const ResourceContext::SaltCallback salt_callback, | 53 const ResourceContext::SaltCallback salt_callback, |
| 54 const scoped_refptr<base::MessageLoopProxy>& message_loop, | 54 const scoped_refptr<base::MessageLoopProxy>& message_loop, |
| 55 MediaStreamManager* manager, | 55 MediaStreamManager* manager) |
| 56 ResourceContext* resource_context) | 56 : MediaStreamDispatcherHost(kProcessId, salt_callback, manager), |
| 57 : MediaStreamDispatcherHost(kProcessId, salt_callback, manager, | |
| 58 resource_context), | |
| 59 message_loop_(message_loop), | 57 message_loop_(message_loop), |
| 60 current_ipc_(NULL) {} | 58 current_ipc_(NULL) {} |
| 61 | 59 |
| 62 // A list of mock methods. | 60 // A list of mock methods. |
| 63 MOCK_METHOD4(OnStreamGenerated, | 61 MOCK_METHOD4(OnStreamGenerated, |
| 64 void(int routing_id, int request_id, int audio_array_size, | 62 void(int routing_id, int request_id, int audio_array_size, |
| 65 int video_array_size)); | 63 int video_array_size)); |
| 66 MOCK_METHOD3(OnStreamGenerationFailed, void(int routing_id, | 64 MOCK_METHOD3(OnStreamGenerationFailed, void(int routing_id, |
| 67 int request_id, | 65 int request_id, |
| 68 MediaStreamRequestResult result)); | 66 MediaStreamRequestResult result)); |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 207 }; | 205 }; |
| 208 | 206 |
| 209 class MockMediaStreamUIProxy : public FakeMediaStreamUIProxy { | 207 class MockMediaStreamUIProxy : public FakeMediaStreamUIProxy { |
| 210 public: | 208 public: |
| 211 MOCK_METHOD2( | 209 MOCK_METHOD2( |
| 212 OnStarted, | 210 OnStarted, |
| 213 void(const base::Closure& stop, | 211 void(const base::Closure& stop, |
| 214 const MediaStreamUIProxy::WindowIdCallback& window_id_callback)); | 212 const MediaStreamUIProxy::WindowIdCallback& window_id_callback)); |
| 215 }; | 213 }; |
| 216 | 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 CheckMediaAccessOnUI(int render_process_id, |
| 234 const GURL& security_origin, |
| 235 MediaStreamType type) OVERRIDE { |
| 236 if (type == MEDIA_DEVICE_AUDIO_CAPTURE) |
| 237 return mic_access_; |
| 238 else if (type == MEDIA_DEVICE_VIDEO_CAPTURE) |
| 239 return camera_access_; |
| 240 return false; |
| 241 } |
| 242 |
| 243 bool mic_access_; |
| 244 bool camera_access_; |
| 245 }; |
| 246 |
| 217 class MediaStreamDispatcherHostTest : public testing::Test { | 247 class MediaStreamDispatcherHostTest : public testing::Test { |
| 218 public: | 248 public: |
| 219 MediaStreamDispatcherHostTest() | 249 MediaStreamDispatcherHostTest() |
| 220 : old_browser_client_(NULL), | 250 : old_browser_client_(NULL), |
| 221 thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), | 251 thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), |
| 222 origin_("https://test.com") { | 252 origin_("https://test.com") { |
| 223 audio_manager_.reset( | 253 audio_manager_.reset( |
| 224 new media::MockAudioManager(base::MessageLoopProxy::current())); | 254 new media::MockAudioManager(base::MessageLoopProxy::current())); |
| 225 // Make sure we use fake devices to avoid long delays. | 255 // Make sure we use fake devices to avoid long delays. |
| 226 base::CommandLine::ForCurrentProcess()->AppendSwitch( | 256 base::CommandLine::ForCurrentProcess()->AppendSwitch( |
| 227 switches::kUseFakeDeviceForMediaStream); | 257 switches::kUseFakeDeviceForMediaStream); |
| 228 // Create our own MediaStreamManager. | 258 // Create our own MediaStreamManager. |
| 229 media_stream_manager_.reset(new MediaStreamManager(audio_manager_.get())); | 259 media_stream_manager_.reset( |
| 260 new MediaStreamManagerForTest(audio_manager_.get())); |
| 230 video_capture_device_factory_ = | 261 video_capture_device_factory_ = |
| 231 static_cast<media::FakeVideoCaptureDeviceFactory*>( | 262 static_cast<media::FakeVideoCaptureDeviceFactory*>( |
| 232 media_stream_manager_->video_capture_manager() | 263 media_stream_manager_->video_capture_manager() |
| 233 ->video_capture_device_factory()); | 264 ->video_capture_device_factory()); |
| 234 DCHECK(video_capture_device_factory_); | 265 DCHECK(video_capture_device_factory_); |
| 235 | 266 |
| 236 MockResourceContext* mock_resource_context = | 267 MockResourceContext* mock_resource_context = |
| 237 static_cast<MockResourceContext*>( | 268 static_cast<MockResourceContext*>( |
| 238 browser_context_.GetResourceContext()); | 269 browser_context_.GetResourceContext()); |
| 239 mock_resource_context->set_mic_access(true); | |
| 240 mock_resource_context->set_camera_access(true); | |
| 241 | 270 |
| 242 host_ = new MockMediaStreamDispatcherHost( | 271 host_ = new MockMediaStreamDispatcherHost( |
| 243 mock_resource_context->GetMediaDeviceIDSalt(), | 272 mock_resource_context->GetMediaDeviceIDSalt(), |
| 244 base::MessageLoopProxy::current(), | 273 base::MessageLoopProxy::current(), |
| 245 media_stream_manager_.get(), | 274 media_stream_manager_.get()); |
| 246 mock_resource_context); | |
| 247 | 275 |
| 248 // Use the fake content client and browser. | 276 // Use the fake content client and browser. |
| 249 content_client_.reset(new TestContentClient()); | 277 content_client_.reset(new TestContentClient()); |
| 250 SetContentClient(content_client_.get()); | 278 SetContentClient(content_client_.get()); |
| 251 old_browser_client_ = SetBrowserClientForTesting(host_.get()); | 279 old_browser_client_ = SetBrowserClientForTesting(host_.get()); |
| 252 } | 280 } |
| 253 | 281 |
| 254 virtual ~MediaStreamDispatcherHostTest() { | 282 virtual ~MediaStreamDispatcherHostTest() { |
| 255 } | 283 } |
| 256 | 284 |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 410 } | 438 } |
| 411 | 439 |
| 412 void AddSourceIdConstraint(const std::string& source_id, | 440 void AddSourceIdConstraint(const std::string& source_id, |
| 413 StreamOptions::Constraints* constraints) { | 441 StreamOptions::Constraints* constraints) { |
| 414 constraints->push_back(StreamOptions::Constraint(kMediaStreamSourceInfoId, | 442 constraints->push_back(StreamOptions::Constraint(kMediaStreamSourceInfoId, |
| 415 source_id)); | 443 source_id)); |
| 416 } | 444 } |
| 417 | 445 |
| 418 scoped_refptr<MockMediaStreamDispatcherHost> host_; | 446 scoped_refptr<MockMediaStreamDispatcherHost> host_; |
| 419 scoped_ptr<media::AudioManager> audio_manager_; | 447 scoped_ptr<media::AudioManager> audio_manager_; |
| 420 scoped_ptr<MediaStreamManager> media_stream_manager_; | 448 scoped_ptr<MediaStreamManagerForTest> media_stream_manager_; |
| 421 ContentBrowserClient* old_browser_client_; | 449 ContentBrowserClient* old_browser_client_; |
| 422 scoped_ptr<ContentClient> content_client_; | 450 scoped_ptr<ContentClient> content_client_; |
| 423 content::TestBrowserThreadBundle thread_bundle_; | 451 content::TestBrowserThreadBundle thread_bundle_; |
| 424 content::TestBrowserContext browser_context_; | 452 content::TestBrowserContext browser_context_; |
| 425 media::AudioDeviceNames physical_audio_devices_; | 453 media::AudioDeviceNames physical_audio_devices_; |
| 426 media::VideoCaptureDevice::Names physical_video_devices_; | 454 media::VideoCaptureDevice::Names physical_video_devices_; |
| 427 GURL origin_; | 455 GURL origin_; |
| 428 media::FakeVideoCaptureDeviceFactory* video_capture_device_factory_; | 456 media::FakeVideoCaptureDeviceFactory* video_capture_device_factory_; |
| 429 }; | 457 }; |
| 430 | 458 |
| (...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 887 EXPECT_TRUE(DoesContainLabels(host_->enumerated_devices_)); | 915 EXPECT_TRUE(DoesContainLabels(host_->enumerated_devices_)); |
| 888 } | 916 } |
| 889 | 917 |
| 890 TEST_F(MediaStreamDispatcherHostTest, EnumerateVideoDevices) { | 918 TEST_F(MediaStreamDispatcherHostTest, EnumerateVideoDevices) { |
| 891 EnumerateDevicesAndWaitForResult(kRenderId, kPageRequestId, | 919 EnumerateDevicesAndWaitForResult(kRenderId, kPageRequestId, |
| 892 MEDIA_DEVICE_VIDEO_CAPTURE); | 920 MEDIA_DEVICE_VIDEO_CAPTURE); |
| 893 EXPECT_TRUE(DoesContainLabels(host_->enumerated_devices_)); | 921 EXPECT_TRUE(DoesContainLabels(host_->enumerated_devices_)); |
| 894 } | 922 } |
| 895 | 923 |
| 896 TEST_F(MediaStreamDispatcherHostTest, EnumerateAudioDevicesNoAccess) { | 924 TEST_F(MediaStreamDispatcherHostTest, EnumerateAudioDevicesNoAccess) { |
| 897 MockResourceContext* mock_resource_context = | 925 media_stream_manager_->set_mic_access(false); |
| 898 static_cast<MockResourceContext*>(browser_context_.GetResourceContext()); | |
| 899 mock_resource_context->set_mic_access(false); | |
| 900 EnumerateDevicesAndWaitForResult(kRenderId, kPageRequestId, | 926 EnumerateDevicesAndWaitForResult(kRenderId, kPageRequestId, |
| 901 MEDIA_DEVICE_AUDIO_CAPTURE); | 927 MEDIA_DEVICE_AUDIO_CAPTURE); |
| 902 EXPECT_TRUE(DoesNotContainLabels(host_->enumerated_devices_)); | 928 EXPECT_TRUE(DoesNotContainLabels(host_->enumerated_devices_)); |
| 903 } | 929 } |
| 904 | 930 |
| 905 TEST_F(MediaStreamDispatcherHostTest, EnumerateVideoDevicesNoAccess) { | 931 TEST_F(MediaStreamDispatcherHostTest, EnumerateVideoDevicesNoAccess) { |
| 906 MockResourceContext* mock_resource_context = | 932 media_stream_manager_->set_camera_access(false); |
| 907 static_cast<MockResourceContext*>(browser_context_.GetResourceContext()); | |
| 908 mock_resource_context->set_camera_access(false); | |
| 909 EnumerateDevicesAndWaitForResult(kRenderId, kPageRequestId, | 933 EnumerateDevicesAndWaitForResult(kRenderId, kPageRequestId, |
| 910 MEDIA_DEVICE_VIDEO_CAPTURE); | 934 MEDIA_DEVICE_VIDEO_CAPTURE); |
| 911 EXPECT_TRUE(DoesNotContainLabels(host_->enumerated_devices_)); | 935 EXPECT_TRUE(DoesNotContainLabels(host_->enumerated_devices_)); |
| 912 } | 936 } |
| 913 | 937 |
| 914 }; // namespace content | 938 }; // namespace content |
| OLD | NEW |