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_manager.h" | 5 #include "content/browser/renderer_host/media/media_devices_manager.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
11 #include "base/macros.h" | 11 #include "base/macros.h" |
12 #include "base/memory/ref_counted.h" | 12 #include "base/memory/ref_counted.h" |
13 #include "base/run_loop.h" | 13 #include "base/run_loop.h" |
14 #include "base/strings/string_number_conversions.h" | 14 #include "base/strings/string_number_conversions.h" |
15 #include "base/threading/thread_task_runner_handle.h" | 15 #include "base/threading/thread_task_runner_handle.h" |
16 #include "content/browser/renderer_host/media/in_process_video_capture_provider.
h" | 16 #include "content/browser/renderer_host/media/in_process_video_capture_provider.
h" |
17 #include "content/browser/renderer_host/media/video_capture_manager.h" | 17 #include "content/browser/renderer_host/media/video_capture_manager.h" |
18 #include "content/public/test/test_browser_thread_bundle.h" | 18 #include "content/public/test/test_browser_thread_bundle.h" |
19 #include "media/audio/audio_device_name.h" | 19 #include "media/audio/audio_device_name.h" |
20 #include "media/audio/audio_system_impl.h" | 20 #include "media/audio/audio_system_impl.h" |
21 #include "media/audio/fake_audio_log_factory.h" | 21 #include "media/audio/fake_audio_log_factory.h" |
22 #include "media/audio/fake_audio_manager.h" | 22 #include "media/audio/fake_audio_manager.h" |
| 23 #include "media/audio/test_audio_thread.h" |
23 #include "media/capture/video/fake_video_capture_device_factory.h" | 24 #include "media/capture/video/fake_video_capture_device_factory.h" |
24 #include "media/capture/video/video_capture_system_impl.h" | 25 #include "media/capture/video/video_capture_system_impl.h" |
25 #include "testing/gmock/include/gmock/gmock.h" | 26 #include "testing/gmock/include/gmock/gmock.h" |
26 #include "testing/gtest/include/gtest/gtest.h" | 27 #include "testing/gtest/include/gtest/gtest.h" |
27 | 28 |
28 using testing::_; | 29 using testing::_; |
29 using testing::SaveArg; | 30 using testing::SaveArg; |
30 | 31 |
31 namespace content { | 32 namespace content { |
32 | 33 |
33 namespace { | 34 namespace { |
34 | 35 |
35 // Number of client enumerations to simulate on each test run. | 36 // Number of client enumerations to simulate on each test run. |
36 // This allows testing that a single call to low-level enumeration functions | 37 // This allows testing that a single call to low-level enumeration functions |
37 // is performed when cache is enabled, regardless of the number of client calls. | 38 // is performed when cache is enabled, regardless of the number of client calls. |
38 const int kNumCalls = 3; | 39 const int kNumCalls = 3; |
39 | 40 |
40 // This class mocks the audio manager and overrides some methods to ensure that | 41 // This class mocks the audio manager and overrides some methods to ensure that |
41 // we can run simulate device changes. | 42 // we can run simulate device changes. |
42 class MockAudioManager : public media::FakeAudioManager { | 43 class MockAudioManager : public media::FakeAudioManager { |
43 public: | 44 public: |
44 MockAudioManager() | 45 MockAudioManager() |
45 : FakeAudioManager(base::ThreadTaskRunnerHandle::Get(), | 46 : FakeAudioManager(base::MakeUnique<media::TestAudioThread>(), |
46 base::ThreadTaskRunnerHandle::Get(), | |
47 &fake_audio_log_factory_), | 47 &fake_audio_log_factory_), |
48 num_output_devices_(2), | 48 num_output_devices_(2), |
49 num_input_devices_(2) {} | 49 num_input_devices_(2) {} |
50 ~MockAudioManager() override {} | 50 ~MockAudioManager() override {} |
51 | 51 |
52 MOCK_METHOD1(MockGetAudioInputDeviceNames, void(media::AudioDeviceNames*)); | 52 MOCK_METHOD1(MockGetAudioInputDeviceNames, void(media::AudioDeviceNames*)); |
53 MOCK_METHOD1(MockGetAudioOutputDeviceNames, void(media::AudioDeviceNames*)); | 53 MOCK_METHOD1(MockGetAudioOutputDeviceNames, void(media::AudioDeviceNames*)); |
54 | 54 |
55 void GetAudioInputDeviceNames( | 55 void GetAudioInputDeviceNames( |
56 media::AudioDeviceNames* device_names) override { | 56 media::AudioDeviceNames* device_names) override { |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
123 void(MediaDeviceType, const MediaDeviceInfoArray&)); | 123 void(MediaDeviceType, const MediaDeviceInfoArray&)); |
124 }; | 124 }; |
125 | 125 |
126 } // namespace | 126 } // namespace |
127 | 127 |
128 class MediaDevicesManagerTest : public ::testing::Test { | 128 class MediaDevicesManagerTest : public ::testing::Test { |
129 public: | 129 public: |
130 MediaDevicesManagerTest() | 130 MediaDevicesManagerTest() |
131 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), | 131 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), |
132 video_capture_device_factory_(nullptr) {} | 132 video_capture_device_factory_(nullptr) {} |
133 ~MediaDevicesManagerTest() override {} | 133 ~MediaDevicesManagerTest() override { audio_manager_->Shutdown(); } |
134 | 134 |
135 MOCK_METHOD1(MockCallback, void(const MediaDeviceEnumeration&)); | 135 MOCK_METHOD1(MockCallback, void(const MediaDeviceEnumeration&)); |
136 | 136 |
137 void EnumerateCallback(base::RunLoop* run_loop, | 137 void EnumerateCallback(base::RunLoop* run_loop, |
138 const MediaDeviceEnumeration& result) { | 138 const MediaDeviceEnumeration& result) { |
139 MockCallback(result); | 139 MockCallback(result); |
140 run_loop->Quit(); | 140 run_loop->Quit(); |
141 } | 141 } |
142 | 142 |
143 protected: | 143 protected: |
(...skipping 20 matching lines...) Expand all Loading... |
164 type, MediaDevicesManager::CachePolicy::SYSTEM_MONITOR); | 164 type, MediaDevicesManager::CachePolicy::SYSTEM_MONITOR); |
165 } | 165 } |
166 | 166 |
167 // Must outlive MediaDevicesManager as ~MediaDevicesManager() verifies it's | 167 // Must outlive MediaDevicesManager as ~MediaDevicesManager() verifies it's |
168 // running on the IO thread. | 168 // running on the IO thread. |
169 TestBrowserThreadBundle thread_bundle_; | 169 TestBrowserThreadBundle thread_bundle_; |
170 | 170 |
171 std::unique_ptr<MediaDevicesManager> media_devices_manager_; | 171 std::unique_ptr<MediaDevicesManager> media_devices_manager_; |
172 scoped_refptr<VideoCaptureManager> video_capture_manager_; | 172 scoped_refptr<VideoCaptureManager> video_capture_manager_; |
173 MockVideoCaptureDeviceFactory* video_capture_device_factory_; | 173 MockVideoCaptureDeviceFactory* video_capture_device_factory_; |
174 std::unique_ptr<MockAudioManager, media::AudioManagerDeleter> audio_manager_; | 174 std::unique_ptr<MockAudioManager> audio_manager_; |
175 std::unique_ptr<media::AudioSystem> audio_system_; | 175 std::unique_ptr<media::AudioSystem> audio_system_; |
176 | 176 |
177 private: | 177 private: |
178 DISALLOW_COPY_AND_ASSIGN(MediaDevicesManagerTest); | 178 DISALLOW_COPY_AND_ASSIGN(MediaDevicesManagerTest); |
179 }; | 179 }; |
180 | 180 |
181 TEST_F(MediaDevicesManagerTest, EnumerateNoCacheAudioInput) { | 181 TEST_F(MediaDevicesManagerTest, EnumerateNoCacheAudioInput) { |
182 EXPECT_CALL(*audio_manager_, MockGetAudioInputDeviceNames(_)) | 182 EXPECT_CALL(*audio_manager_, MockGetAudioInputDeviceNames(_)) |
183 .Times(kNumCalls); | 183 .Times(kNumCalls); |
184 EXPECT_CALL(*video_capture_device_factory_, MockGetDeviceDescriptors()) | 184 EXPECT_CALL(*video_capture_device_factory_, MockGetDeviceDescriptors()) |
(...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
576 media_devices_manager_->OnDevicesChanged(base::SystemMonitor::DEVTYPE_AUDIO); | 576 media_devices_manager_->OnDevicesChanged(base::SystemMonitor::DEVTYPE_AUDIO); |
577 media_devices_manager_->OnDevicesChanged( | 577 media_devices_manager_->OnDevicesChanged( |
578 base::SystemMonitor::DEVTYPE_VIDEO_CAPTURE); | 578 base::SystemMonitor::DEVTYPE_VIDEO_CAPTURE); |
579 base::RunLoop().RunUntilIdle(); | 579 base::RunLoop().RunUntilIdle(); |
580 EXPECT_EQ(num_audio_input_devices, notification_all_audio_input.size()); | 580 EXPECT_EQ(num_audio_input_devices, notification_all_audio_input.size()); |
581 EXPECT_EQ(num_video_input_devices, notification_all_video_input.size()); | 581 EXPECT_EQ(num_video_input_devices, notification_all_video_input.size()); |
582 EXPECT_EQ(num_audio_output_devices, notification_all_audio_output.size()); | 582 EXPECT_EQ(num_audio_output_devices, notification_all_audio_output.size()); |
583 } | 583 } |
584 | 584 |
585 } // namespace content | 585 } // namespace content |
OLD | NEW |