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

Side by Side Diff: components/test_runner/mock_web_speech_recognizer.cc

Issue 2525933002: Handle overlapping uses of MockWebSpeechRecognizer (Closed)
Patch Set: add test Created 4 years 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "components/test_runner/mock_web_speech_recognizer.h" 5 #include "components/test_runner/mock_web_speech_recognizer.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 // Task for tidying up after recognition task has ended. 113 // Task for tidying up after recognition task has ended.
114 class EndedTask : public MockWebSpeechRecognizer::Task { 114 class EndedTask : public MockWebSpeechRecognizer::Task {
115 public: 115 public:
116 EndedTask(MockWebSpeechRecognizer* mock) 116 EndedTask(MockWebSpeechRecognizer* mock)
117 : MockWebSpeechRecognizer::Task(mock) {} 117 : MockWebSpeechRecognizer::Task(mock) {}
118 118
119 ~EndedTask() override {} 119 ~EndedTask() override {}
120 120
121 void run() override { 121 void run() override {
122 blink::WebSpeechRecognitionHandle handle = recognizer_->Handle(); 122 blink::WebSpeechRecognitionHandle handle = recognizer_->Handle();
123 recognizer_->Handle().reset(); 123 blink::WebSpeechRecognizerClient* client = recognizer_->Client();
124 recognizer_->Client()->didEnd(handle); 124 recognizer_->SetClientContext(blink::WebSpeechRecognitionHandle(), nullptr);
125 client->didEnd(handle);
125 } 126 }
126 127
127 private: 128 private:
128 DISALLOW_COPY_AND_ASSIGN(EndedTask); 129 DISALLOW_COPY_AND_ASSIGN(EndedTask);
129 }; 130 };
130 131
132 // Task for switching processing to the next (handle, client) pairing.
133 class SwitchClientHandleTask : public MockWebSpeechRecognizer::Task {
134 public:
135 SwitchClientHandleTask(
136 MockWebSpeechRecognizer* mock,
137 const blink::WebSpeechRecognitionHandle& handle,
138 blink::WebSpeechRecognizerClient* client)
139 : MockWebSpeechRecognizer::Task(mock)
140 , handle_(handle)
dmazzoni 2016/11/28 16:58:02 nit: in Chromium code the comma goes at the end of
sof 2016/11/28 21:40:04 Fixed, ran git-cl-format (no PRESUBMIT.py in this
141 , client_(client) {}
142
143 ~SwitchClientHandleTask() override {}
144
145 bool isNewContextTask() const override { return true; }
146
147 void run() override {
148 recognizer_->SetClientContext(handle_, client_);
149 }
150
151 private:
152 const blink::WebSpeechRecognitionHandle handle_;
153 blink::WebSpeechRecognizerClient* client_;
154
155 DISALLOW_COPY_AND_ASSIGN(SwitchClientHandleTask);
156 };
157
131 } // namespace 158 } // namespace
132 159
133 MockWebSpeechRecognizer::MockWebSpeechRecognizer() 160 MockWebSpeechRecognizer::MockWebSpeechRecognizer()
134 : was_aborted_(false), 161 : client_(nullptr),
162 was_aborted_(false),
135 task_queue_running_(false), 163 task_queue_running_(false),
136 delegate_(0), 164 delegate_(0),
137 weak_factory_(this) {} 165 weak_factory_(this) {}
138 166
139 MockWebSpeechRecognizer::~MockWebSpeechRecognizer() { 167 MockWebSpeechRecognizer::~MockWebSpeechRecognizer() {
140 ClearTaskQueue(); 168 ClearTaskQueue();
141 } 169 }
142 170
171 bool MockWebSpeechRecognizer::Task::isNewContextTask() const {
172 return false;
173 }
174
143 void MockWebSpeechRecognizer::SetDelegate(WebTestDelegate* delegate) { 175 void MockWebSpeechRecognizer::SetDelegate(WebTestDelegate* delegate) {
144 delegate_ = delegate; 176 delegate_ = delegate;
145 } 177 }
146 178
179 void MockWebSpeechRecognizer::SetClientContext(
180 const blink::WebSpeechRecognitionHandle& handle,
181 blink::WebSpeechRecognizerClient* client) {
182 handle_ = handle;
dmazzoni 2016/11/28 16:58:02 nit: should be 2 spaces indent
sof 2016/11/28 21:40:04 Done.
183 client_ = client;
dmazzoni 2016/11/28 16:58:02 Can you DCHECK(client_) or is it okay for it to be
sof 2016/11/28 21:40:04 There's no separate method provided for clearing,
184 }
185
147 void MockWebSpeechRecognizer::start( 186 void MockWebSpeechRecognizer::start(
148 const blink::WebSpeechRecognitionHandle& handle, 187 const blink::WebSpeechRecognitionHandle& handle,
149 const blink::WebSpeechRecognitionParams& params, 188 const blink::WebSpeechRecognitionParams& params,
150 blink::WebSpeechRecognizerClient* client) { 189 blink::WebSpeechRecognizerClient* client) {
151 was_aborted_ = false; 190 was_aborted_ = false;
152 handle_ = handle; 191 if (!client_) {
153 client_ = client; 192 handle_ = handle;
193 client_ = client;
194 } else {
195 task_queue_.push_back(
196 new SwitchClientHandleTask(this, handle, client));
197 }
154 198
155 task_queue_.push_back( 199 task_queue_.push_back(
156 new ClientCallTask(this, &blink::WebSpeechRecognizerClient::didStart)); 200 new ClientCallTask(this, &blink::WebSpeechRecognizerClient::didStart));
157 task_queue_.push_back(new ClientCallTask( 201 task_queue_.push_back(new ClientCallTask(
158 this, &blink::WebSpeechRecognizerClient::didStartAudio)); 202 this, &blink::WebSpeechRecognizerClient::didStartAudio));
159 task_queue_.push_back(new ClientCallTask( 203 task_queue_.push_back(new ClientCallTask(
160 this, &blink::WebSpeechRecognizerClient::didStartSound)); 204 this, &blink::WebSpeechRecognizerClient::didStartSound));
161 205
162 if (!mock_transcripts_.empty()) { 206 if (!mock_transcripts_.empty()) {
163 DCHECK_EQ(mock_transcripts_.size(), mock_confidences_.size()); 207 DCHECK_EQ(mock_transcripts_.size(), mock_confidences_.size());
(...skipping 12 matching lines...) Expand all
176 task_queue_.push_back( 220 task_queue_.push_back(
177 new ClientCallTask(this, &blink::WebSpeechRecognizerClient::didEndAudio)); 221 new ClientCallTask(this, &blink::WebSpeechRecognizerClient::didEndAudio));
178 task_queue_.push_back(new EndedTask(this)); 222 task_queue_.push_back(new EndedTask(this));
179 223
180 StartTaskQueue(); 224 StartTaskQueue();
181 } 225 }
182 226
183 void MockWebSpeechRecognizer::stop( 227 void MockWebSpeechRecognizer::stop(
184 const blink::WebSpeechRecognitionHandle& handle, 228 const blink::WebSpeechRecognitionHandle& handle,
185 blink::WebSpeechRecognizerClient* client) { 229 blink::WebSpeechRecognizerClient* client) {
186 handle_ = handle; 230 SetClientContext(handle, client);
187 client_ = client;
188 231
189 // FIXME: Implement. 232 // FIXME: Implement.
190 NOTREACHED(); 233 NOTREACHED();
191 } 234 }
192 235
193 void MockWebSpeechRecognizer::abort( 236 void MockWebSpeechRecognizer::abort(
194 const blink::WebSpeechRecognitionHandle& handle, 237 const blink::WebSpeechRecognitionHandle& handle,
195 blink::WebSpeechRecognizerClient* client) { 238 blink::WebSpeechRecognizerClient* client) {
196 handle_ = handle; 239 was_aborted_ = true;
197 client_ = client;
198
199 ClearTaskQueue(); 240 ClearTaskQueue();
200 was_aborted_ = true; 241 task_queue_.push_back(
242 new SwitchClientHandleTask(this, handle, client));
201 task_queue_.push_back(new EndedTask(this)); 243 task_queue_.push_back(new EndedTask(this));
202 244
203 StartTaskQueue(); 245 StartTaskQueue();
204 } 246 }
205 247
206 void MockWebSpeechRecognizer::AddMockResult(const blink::WebString& transcript, 248 void MockWebSpeechRecognizer::AddMockResult(const blink::WebString& transcript,
207 float confidence) { 249 float confidence) {
208 mock_transcripts_.push_back(transcript); 250 mock_transcripts_.push_back(transcript);
209 mock_confidences_.push_back(confidence); 251 mock_confidences_.push_back(confidence);
210 } 252 }
(...skipping 30 matching lines...) Expand all
241 } 283 }
242 284
243 void MockWebSpeechRecognizer::StartTaskQueue() { 285 void MockWebSpeechRecognizer::StartTaskQueue() {
244 if (task_queue_running_) 286 if (task_queue_running_)
245 return; 287 return;
246 PostRunTaskFromQueue(); 288 PostRunTaskFromQueue();
247 } 289 }
248 290
249 void MockWebSpeechRecognizer::ClearTaskQueue() { 291 void MockWebSpeechRecognizer::ClearTaskQueue() {
250 while (!task_queue_.empty()) { 292 while (!task_queue_.empty()) {
293 Task* task = task_queue_.front();
294 if (task->isNewContextTask())
295 break;
251 delete task_queue_.front(); 296 delete task_queue_.front();
252 task_queue_.pop_front(); 297 task_queue_.pop_front();
253 } 298 }
254 task_queue_running_ = false; 299 if (task_queue_.empty())
300 task_queue_running_ = false;
255 } 301 }
256 302
257 void MockWebSpeechRecognizer::PostRunTaskFromQueue() { 303 void MockWebSpeechRecognizer::PostRunTaskFromQueue() {
258 task_queue_running_ = true; 304 task_queue_running_ = true;
259 delegate_->PostTask(base::Bind(&MockWebSpeechRecognizer::RunTaskFromQueue, 305 delegate_->PostTask(base::Bind(&MockWebSpeechRecognizer::RunTaskFromQueue,
260 weak_factory_.GetWeakPtr())); 306 weak_factory_.GetWeakPtr()));
261 } 307 }
262 308
263 void MockWebSpeechRecognizer::RunTaskFromQueue() { 309 void MockWebSpeechRecognizer::RunTaskFromQueue() {
264 if (task_queue_.empty()) { 310 if (task_queue_.empty()) {
265 task_queue_running_ = false; 311 task_queue_running_ = false;
266 return; 312 return;
267 } 313 }
268 314
269 MockWebSpeechRecognizer::Task* task = task_queue_.front(); 315 MockWebSpeechRecognizer::Task* task = task_queue_.front();
270 task_queue_.pop_front(); 316 task_queue_.pop_front();
271 task->run(); 317 task->run();
272 delete task; 318 delete task;
273 319
274 if (task_queue_.empty()) { 320 if (task_queue_.empty()) {
275 task_queue_running_ = false; 321 task_queue_running_ = false;
276 return; 322 return;
277 } 323 }
278 324
279 PostRunTaskFromQueue(); 325 PostRunTaskFromQueue();
280 } 326 }
281 327
282 } // namespace test_runner 328 } // namespace test_runner
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698