| Index: components/test_runner/mock_web_speech_recognizer.cc
|
| diff --git a/components/test_runner/mock_web_speech_recognizer.cc b/components/test_runner/mock_web_speech_recognizer.cc
|
| index 880152a9c3ef9fe09d0a0954d7e56a890e14d66b..9504feab97598ea15e17e3312dec5d44961825bd 100644
|
| --- a/components/test_runner/mock_web_speech_recognizer.cc
|
| +++ b/components/test_runner/mock_web_speech_recognizer.cc
|
| @@ -108,6 +108,28 @@ class ErrorTask : public MockWebSpeechRecognizer::Task {
|
| DISALLOW_COPY_AND_ASSIGN(ErrorTask);
|
| };
|
|
|
| +// Task for tidying up after recognition task has ended.
|
| +class EndedTask : public MockWebSpeechRecognizer::Task {
|
| + public:
|
| + EndedTask(MockWebSpeechRecognizer* mock,
|
| + blink::WebSpeechRecognitionHandle handle)
|
| + : MockWebSpeechRecognizer::Task(mock), handle_(handle) {}
|
| +
|
| + ~EndedTask() override {}
|
| +
|
| + void run() override {
|
| + // Reset recognizer's handle if it hasn't been replaced.
|
| + if (recognizer_->Handle() == handle_)
|
| + recognizer_->Handle().reset();
|
| + handle_.reset();
|
| + }
|
| +
|
| + private:
|
| + blink::WebSpeechRecognitionHandle handle_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(EndedTask);
|
| +};
|
| +
|
| } // namespace
|
|
|
| MockWebSpeechRecognizer::MockWebSpeechRecognizer()
|
| @@ -155,6 +177,7 @@ void MockWebSpeechRecognizer::start(
|
| new ClientCallTask(this, &blink::WebSpeechRecognizerClient::didEndAudio));
|
| task_queue_.push_back(
|
| new ClientCallTask(this, &blink::WebSpeechRecognizerClient::didEnd));
|
| + task_queue_.push_back(new EndedTask(this, handle_));
|
|
|
| StartTaskQueue();
|
| }
|
| @@ -179,6 +202,8 @@ void MockWebSpeechRecognizer::abort(
|
| was_aborted_ = true;
|
| task_queue_.push_back(
|
| new ClientCallTask(this, &blink::WebSpeechRecognizerClient::didEnd));
|
| + task_queue_.push_back(new EndedTask(this, handle_));
|
| +
|
| StartTaskQueue();
|
| }
|
|
|
| @@ -216,6 +241,8 @@ void MockWebSpeechRecognizer::SetError(const blink::WebString& error,
|
| task_queue_.push_back(new ErrorTask(this, code, message));
|
| task_queue_.push_back(
|
| new ClientCallTask(this, &blink::WebSpeechRecognizerClient::didEnd));
|
| + task_queue_.push_back(new EndedTask(this, handle_));
|
| +
|
| StartTaskQueue();
|
| }
|
|
|
|
|