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

Side by Side Diff: content/shell/renderer/test_runner/MockWebSpeechRecognizer.cpp

Issue 429953002: test_runner: Migrate MockWebSpeechRecognizer to Chromium C++ style. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/shell/renderer/test_runner/MockWebSpeechRecognizer.h"
6
7 #include "base/logging.h"
8 #include "content/shell/renderer/test_runner/WebTestDelegate.h"
9 #include "third_party/WebKit/public/web/WebSpeechRecognitionResult.h"
10 #include "third_party/WebKit/public/web/WebSpeechRecognizerClient.h"
11
12 using namespace blink;
13
14 namespace content {
15
16 namespace {
17
18 // Task class for calling a client function that does not take any parameters.
19 typedef void (WebSpeechRecognizerClient::*ClientFunctionPointer)(const WebSpeech RecognitionHandle&);
20 class ClientCallTask : public MockWebSpeechRecognizer::Task {
21 public:
22 ClientCallTask(MockWebSpeechRecognizer* mock, ClientFunctionPointer function )
23 : MockWebSpeechRecognizer::Task(mock)
24 , m_function(function)
25 {
26 }
27
28 virtual void run() OVERRIDE { (m_recognizer->client()->*m_function)(m_recogn izer->handle()); }
29
30 private:
31 ClientFunctionPointer m_function;
32 };
33
34 // Task for delivering a result event.
35 class ResultTask : public MockWebSpeechRecognizer::Task {
36 public:
37 ResultTask(MockWebSpeechRecognizer* mock, const WebString transcript, float confidence)
38 : MockWebSpeechRecognizer::Task(mock)
39 , m_transcript(transcript)
40 , m_confidence(confidence)
41 {
42 }
43
44 virtual void run() OVERRIDE
45 {
46 WebVector<WebString> transcripts(static_cast<size_t>(1));
47 WebVector<float> confidences(static_cast<size_t>(1));
48 transcripts[0] = m_transcript;
49 confidences[0] = m_confidence;
50 WebVector<WebSpeechRecognitionResult> finalResults(static_cast<size_t>(1 ));
51 WebVector<WebSpeechRecognitionResult> interimResults;
52 finalResults[0].assign(transcripts, confidences, true);
53
54 m_recognizer->client()->didReceiveResults(m_recognizer->handle(), finalR esults, interimResults);
55 }
56
57 private:
58 WebString m_transcript;
59 float m_confidence;
60 };
61
62 // Task for delivering a nomatch event.
63 class NoMatchTask : public MockWebSpeechRecognizer::Task {
64 public:
65 NoMatchTask(MockWebSpeechRecognizer* mock) : MockWebSpeechRecognizer::Task(m ock) { }
66 virtual void run() OVERRIDE { m_recognizer->client()->didReceiveNoMatch(m_re cognizer->handle(), WebSpeechRecognitionResult()); }
67 };
68
69 // Task for delivering an error event.
70 class ErrorTask : public MockWebSpeechRecognizer::Task {
71 public:
72 ErrorTask(MockWebSpeechRecognizer* mock, WebSpeechRecognizerClient::ErrorCod e code, const WebString& message)
73 : MockWebSpeechRecognizer::Task(mock)
74 , m_code(code)
75 , m_message(message)
76 {
77 }
78
79 virtual void run() OVERRIDE { m_recognizer->client()->didReceiveError(m_reco gnizer->handle(), m_message, m_code); }
80
81 private:
82 WebSpeechRecognizerClient::ErrorCode m_code;
83 WebString m_message;
84 };
85
86 } // namespace
87
88 MockWebSpeechRecognizer::MockWebSpeechRecognizer()
89 : m_wasAborted(false)
90 , m_taskQueueRunning(false)
91 , m_delegate(0)
92 {
93 }
94
95 MockWebSpeechRecognizer::~MockWebSpeechRecognizer()
96 {
97 clearTaskQueue();
98 }
99
100 void MockWebSpeechRecognizer::setDelegate(WebTestDelegate* delegate)
101 {
102 m_delegate = delegate;
103 }
104
105 void MockWebSpeechRecognizer::start(const WebSpeechRecognitionHandle& handle, co nst WebSpeechRecognitionParams& params, WebSpeechRecognizerClient* client)
106 {
107 m_wasAborted = false;
108 m_handle = handle;
109 m_client = client;
110
111 m_taskQueue.push_back(new ClientCallTask(this, &WebSpeechRecognizerClient::d idStart));
112 m_taskQueue.push_back(new ClientCallTask(this, &WebSpeechRecognizerClient::d idStartAudio));
113 m_taskQueue.push_back(new ClientCallTask(this, &WebSpeechRecognizerClient::d idStartSound));
114
115 if (!m_mockTranscripts.empty()) {
116 DCHECK_EQ(m_mockTranscripts.size(), m_mockConfidences.size());
117
118 for (size_t i = 0; i < m_mockTranscripts.size(); ++i)
119 m_taskQueue.push_back(new ResultTask(this, m_mockTranscripts[i], m_m ockConfidences[i]));
120
121 m_mockTranscripts.clear();
122 m_mockConfidences.clear();
123 } else
124 m_taskQueue.push_back(new NoMatchTask(this));
125
126 m_taskQueue.push_back(new ClientCallTask(this, &WebSpeechRecognizerClient::d idEndSound));
127 m_taskQueue.push_back(new ClientCallTask(this, &WebSpeechRecognizerClient::d idEndAudio));
128 m_taskQueue.push_back(new ClientCallTask(this, &WebSpeechRecognizerClient::d idEnd));
129
130 startTaskQueue();
131 }
132
133 void MockWebSpeechRecognizer::stop(const WebSpeechRecognitionHandle& handle, Web SpeechRecognizerClient* client)
134 {
135 m_handle = handle;
136 m_client = client;
137
138 // FIXME: Implement.
139 NOTREACHED();
140 }
141
142 void MockWebSpeechRecognizer::abort(const WebSpeechRecognitionHandle& handle, We bSpeechRecognizerClient* client)
143 {
144 m_handle = handle;
145 m_client = client;
146
147 clearTaskQueue();
148 m_wasAborted = true;
149 m_taskQueue.push_back(new ClientCallTask(this, &WebSpeechRecognizerClient::d idEnd));
150 startTaskQueue();
151 }
152
153 void MockWebSpeechRecognizer::addMockResult(const WebString& transcript, float c onfidence)
154 {
155 m_mockTranscripts.push_back(transcript);
156 m_mockConfidences.push_back(confidence);
157 }
158
159 void MockWebSpeechRecognizer::setError(const WebString& error, const WebString& message)
160 {
161 WebSpeechRecognizerClient::ErrorCode code;
162 if (error == "OtherError")
163 code = WebSpeechRecognizerClient::OtherError;
164 else if (error == "NoSpeechError")
165 code = WebSpeechRecognizerClient::NoSpeechError;
166 else if (error == "AbortedError")
167 code = WebSpeechRecognizerClient::AbortedError;
168 else if (error == "AudioCaptureError")
169 code = WebSpeechRecognizerClient::AudioCaptureError;
170 else if (error == "NetworkError")
171 code = WebSpeechRecognizerClient::NetworkError;
172 else if (error == "NotAllowedError")
173 code = WebSpeechRecognizerClient::NotAllowedError;
174 else if (error == "ServiceNotAllowedError")
175 code = WebSpeechRecognizerClient::ServiceNotAllowedError;
176 else if (error == "BadGrammarError")
177 code = WebSpeechRecognizerClient::BadGrammarError;
178 else if (error == "LanguageNotSupportedError")
179 code = WebSpeechRecognizerClient::LanguageNotSupportedError;
180 else
181 return;
182
183 clearTaskQueue();
184 m_taskQueue.push_back(new ErrorTask(this, code, message));
185 m_taskQueue.push_back(new ClientCallTask(this, &WebSpeechRecognizerClient::d idEnd));
186 startTaskQueue();
187 }
188
189 void MockWebSpeechRecognizer::startTaskQueue()
190 {
191 if (m_taskQueueRunning)
192 return;
193 m_delegate->postTask(new StepTask(this));
194 m_taskQueueRunning = true;
195 }
196
197 void MockWebSpeechRecognizer::clearTaskQueue()
198 {
199 while (!m_taskQueue.empty()) {
200 delete m_taskQueue.front();
201 m_taskQueue.pop_front();
202 }
203 m_taskQueueRunning = false;
204 }
205
206 void MockWebSpeechRecognizer::StepTask::runIfValid()
207 {
208 if (m_object->m_taskQueue.empty()) {
209 m_object->m_taskQueueRunning = false;
210 return;
211 }
212
213 Task* task = m_object->m_taskQueue.front();
214 m_object->m_taskQueue.pop_front();
215 task->run();
216 delete task;
217
218 if (m_object->m_taskQueue.empty()) {
219 m_object->m_taskQueueRunning = false;
220 return;
221 }
222
223 m_object->m_delegate->postTask(new StepTask(m_object));
224 }
225
226 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698