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

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

Issue 2784433002: Ensures that audio tasks cannot run after AudioManager is deleted. (Closed)
Patch Set: rebase Created 3 years, 7 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 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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698