| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "content/browser/renderer_host/media/media_devices_dispatcher_host.h" | 5 #include "content/browser/renderer_host/media/media_devices_dispatcher_host.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <queue> | 10 #include <queue> |
| (...skipping 29 matching lines...) Expand all Loading... |
| 40 using testing::InvokeWithoutArgs; | 40 using testing::InvokeWithoutArgs; |
| 41 | 41 |
| 42 namespace content { | 42 namespace content { |
| 43 | 43 |
| 44 namespace { | 44 namespace { |
| 45 | 45 |
| 46 const int kProcessId = 5; | 46 const int kProcessId = 5; |
| 47 const int kRenderId = 6; | 47 const int kRenderId = 6; |
| 48 const size_t kNumFakeVideoDevices = 3; | 48 const size_t kNumFakeVideoDevices = 3; |
| 49 const char kDefaultVideoDeviceID[] = "/dev/video2"; | 49 const char kDefaultVideoDeviceID[] = "/dev/video2"; |
| 50 const char kDefaultAudioDeviceID[] = "fake_audio_input_2"; |
| 50 | 51 |
| 51 void PhysicalDevicesEnumerated(base::Closure quit_closure, | 52 void PhysicalDevicesEnumerated(base::Closure quit_closure, |
| 52 MediaDeviceEnumeration* out, | 53 MediaDeviceEnumeration* out, |
| 53 const MediaDeviceEnumeration& enumeration) { | 54 const MediaDeviceEnumeration& enumeration) { |
| 54 *out = enumeration; | 55 *out = enumeration; |
| 55 quit_closure.Run(); | 56 quit_closure.Run(); |
| 56 } | 57 } |
| 57 | 58 |
| 58 class MockMediaDevicesListener : public ::mojom::MediaDevicesListener { | 59 class MockMediaDevicesListener : public ::mojom::MediaDevicesListener { |
| 59 public: | 60 public: |
| (...skipping 13 matching lines...) Expand all Loading... |
| 73 } // namespace | 74 } // namespace |
| 74 | 75 |
| 75 class MediaDevicesDispatcherHostTest : public testing::TestWithParam<GURL> { | 76 class MediaDevicesDispatcherHostTest : public testing::TestWithParam<GURL> { |
| 76 public: | 77 public: |
| 77 MediaDevicesDispatcherHostTest() | 78 MediaDevicesDispatcherHostTest() |
| 78 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), | 79 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), |
| 79 origin_(GetParam()) { | 80 origin_(GetParam()) { |
| 80 // Make sure we use fake devices to avoid long delays. | 81 // Make sure we use fake devices to avoid long delays. |
| 81 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 82 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| 82 switches::kUseFakeDeviceForMediaStream, | 83 switches::kUseFakeDeviceForMediaStream, |
| 83 base::StringPrintf("device-count=%zu, video-input-default-id=%s", | 84 base::StringPrintf("device-count=%zu, video-input-default-id=%s, " |
| 84 kNumFakeVideoDevices, kDefaultVideoDeviceID)); | 85 "audio-input-default-id=%s", |
| 86 kNumFakeVideoDevices, kDefaultVideoDeviceID, |
| 87 kDefaultAudioDeviceID)); |
| 85 audio_manager_.reset(new media::MockAudioManager( | 88 audio_manager_.reset(new media::MockAudioManager( |
| 86 base::MakeUnique<media::TestAudioThread>())); | 89 base::MakeUnique<media::TestAudioThread>())); |
| 87 audio_system_ = media::AudioSystemImpl::Create(audio_manager_.get()); | 90 audio_system_ = media::AudioSystemImpl::Create(audio_manager_.get()); |
| 88 media_stream_manager_ = | 91 media_stream_manager_ = |
| 89 base::MakeUnique<MediaStreamManager>(audio_system_.get()); | 92 base::MakeUnique<MediaStreamManager>(audio_system_.get()); |
| 90 | 93 |
| 91 host_ = base::MakeUnique<MediaDevicesDispatcherHost>( | 94 host_ = base::MakeUnique<MediaDevicesDispatcherHost>( |
| 92 kProcessId, kRenderId, browser_context_.GetMediaDeviceIDSalt(), | 95 kProcessId, kRenderId, browser_context_.GetMediaDeviceIDSalt(), |
| 93 media_stream_manager_.get()); | 96 media_stream_manager_.get()); |
| 94 host_->SetSecurityOriginForTesting(origin_); | 97 host_->SetSecurityOriginForTesting(origin_); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 110 ASSERT_GT(physical_devices_[MEDIA_DEVICE_TYPE_AUDIO_INPUT].size(), 0u); | 113 ASSERT_GT(physical_devices_[MEDIA_DEVICE_TYPE_AUDIO_INPUT].size(), 0u); |
| 111 ASSERT_GT(physical_devices_[MEDIA_DEVICE_TYPE_VIDEO_INPUT].size(), 0u); | 114 ASSERT_GT(physical_devices_[MEDIA_DEVICE_TYPE_VIDEO_INPUT].size(), 0u); |
| 112 ASSERT_GT(physical_devices_[MEDIA_DEVICE_TYPE_AUDIO_OUTPUT].size(), 0u); | 115 ASSERT_GT(physical_devices_[MEDIA_DEVICE_TYPE_AUDIO_OUTPUT].size(), 0u); |
| 113 } | 116 } |
| 114 | 117 |
| 115 MOCK_METHOD1(UniqueOriginCallback, | 118 MOCK_METHOD1(UniqueOriginCallback, |
| 116 void(const std::vector<std::vector<MediaDeviceInfo>>&)); | 119 void(const std::vector<std::vector<MediaDeviceInfo>>&)); |
| 117 MOCK_METHOD1(ValidOriginCallback, | 120 MOCK_METHOD1(ValidOriginCallback, |
| 118 void(const std::vector<std::vector<MediaDeviceInfo>>&)); | 121 void(const std::vector<std::vector<MediaDeviceInfo>>&)); |
| 119 MOCK_METHOD0(MockVideoInputCapabilitiesCallback, void()); | 122 MOCK_METHOD0(MockVideoInputCapabilitiesCallback, void()); |
| 123 MOCK_METHOD0(MockAudioInputCapabilitiesCallback, void()); |
| 120 | 124 |
| 121 void VideoInputCapabilitiesCallback( | 125 void VideoInputCapabilitiesCallback( |
| 122 std::vector<::mojom::VideoInputDeviceCapabilitiesPtr> capabilities) { | 126 std::vector<::mojom::VideoInputDeviceCapabilitiesPtr> capabilities) { |
| 123 MockVideoInputCapabilitiesCallback(); | 127 MockVideoInputCapabilitiesCallback(); |
| 124 std::string expected_first_device_id = | 128 std::string expected_first_device_id = |
| 125 GetHMACForMediaDeviceID(browser_context_.GetMediaDeviceIDSalt(), | 129 GetHMACForMediaDeviceID(browser_context_.GetMediaDeviceIDSalt(), |
| 126 origin_, kDefaultVideoDeviceID); | 130 origin_, kDefaultVideoDeviceID); |
| 127 EXPECT_EQ(kNumFakeVideoDevices, capabilities.size()); | 131 EXPECT_EQ(kNumFakeVideoDevices, capabilities.size()); |
| 128 EXPECT_EQ(expected_first_device_id, capabilities[0]->device_id); | 132 EXPECT_EQ(expected_first_device_id, capabilities[0]->device_id); |
| 129 for (const auto& capability : capabilities) { | 133 for (const auto& capability : capabilities) { |
| 130 EXPECT_GT(capability->formats.size(), 1u); | 134 EXPECT_GT(capability->formats.size(), 1u); |
| 131 EXPECT_GT(capability->formats[0].frame_size.width(), 1); | 135 EXPECT_GT(capability->formats[0].frame_size.width(), 1); |
| 132 EXPECT_GT(capability->formats[0].frame_size.height(), 1); | 136 EXPECT_GT(capability->formats[0].frame_size.height(), 1); |
| 133 EXPECT_GT(capability->formats[0].frame_rate, 1); | 137 EXPECT_GT(capability->formats[0].frame_rate, 1); |
| 134 EXPECT_GT(capability->formats[1].frame_size.width(), 1); | 138 EXPECT_GT(capability->formats[1].frame_size.width(), 1); |
| 135 EXPECT_GT(capability->formats[1].frame_size.height(), 1); | 139 EXPECT_GT(capability->formats[1].frame_size.height(), 1); |
| 136 EXPECT_GT(capability->formats[1].frame_rate, 1); | 140 EXPECT_GT(capability->formats[1].frame_rate, 1); |
| 137 } | 141 } |
| 138 } | 142 } |
| 139 | 143 |
| 140 void VideoInputCapabilitiesUniqueOriginCallback( | 144 void VideoInputCapabilitiesUniqueOriginCallback( |
| 141 std::vector<::mojom::VideoInputDeviceCapabilitiesPtr> capabilities) { | 145 std::vector<::mojom::VideoInputDeviceCapabilitiesPtr> capabilities) { |
| 142 MockVideoInputCapabilitiesCallback(); | 146 MockVideoInputCapabilitiesCallback(); |
| 143 EXPECT_EQ(0U, capabilities.size()); | 147 EXPECT_EQ(0U, capabilities.size()); |
| 144 } | 148 } |
| 145 | 149 |
| 150 void AudioInputCapabilitiesCallback( |
| 151 std::vector<::mojom::AudioInputDeviceCapabilitiesPtr> capabilities) { |
| 152 MockAudioInputCapabilitiesCallback(); |
| 153 // MediaDevicesManager always returns 3 fake audio input devices. |
| 154 const size_t kNumExpectedEntries = 3; |
| 155 EXPECT_EQ(kNumExpectedEntries, capabilities.size()); |
| 156 std::string expected_first_device_id = |
| 157 GetHMACForMediaDeviceID(browser_context_.GetMediaDeviceIDSalt(), |
| 158 origin_, kDefaultAudioDeviceID); |
| 159 EXPECT_EQ(expected_first_device_id, capabilities[0]->device_id); |
| 160 for (const auto& capability : capabilities) |
| 161 EXPECT_TRUE(capability->parameters.IsValid()); |
| 162 } |
| 163 |
| 146 protected: | 164 protected: |
| 147 void DevicesEnumerated( | 165 void DevicesEnumerated( |
| 148 const base::Closure& closure, | 166 const base::Closure& closure, |
| 149 const std::vector<std::vector<MediaDeviceInfo>>& devices) { | 167 const std::vector<std::vector<MediaDeviceInfo>>& devices) { |
| 150 enumerated_devices_ = devices; | 168 enumerated_devices_ = devices; |
| 151 closure.Run(); | 169 closure.Run(); |
| 152 } | 170 } |
| 153 | 171 |
| 154 void EnumerateDevicesAndWaitForResult(bool enumerate_audio_input, | 172 void EnumerateDevicesAndWaitForResult(bool enumerate_audio_input, |
| 155 bool enumerate_video_input, | 173 bool enumerate_video_input, |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 353 base::RunLoop run_loop; | 371 base::RunLoop run_loop; |
| 354 EXPECT_CALL(*this, MockVideoInputCapabilitiesCallback()) | 372 EXPECT_CALL(*this, MockVideoInputCapabilitiesCallback()) |
| 355 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); | 373 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); |
| 356 host_->GetVideoInputCapabilities( | 374 host_->GetVideoInputCapabilities( |
| 357 base::Bind( | 375 base::Bind( |
| 358 &MediaDevicesDispatcherHostTest::VideoInputCapabilitiesCallback, | 376 &MediaDevicesDispatcherHostTest::VideoInputCapabilitiesCallback, |
| 359 base::Unretained(this))); | 377 base::Unretained(this))); |
| 360 run_loop.Run(); | 378 run_loop.Run(); |
| 361 } | 379 } |
| 362 | 380 |
| 381 TEST_P(MediaDevicesDispatcherHostTest, GetAudioInputCapabilities) { |
| 382 base::RunLoop run_loop; |
| 383 EXPECT_CALL(*this, MockAudioInputCapabilitiesCallback()) |
| 384 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); |
| 385 host_->GetAudioInputCapabilities(base::Bind( |
| 386 &MediaDevicesDispatcherHostTest::AudioInputCapabilitiesCallback, |
| 387 base::Unretained(this))); |
| 388 run_loop.Run(); |
| 389 } |
| 390 |
| 363 INSTANTIATE_TEST_CASE_P(, | 391 INSTANTIATE_TEST_CASE_P(, |
| 364 MediaDevicesDispatcherHostTest, | 392 MediaDevicesDispatcherHostTest, |
| 365 testing::Values(GURL(), GURL("https://test.com"))); | 393 testing::Values(GURL(), GURL("https://test.com"))); |
| 366 }; // namespace content | 394 }; // namespace content |
| OLD | NEW |