Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(311)

Side by Side Diff: content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc

Issue 483523006: Check all settings when checking mic and camera access (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Build fix for Android. Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698