15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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_RENDERER_SPEECH_RECOGNITION_DISPATCHER_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_RENDERER_SPEECH_RECOGNITION_DISPATCHER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/common/speech_recognition_result.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/renderer/render_view_observer.h" 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebVector.h" 147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebSpeechRecognitionHandle.h" 157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebSpeechRecognizer.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RenderViewImpl; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct SpeechRecognitionError; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct SpeechRecognitionResult; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SpeechRecognitionDispatcher is a delegate for methods used by WebKit for 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// scripted JS speech APIs. It's the complement of 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SpeechRecognitionDispatcherHost (owned by RenderViewHost). 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SpeechRecognitionDispatcher : public RenderViewObserver, 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public blink::WebSpeechRecognizer { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit SpeechRecognitionDispatcher(RenderViewImpl* render_view); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SpeechRecognitionDispatcher(); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 319a3a4bc965704498ea9f22876627cda96ff9a77eBo Liu // Aborts all speech recognitions. 329a3a4bc965704498ea9f22876627cda96ff9a77eBo Liu void AbortAllRecognitions(); 339a3a4bc965704498ea9f22876627cda96ff9a77eBo Liu 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderViewObserver implementation. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // blink::WebSpeechRecognizer implementation. 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void start(const blink::WebSpeechRecognitionHandle&, 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebSpeechRecognitionParams&, 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebSpeechRecognizerClient*) OVERRIDE; 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void stop(const blink::WebSpeechRecognitionHandle&, 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebSpeechRecognizerClient*) OVERRIDE; 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void abort(const blink::WebSpeechRecognitionHandle&, 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebSpeechRecognizerClient*) OVERRIDE; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnRecognitionStarted(int request_id); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnAudioStarted(int request_id); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnSoundStarted(int request_id); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnSoundEnded(int request_id); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnAudioEnded(int request_id); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnErrorOccurred(int request_id, const SpeechRecognitionError& error); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnRecognitionEnded(int request_id); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnResultsRetrieved(int request_id, 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const SpeechRecognitionResults& result); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int GetOrCreateIDForHandle(const blink::WebSpeechRecognitionHandle& handle); 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool HandleExists(const blink::WebSpeechRecognitionHandle& handle); 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebSpeechRecognitionHandle& GetHandleFromID(int handle_id); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The WebKit client class that we use to send events back to the JS world. 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebSpeechRecognizerClient* recognizer_client_; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) typedef std::map<int, blink::WebSpeechRecognitionHandle> HandleMap; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HandleMap handle_map_; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int next_id_; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SpeechRecognitionDispatcher); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_RENDERER_SPEECH_RECOGNITION_DISPATCHER_H_ 74