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 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 |
217 class MediaStreamDispatcherHostTest : public testing::Test { | 248 class MediaStreamDispatcherHostTest : public testing::Test { |
218 public: | 249 public: |
219 MediaStreamDispatcherHostTest() | 250 MediaStreamDispatcherHostTest() |
220 : old_browser_client_(NULL), | 251 : old_browser_client_(NULL), |
221 thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), | 252 thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), |
222 origin_("https://test.com") { | 253 origin_("https://test.com") { |
223 audio_manager_.reset( | 254 audio_manager_.reset( |
224 new media::MockAudioManager(base::MessageLoopProxy::current())); | 255 new media::MockAudioManager(base::MessageLoopProxy::current())); |
225 // Make sure we use fake devices to avoid long delays. | 256 // Make sure we use fake devices to avoid long delays. |
226 base::CommandLine::ForCurrentProcess()->AppendSwitch( | 257 base::CommandLine::ForCurrentProcess()->AppendSwitch( |
227 switches::kUseFakeDeviceForMediaStream); | 258 switches::kUseFakeDeviceForMediaStream); |
228 // Create our own MediaStreamManager. | 259 // Create our own MediaStreamManager. |
229 media_stream_manager_.reset(new MediaStreamManager(audio_manager_.get())); | 260 media_stream_manager_.reset( |
| 261 new MediaStreamManagerForTest(audio_manager_.get())); |
230 video_capture_device_factory_ = | 262 video_capture_device_factory_ = |
231 static_cast<media::FakeVideoCaptureDeviceFactory*>( | 263 static_cast<media::FakeVideoCaptureDeviceFactory*>( |
232 media_stream_manager_->video_capture_manager() | 264 media_stream_manager_->video_capture_manager() |
233 ->video_capture_device_factory()); | 265 ->video_capture_device_factory()); |
234 DCHECK(video_capture_device_factory_); | 266 DCHECK(video_capture_device_factory_); |
235 | 267 |
236 MockResourceContext* mock_resource_context = | 268 MockResourceContext* mock_resource_context = |
237 static_cast<MockResourceContext*>( | 269 static_cast<MockResourceContext*>( |
238 browser_context_.GetResourceContext()); | 270 browser_context_.GetResourceContext()); |
239 mock_resource_context->set_mic_access(true); | |
240 mock_resource_context->set_camera_access(true); | |
241 | 271 |
242 host_ = new MockMediaStreamDispatcherHost( | 272 host_ = new MockMediaStreamDispatcherHost( |
243 mock_resource_context->GetMediaDeviceIDSalt(), | 273 mock_resource_context->GetMediaDeviceIDSalt(), |
244 base::MessageLoopProxy::current(), | 274 base::MessageLoopProxy::current(), |
245 media_stream_manager_.get(), | 275 media_stream_manager_.get()); |
246 mock_resource_context); | |
247 | 276 |
248 // Use the fake content client and browser. | 277 // Use the fake content client and browser. |
249 content_client_.reset(new TestContentClient()); | 278 content_client_.reset(new TestContentClient()); |
250 SetContentClient(content_client_.get()); | 279 SetContentClient(content_client_.get()); |
251 old_browser_client_ = SetBrowserClientForTesting(host_.get()); | 280 old_browser_client_ = SetBrowserClientForTesting(host_.get()); |
252 } | 281 } |
253 | 282 |
254 virtual ~MediaStreamDispatcherHostTest() { | 283 virtual ~MediaStreamDispatcherHostTest() { |
255 } | 284 } |
256 | 285 |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
410 } | 439 } |
411 | 440 |
412 void AddSourceIdConstraint(const std::string& source_id, | 441 void AddSourceIdConstraint(const std::string& source_id, |
413 StreamOptions::Constraints* constraints) { | 442 StreamOptions::Constraints* constraints) { |
414 constraints->push_back(StreamOptions::Constraint(kMediaStreamSourceInfoId, | 443 constraints->push_back(StreamOptions::Constraint(kMediaStreamSourceInfoId, |
415 source_id)); | 444 source_id)); |
416 } | 445 } |
417 | 446 |
418 scoped_refptr<MockMediaStreamDispatcherHost> host_; | 447 scoped_refptr<MockMediaStreamDispatcherHost> host_; |
419 scoped_ptr<media::AudioManager> audio_manager_; | 448 scoped_ptr<media::AudioManager> audio_manager_; |
420 scoped_ptr<MediaStreamManager> media_stream_manager_; | 449 scoped_ptr<MediaStreamManagerForTest> media_stream_manager_; |
421 ContentBrowserClient* old_browser_client_; | 450 ContentBrowserClient* old_browser_client_; |
422 scoped_ptr<ContentClient> content_client_; | 451 scoped_ptr<ContentClient> content_client_; |
423 content::TestBrowserThreadBundle thread_bundle_; | 452 content::TestBrowserThreadBundle thread_bundle_; |
424 content::TestBrowserContext browser_context_; | 453 content::TestBrowserContext browser_context_; |
425 media::AudioDeviceNames physical_audio_devices_; | 454 media::AudioDeviceNames physical_audio_devices_; |
426 media::VideoCaptureDevice::Names physical_video_devices_; | 455 media::VideoCaptureDevice::Names physical_video_devices_; |
427 GURL origin_; | 456 GURL origin_; |
428 media::FakeVideoCaptureDeviceFactory* video_capture_device_factory_; | 457 media::FakeVideoCaptureDeviceFactory* video_capture_device_factory_; |
429 }; | 458 }; |
430 | 459 |
(...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
887 EXPECT_TRUE(DoesContainLabels(host_->enumerated_devices_)); | 916 EXPECT_TRUE(DoesContainLabels(host_->enumerated_devices_)); |
888 } | 917 } |
889 | 918 |
890 TEST_F(MediaStreamDispatcherHostTest, EnumerateVideoDevices) { | 919 TEST_F(MediaStreamDispatcherHostTest, EnumerateVideoDevices) { |
891 EnumerateDevicesAndWaitForResult(kRenderId, kPageRequestId, | 920 EnumerateDevicesAndWaitForResult(kRenderId, kPageRequestId, |
892 MEDIA_DEVICE_VIDEO_CAPTURE); | 921 MEDIA_DEVICE_VIDEO_CAPTURE); |
893 EXPECT_TRUE(DoesContainLabels(host_->enumerated_devices_)); | 922 EXPECT_TRUE(DoesContainLabels(host_->enumerated_devices_)); |
894 } | 923 } |
895 | 924 |
896 TEST_F(MediaStreamDispatcherHostTest, EnumerateAudioDevicesNoAccess) { | 925 TEST_F(MediaStreamDispatcherHostTest, EnumerateAudioDevicesNoAccess) { |
897 MockResourceContext* mock_resource_context = | 926 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, | 927 EnumerateDevicesAndWaitForResult(kRenderId, kPageRequestId, |
901 MEDIA_DEVICE_AUDIO_CAPTURE); | 928 MEDIA_DEVICE_AUDIO_CAPTURE); |
902 EXPECT_TRUE(DoesNotContainLabels(host_->enumerated_devices_)); | 929 EXPECT_TRUE(DoesNotContainLabels(host_->enumerated_devices_)); |
903 } | 930 } |
904 | 931 |
905 TEST_F(MediaStreamDispatcherHostTest, EnumerateVideoDevicesNoAccess) { | 932 TEST_F(MediaStreamDispatcherHostTest, EnumerateVideoDevicesNoAccess) { |
906 MockResourceContext* mock_resource_context = | 933 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, | 934 EnumerateDevicesAndWaitForResult(kRenderId, kPageRequestId, |
910 MEDIA_DEVICE_VIDEO_CAPTURE); | 935 MEDIA_DEVICE_VIDEO_CAPTURE); |
911 EXPECT_TRUE(DoesNotContainLabels(host_->enumerated_devices_)); | 936 EXPECT_TRUE(DoesNotContainLabels(host_->enumerated_devices_)); |
912 } | 937 } |
913 | 938 |
914 }; // namespace content | 939 }; // namespace content |
OLD | NEW |