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

Unified Diff: components/test_runner/mock_web_speech_recognizer.cc

Issue 2525933002: Handle overlapping uses of MockWebSpeechRecognizer (Closed)
Patch Set: address style issues Created 4 years, 1 month 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: 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 d186df199cb1fac189b06e80365e4fd1e3137566..f2527c1e8d44a82ff69a7235fb53d65c40c28473 100644
--- a/components/test_runner/mock_web_speech_recognizer.cc
+++ b/components/test_runner/mock_web_speech_recognizer.cc
@@ -120,18 +120,41 @@ class EndedTask : public MockWebSpeechRecognizer::Task {
void run() override {
blink::WebSpeechRecognitionHandle handle = recognizer_->Handle();
- recognizer_->Handle().reset();
- recognizer_->Client()->didEnd(handle);
+ blink::WebSpeechRecognizerClient* client = recognizer_->Client();
+ recognizer_->SetClientContext(blink::WebSpeechRecognitionHandle(), nullptr);
+ client->didEnd(handle);
}
private:
DISALLOW_COPY_AND_ASSIGN(EndedTask);
};
+// Task for switching processing to the next (handle, client) pairing.
+class SwitchClientHandleTask : public MockWebSpeechRecognizer::Task {
+ public:
+ SwitchClientHandleTask(MockWebSpeechRecognizer* mock,
+ const blink::WebSpeechRecognitionHandle& handle,
+ blink::WebSpeechRecognizerClient* client)
+ : MockWebSpeechRecognizer::Task(mock), handle_(handle), client_(client) {}
+
+ ~SwitchClientHandleTask() override {}
+
+ bool isNewContextTask() const override { return true; }
+
+ void run() override { recognizer_->SetClientContext(handle_, client_); }
+
+ private:
+ const blink::WebSpeechRecognitionHandle handle_;
+ blink::WebSpeechRecognizerClient* client_;
+
+ DISALLOW_COPY_AND_ASSIGN(SwitchClientHandleTask);
+};
+
} // namespace
MockWebSpeechRecognizer::MockWebSpeechRecognizer()
- : was_aborted_(false),
+ : client_(nullptr),
+ was_aborted_(false),
task_queue_running_(false),
delegate_(0),
weak_factory_(this) {}
@@ -140,17 +163,32 @@ MockWebSpeechRecognizer::~MockWebSpeechRecognizer() {
ClearTaskQueue();
}
+bool MockWebSpeechRecognizer::Task::isNewContextTask() const {
+ return false;
+}
+
void MockWebSpeechRecognizer::SetDelegate(WebTestDelegate* delegate) {
delegate_ = delegate;
}
+void MockWebSpeechRecognizer::SetClientContext(
+ const blink::WebSpeechRecognitionHandle& handle,
+ blink::WebSpeechRecognizerClient* client) {
+ handle_ = handle;
+ client_ = client;
+}
+
void MockWebSpeechRecognizer::start(
const blink::WebSpeechRecognitionHandle& handle,
const blink::WebSpeechRecognitionParams& params,
blink::WebSpeechRecognizerClient* client) {
was_aborted_ = false;
- handle_ = handle;
- client_ = client;
+ if (!client_) {
+ handle_ = handle;
+ client_ = client;
+ } else {
+ task_queue_.push_back(new SwitchClientHandleTask(this, handle, client));
+ }
task_queue_.push_back(
new ClientCallTask(this, &blink::WebSpeechRecognizerClient::didStart));
@@ -183,8 +221,7 @@ void MockWebSpeechRecognizer::start(
void MockWebSpeechRecognizer::stop(
const blink::WebSpeechRecognitionHandle& handle,
blink::WebSpeechRecognizerClient* client) {
- handle_ = handle;
- client_ = client;
+ SetClientContext(handle, client);
// FIXME: Implement.
NOTREACHED();
@@ -193,11 +230,9 @@ void MockWebSpeechRecognizer::stop(
void MockWebSpeechRecognizer::abort(
const blink::WebSpeechRecognitionHandle& handle,
blink::WebSpeechRecognizerClient* client) {
- handle_ = handle;
- client_ = client;
-
- ClearTaskQueue();
was_aborted_ = true;
+ ClearTaskQueue();
+ task_queue_.push_back(new SwitchClientHandleTask(this, handle, client));
task_queue_.push_back(new EndedTask(this));
StartTaskQueue();
@@ -248,10 +283,14 @@ void MockWebSpeechRecognizer::StartTaskQueue() {
void MockWebSpeechRecognizer::ClearTaskQueue() {
while (!task_queue_.empty()) {
+ Task* task = task_queue_.front();
+ if (task->isNewContextTask())
+ break;
delete task_queue_.front();
task_queue_.pop_front();
}
- task_queue_running_ = false;
+ if (task_queue_.empty())
+ task_queue_running_ = false;
}
void MockWebSpeechRecognizer::PostRunTaskFromQueue() {

Powered by Google App Engine
This is Rietveld 408576698