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

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

Issue 562263002: Check media permissions through RenderFrameHostDelegate. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@render_frame_get_sources
Patch Set: Rebase 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
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 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
OLDNEW
« no previous file with comments | « content/browser/frame_host/render_frame_host_delegate.cc ('k') | content/browser/renderer_host/media/media_stream_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698