15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_SHELL_RENDERER_TEST_RUNNER_MOCK_WEB_SPEECH_RECOGNIZER_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_SHELL_RENDERER_TEST_RUNNER_MOCK_WEB_SPEECH_RECOGNIZER_H_
73240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch
83240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#include <deque>
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <vector>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/shell/renderer/test_runner/web_task.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/WebKit/public/web/WebSpeechRecognizer.h"
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebSpeechRecognitionHandle;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebSpeechRecognitionParams;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebSpeechRecognizerClient;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
223240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebTestDelegate;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockWebSpeechRecognizer : public blink::WebSpeechRecognizer {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockWebSpeechRecognizer();
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~MockWebSpeechRecognizer();
29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetDelegate(WebTestDelegate* delegate);
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // WebSpeechRecognizer implementation:
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void start(const blink::WebSpeechRecognitionHandle& handle,
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     const blink::WebSpeechRecognitionParams& params,
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     blink::WebSpeechRecognizerClient* client);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void stop(const blink::WebSpeechRecognitionHandle& handle,
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    blink::WebSpeechRecognizerClient* client);
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void abort(const blink::WebSpeechRecognitionHandle& handle,
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     blink::WebSpeechRecognizerClient* client);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Methods accessed by layout tests:
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void AddMockResult(const blink::WebString& transcript, float confidence);
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void SetError(const blink::WebString& error, const blink::WebString& message);
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  bool WasAborted() const { return was_aborted_; }
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Methods accessed from Task objects:
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  blink::WebSpeechRecognizerClient* Client() { return client_; }
48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  blink::WebSpeechRecognitionHandle& Handle() { return handle_; }
49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  WebTaskList* mutable_task_list() { return &task_list_; }
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  class Task {
523240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch   public:
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Task(MockWebSpeechRecognizer* recognizer) : recognizer_(recognizer) {}
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual ~Task() {}
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual void run() = 0;
563240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   protected:
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    MockWebSpeechRecognizer* recognizer_;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   private:
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DISALLOW_COPY_AND_ASSIGN(Task);
623240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  };
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
64 private:
65  void StartTaskQueue();
66  void ClearTaskQueue();
67
68  WebTaskList task_list_;
69  blink::WebSpeechRecognitionHandle handle_;
70  blink::WebSpeechRecognizerClient* client_;
71  std::vector<blink::WebString> mock_transcripts_;
72  std::vector<float> mock_confidences_;
73  bool was_aborted_;
74
75  // Queue of tasks to be run.
76  std::deque<Task*> task_queue_;
77  bool task_queue_running_;
78
79  WebTestDelegate* delegate_;
80
81  // Task for stepping the queue.
82  class StepTask : public WebMethodTask<MockWebSpeechRecognizer> {
83   public:
84    StepTask(MockWebSpeechRecognizer* object)
85        : WebMethodTask<MockWebSpeechRecognizer>(object) {}
86    virtual void RunIfValid() OVERRIDE;
87
88   private:
89    DISALLOW_COPY_AND_ASSIGN(StepTask);
90  };
91
92  DISALLOW_COPY_AND_ASSIGN(MockWebSpeechRecognizer);
93};
94
95}  // namespace content
96
97#endif  // CONTENT_SHELL_RENDERER_TEST_RUNNER_MOCK_WEB_SPEECH_RECOGNIZER_H_
98