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 |