speech_recognition_dispatcher.h revision 7d4cd473f85ac64c3747c96c277f9e506a0d2246
1// Copyright (c) 2012 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#ifndef CONTENT_RENDERER_SPEECH_RECOGNITION_DISPATCHER_H_
6#define CONTENT_RENDERER_SPEECH_RECOGNITION_DISPATCHER_H_
7
8#include <map>
9
10#include "base/basictypes.h"
11#include "content/public/common/speech_recognition_result.h"
12#include "content/public/renderer/render_view_observer.h"
13#include "third_party/WebKit/public/platform/WebVector.h"
14#include "third_party/WebKit/public/web/WebSpeechRecognitionHandle.h"
15#include "third_party/WebKit/public/web/WebSpeechRecognizer.h"
16
17namespace content {
18class RenderViewImpl;
19struct SpeechRecognitionError;
20struct SpeechRecognitionResult;
21
22// SpeechRecognitionDispatcher is a delegate for methods used by WebKit for
23// scripted JS speech APIs. It's the complement of
24// SpeechRecognitionDispatcherHost (owned by RenderViewHost).
25class SpeechRecognitionDispatcher : public RenderViewObserver,
26                                    public WebKit::WebSpeechRecognizer {
27 public:
28  explicit SpeechRecognitionDispatcher(RenderViewImpl* render_view);
29  virtual ~SpeechRecognitionDispatcher();
30
31 private:
32  // RenderViewObserver implementation.
33  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
34
35  // WebKit::WebSpeechRecognizer implementation.
36  virtual void start(const WebKit::WebSpeechRecognitionHandle&,
37                     const WebKit::WebSpeechRecognitionParams&,
38                     WebKit::WebSpeechRecognizerClient*) OVERRIDE;
39  virtual void stop(const WebKit::WebSpeechRecognitionHandle&,
40                    WebKit::WebSpeechRecognizerClient*) OVERRIDE;
41  virtual void abort(const WebKit::WebSpeechRecognitionHandle&,
42                     WebKit::WebSpeechRecognizerClient*) OVERRIDE;
43
44  void OnRecognitionStarted(int request_id);
45  void OnAudioStarted(int request_id);
46  void OnSoundStarted(int request_id);
47  void OnSoundEnded(int request_id);
48  void OnAudioEnded(int request_id);
49  void OnErrorOccurred(int request_id, const SpeechRecognitionError& error);
50  void OnRecognitionEnded(int request_id);
51  void OnResultsRetrieved(int request_id,
52                          const SpeechRecognitionResults& result);
53
54  int GetOrCreateIDForHandle(const WebKit::WebSpeechRecognitionHandle& handle);
55  bool HandleExists(const WebKit::WebSpeechRecognitionHandle& handle);
56  const WebKit::WebSpeechRecognitionHandle& GetHandleFromID(int handle_id);
57
58  // The WebKit client class that we use to send events back to the JS world.
59  WebKit::WebSpeechRecognizerClient* recognizer_client_;
60
61  typedef std::map<int, WebKit::WebSpeechRecognitionHandle> HandleMap;
62  HandleMap handle_map_;
63  int next_id_;
64
65  DISALLOW_COPY_AND_ASSIGN(SpeechRecognitionDispatcher);
66};
67
68}  // namespace content
69
70#endif  // CONTENT_RENDERER_SPEECH_RECOGNITION_DISPATCHER_H_
71