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

Unified Diff: media/audio/audio_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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/audio/audio_manager_base.cc ('k') | media/audio/audio_output_controller_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/audio_manager_unittest.cc
diff --git a/media/audio/audio_manager_unittest.cc b/media/audio/audio_manager_unittest.cc
index dd58ffee8237a953a57aef357f6c6e657cca09a0..1e100b4a183b8a136b6a0ebc043a7ebd0cd8d8d6 100644
--- a/media/audio/audio_manager_unittest.cc
+++ b/media/audio/audio_manager_unittest.cc
@@ -24,6 +24,7 @@
#include "media/audio/audio_unittest_util.h"
#include "media/audio/fake_audio_log_factory.h"
#include "media/audio/fake_audio_manager.h"
+#include "media/audio/test_audio_thread.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -38,6 +39,7 @@
#if defined(USE_PULSEAUDIO)
#include "media/audio/pulse/audio_manager_pulse.h"
+#include "media/audio/pulse/pulse_util.h"
#endif // defined(USE_PULSEAUDIO)
#if defined(USE_CRAS)
@@ -54,32 +56,34 @@ namespace {
template <typename T>
struct TestAudioManagerFactory {
- static ScopedAudioManagerPtr Create(AudioLogFactory* audio_log_factory) {
- return ScopedAudioManagerPtr(new T(base::ThreadTaskRunnerHandle::Get(),
- base::ThreadTaskRunnerHandle::Get(),
- audio_log_factory));
+ static std::unique_ptr<AudioManager> Create(
+ AudioLogFactory* audio_log_factory) {
+ return base::MakeUnique<T>(base::MakeUnique<TestAudioThread>(),
+ audio_log_factory);
}
};
#if defined(USE_PULSEAUDIO)
template <>
struct TestAudioManagerFactory<AudioManagerPulse> {
- static ScopedAudioManagerPtr Create(AudioLogFactory* audio_log_factory) {
- std::unique_ptr<AudioManagerPulse, AudioManagerDeleter> manager(
- new AudioManagerPulse(base::ThreadTaskRunnerHandle::Get(),
- base::ThreadTaskRunnerHandle::Get(),
- audio_log_factory));
- if (!manager->Init())
- manager.reset();
- return std::move(manager);
+ static std::unique_ptr<AudioManager> Create(
+ AudioLogFactory* audio_log_factory) {
+ pa_threaded_mainloop* pa_mainloop = nullptr;
+ pa_context* pa_context = nullptr;
+ if (!pulse::InitPulse(&pa_mainloop, &pa_context))
+ return nullptr;
+ return base::MakeUnique<AudioManagerPulse>(
+ base::MakeUnique<TestAudioThread>(), audio_log_factory, pa_mainloop,
+ pa_context);
}
};
#endif // defined(USE_PULSEAUDIO)
template <>
struct TestAudioManagerFactory<std::nullptr_t> {
- static ScopedAudioManagerPtr Create(AudioLogFactory* audio_log_factory) {
- return AudioManager::CreateForTesting(base::ThreadTaskRunnerHandle::Get());
+ static std::unique_ptr<AudioManager> Create(
+ AudioLogFactory* audio_log_factory) {
+ return AudioManager::CreateForTesting(base::MakeUnique<TestAudioThread>());
}
};
@@ -234,7 +238,7 @@ class AudioManagerTest : public ::testing::Test {
protected:
AudioManagerTest() { CreateAudioManagerForTesting(); }
- ~AudioManagerTest() override {}
+ ~AudioManagerTest() override { audio_manager_->Shutdown(); }
// Helper method which verifies that the device list starts with a valid
// default record followed by non-default device names.
@@ -331,8 +335,10 @@ class AudioManagerTest : public ::testing::Test {
// Only one AudioManager may exist at a time, so destroy the one we're
// currently holding before creating a new one.
// Flush the message loop to run any shutdown tasks posted by AudioManager.
- audio_manager_.reset();
- base::RunLoop().RunUntilIdle();
+ if (audio_manager_) {
+ audio_manager_->Shutdown();
+ audio_manager_.reset();
+ }
audio_manager_ =
TestAudioManagerFactory<T>::Create(&fake_audio_log_factory_);
@@ -347,7 +353,7 @@ class AudioManagerTest : public ::testing::Test {
base::TestMessageLoop message_loop_;
FakeAudioLogFactory fake_audio_log_factory_;
- ScopedAudioManagerPtr audio_manager_;
+ std::unique_ptr<AudioManager> audio_manager_;
std::unique_ptr<AudioDeviceInfoAccessorForTests> device_info_accessor_;
#if defined(USE_CRAS)
@@ -583,11 +589,9 @@ class TestAudioManager : public FakeAudioManager {
// Default input is input1.
// Default output is output2.
public:
- TestAudioManager(
- scoped_refptr<base::SingleThreadTaskRunner> task_runner,
- scoped_refptr<base::SingleThreadTaskRunner> worker_task_runner,
- AudioLogFactory* audio_log_factory)
- : FakeAudioManager(task_runner, worker_task_runner, audio_log_factory) {}
+ TestAudioManager(std::unique_ptr<AudioThread> audio_thread,
+ AudioLogFactory* audio_log_factory)
+ : FakeAudioManager(std::move(audio_thread), audio_log_factory) {}
std::string GetDefaultOutputDeviceID() override { return "output4"; }
« no previous file with comments | « media/audio/audio_manager_base.cc ('k') | media/audio/audio_output_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698