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 |