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

Unified Diff: content/browser/speech/speech_recognizer_impl_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
Index: content/browser/speech/speech_recognizer_impl_unittest.cc
diff --git a/content/browser/speech/speech_recognizer_impl_unittest.cc b/content/browser/speech/speech_recognizer_impl_unittest.cc
index 0acd84b68610fbbcf763fa0a4eff3c54c7dffcaf..e91f0677078533abd63ee2f52c5ec805c907cdcf 100644
--- a/content/browser/speech/speech_recognizer_impl_unittest.cc
+++ b/content/browser/speech/speech_recognizer_impl_unittest.cc
@@ -23,6 +23,7 @@
#include "media/audio/fake_audio_output_stream.h"
#include "media/audio/mock_audio_manager.h"
#include "media/audio/test_audio_input_controller_factory.h"
+#include "media/audio/test_audio_thread.h"
#include "media/base/audio_bus.h"
#include "media/base/test_helpers.h"
#include "net/base/net_errors.h"
@@ -43,8 +44,7 @@ class SpeechRecognizerImplTest : public SpeechRecognitionEventListener,
public testing::Test {
public:
SpeechRecognizerImplTest()
- : audio_thread_("SpeechAudioThread"),
- recognition_started_(false),
+ : recognition_started_(false),
recognition_ended_(false),
result_received_(false),
audio_started_(false),
@@ -65,9 +65,8 @@ class SpeechRecognizerImplTest : public SpeechRecognitionEventListener,
const int kTestingSessionId = 1;
- audio_thread_.StartAndWaitForTesting();
- audio_manager_.reset(
- new media::MockAudioManager(audio_thread_.task_runner()));
+ audio_manager_.reset(new media::MockAudioManager(
+ base::MakeUnique<media::TestAudioThread>(true)));
audio_manager_->SetInputStreamParameters(
media::AudioParameters::UnavailableDeviceParams());
audio_system_ = media::AudioSystemImpl::Create(audio_manager_.get());
@@ -90,12 +89,7 @@ class SpeechRecognizerImplTest : public SpeechRecognitionEventListener,
audio_bus_->Zero();
}
- ~SpeechRecognizerImplTest() override {
- // Deleting |audio_manager_| on audio thread.
- audio_system_.reset();
- audio_manager_.reset();
- audio_thread_.Stop();
- }
+ ~SpeechRecognizerImplTest() override { audio_manager_->Shutdown(); }
void CheckEventsConsistency() {
// Note: "!x || y" == "x implies y".
@@ -208,9 +202,9 @@ class SpeechRecognizerImplTest : public SpeechRecognitionEventListener,
void WaitForAudioThreadToPostDeviceInfo() {
media::WaitableMessageLoopEvent event;
- audio_thread_.task_runner()->PostTaskAndReply(
+ audio_manager_->GetTaskRunner()->PostTaskAndReply(
FROM_HERE, base::Bind(&base::DoNothing), event.GetClosure());
- // Runs the loop and waits for the |audio_thread_| to call event's closure,
+ // Runs the loop and waits for the audio thread to call event's closure,
// which means AudioSystem reply containing device parameters is already
// queued on the main thread.
event.RunAndWait();
@@ -219,8 +213,7 @@ class SpeechRecognizerImplTest : public SpeechRecognitionEventListener,
protected:
TestBrowserThreadBundle thread_bundle_;
scoped_refptr<SpeechRecognizerImpl> recognizer_;
- base::Thread audio_thread_;
- media::MockAudioManager::UniquePtr audio_manager_;
+ std::unique_ptr<media::MockAudioManager> audio_manager_;
std::unique_ptr<media::AudioSystem> audio_system_;
bool recognition_started_;
bool recognition_ended_;
@@ -261,7 +254,7 @@ TEST_F(SpeechRecognizerImplTest, StopBeforeDeviceInfoReceived) {
base::WaitableEvent::InitialState::NOT_SIGNALED);
// Block audio thread.
- audio_thread_.task_runner()->PostTask(
+ audio_manager_->GetTaskRunner()->PostTask(
FROM_HERE,
base::Bind(&base::WaitableEvent::Wait, base::Unretained(&event)));
@@ -289,7 +282,7 @@ TEST_F(SpeechRecognizerImplTest, CancelBeforeDeviceInfoReceived) {
base::WaitableEvent::InitialState::NOT_SIGNALED);
// Block audio thread.
- audio_thread_.task_runner()->PostTask(
+ audio_manager_->GetTaskRunner()->PostTask(
FROM_HERE,
base::Bind(&base::WaitableEvent::Wait, base::Unretained(&event)));
« no previous file with comments | « content/browser/speech/speech_recognition_browsertest.cc ('k') | content/public/browser/content_browser_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698