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_BROWSER_SPEECH_SPEECH_RECOGNITION_DISPATCHER_HOST_H_ 6 #define CONTENT_BROWSER_SPEECH_SPEECH_RECOGNITION_DISPATCHER_HOST_H_ 7 8 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/weak_ptr.h" 10 #include "content/common/content_export.h" 11 #include "content/public/browser/browser_message_filter.h" 12 #include "content/public/browser/speech_recognition_event_listener.h" 13 #include "net/url_request/url_request_context_getter.h" 14 15 struct SpeechRecognitionHostMsg_StartRequest_Params; 16 17 namespace content { 18 19 class SpeechRecognitionManager; 20 struct SpeechRecognitionResult; 21 22 // SpeechRecognitionDispatcherHost is a delegate for Speech API messages used by 23 // RenderMessageFilter. Basically it acts as a proxy, relaying the events coming 24 // from the SpeechRecognitionManager to IPC messages (and vice versa). 25 // It's the complement of SpeechRecognitionDispatcher (owned by RenderView). 26 class CONTENT_EXPORT SpeechRecognitionDispatcherHost 27 : public BrowserMessageFilter, 28 public SpeechRecognitionEventListener { 29 public: 30 SpeechRecognitionDispatcherHost( 31 int render_process_id, 32 net::URLRequestContextGetter* context_getter); 33 34 base::WeakPtr<SpeechRecognitionDispatcherHost> AsWeakPtr(); 35 36 // SpeechRecognitionEventListener methods. 37 virtual void OnRecognitionStart(int session_id) OVERRIDE; 38 virtual void OnAudioStart(int session_id) OVERRIDE; 39 virtual void OnEnvironmentEstimationComplete(int session_id) OVERRIDE; 40 virtual void OnSoundStart(int session_id) OVERRIDE; 41 virtual void OnSoundEnd(int session_id) OVERRIDE; 42 virtual void OnAudioEnd(int session_id) OVERRIDE; 43 virtual void OnRecognitionEnd(int session_id) OVERRIDE; 44 virtual void OnRecognitionResults( 45 int session_id, 46 const SpeechRecognitionResults& results) OVERRIDE; 47 virtual void OnRecognitionError( 48 int session_id, 49 const SpeechRecognitionError& error) OVERRIDE; 50 virtual void OnAudioLevelsChange(int session_id, 51 float volume, 52 float noise_volume) OVERRIDE; 53 54 // BrowserMessageFilter implementation. 55 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 56 virtual void OverrideThreadForMessage( 57 const IPC::Message& message, 58 BrowserThread::ID* thread) OVERRIDE; 59 60 virtual void OnChannelClosing() OVERRIDE; 61 62 private: 63 virtual ~SpeechRecognitionDispatcherHost(); 64 65 void OnStartRequest( 66 const SpeechRecognitionHostMsg_StartRequest_Params& params); 67 void OnStartRequestOnIO( 68 int embedder_render_process_id, 69 int embedder_render_view_id, 70 const SpeechRecognitionHostMsg_StartRequest_Params& params, 71 bool filter_profanities); 72 void OnAbortRequest(int render_view_id, int request_id); 73 void OnStopCaptureRequest(int render_view_id, int request_id); 74 void OnAbortAllRequests(int render_view_id); 75 76 int render_process_id_; 77 scoped_refptr<net::URLRequestContextGetter> context_getter_; 78 79 // Used for posting asynchronous tasks (on the IO thread) without worrying 80 // about this class being destroyed in the meanwhile (due to browser shutdown) 81 // since tasks pending on a destroyed WeakPtr are automatically discarded. 82 base::WeakPtrFactory<SpeechRecognitionDispatcherHost> weak_factory_; 83 84 DISALLOW_COPY_AND_ASSIGN(SpeechRecognitionDispatcherHost); 85 }; 86 87 } // namespace content 88 89 #endif // CONTENT_BROWSER_SPEECH_SPEECH_RECOGNITION_DISPATCHER_HOST_H_ 90