// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CONTENT_BROWSER_SPEECH_SPEECH_RECOGNITION_DISPATCHER_HOST_H_ #define CONTENT_BROWSER_SPEECH_SPEECH_RECOGNITION_DISPATCHER_HOST_H_ #include "base/memory/scoped_ptr.h" #include "base/memory/weak_ptr.h" #include "content/common/content_export.h" #include "content/public/browser/browser_message_filter.h" #include "content/public/browser/speech_recognition_event_listener.h" #include "net/url_request/url_request_context_getter.h" struct SpeechRecognitionHostMsg_StartRequest_Params; namespace content { class SpeechRecognitionManager; struct SpeechRecognitionResult; // SpeechRecognitionDispatcherHost is a delegate for Speech API messages used by // RenderMessageFilter. Basically it acts as a proxy, relaying the events coming // from the SpeechRecognitionManager to IPC messages (and vice versa). // It's the complement of SpeechRecognitionDispatcher (owned by RenderView). class CONTENT_EXPORT SpeechRecognitionDispatcherHost : public BrowserMessageFilter, public SpeechRecognitionEventListener { public: SpeechRecognitionDispatcherHost( int render_process_id, net::URLRequestContextGetter* context_getter); base::WeakPtr AsWeakPtr(); // SpeechRecognitionEventListener methods. void OnRecognitionStart(int session_id) override; void OnAudioStart(int session_id) override; void OnEnvironmentEstimationComplete(int session_id) override; void OnSoundStart(int session_id) override; void OnSoundEnd(int session_id) override; void OnAudioEnd(int session_id) override; void OnRecognitionEnd(int session_id) override; void OnRecognitionResults(int session_id, const SpeechRecognitionResults& results) override; void OnRecognitionError(int session_id, const SpeechRecognitionError& error) override; void OnAudioLevelsChange(int session_id, float volume, float noise_volume) override; // BrowserMessageFilter implementation. void OnDestruct() const override; bool OnMessageReceived(const IPC::Message& message) override; void OverrideThreadForMessage(const IPC::Message& message, BrowserThread::ID* thread) override; void OnChannelClosing() override; private: friend class base::DeleteHelper; friend class BrowserThread; ~SpeechRecognitionDispatcherHost() override; void OnStartRequest( const SpeechRecognitionHostMsg_StartRequest_Params& params); void OnStartRequestOnIO( int embedder_render_process_id, int embedder_render_view_id, const SpeechRecognitionHostMsg_StartRequest_Params& params, int params_render_frame_id, bool filter_profanities); void OnAbortRequest(int render_view_id, int request_id); void OnStopCaptureRequest(int render_view_id, int request_id); void OnAbortAllRequests(int render_view_id); int render_process_id_; scoped_refptr context_getter_; // Used for posting asynchronous tasks (on the IO thread) without worrying // about this class being destroyed in the meanwhile (due to browser shutdown) // since tasks pending on a destroyed WeakPtr are automatically discarded. base::WeakPtrFactory weak_factory_; DISALLOW_COPY_AND_ASSIGN(SpeechRecognitionDispatcherHost); }; } // namespace content #endif // CONTENT_BROWSER_SPEECH_SPEECH_RECOGNITION_DISPATCHER_HOST_H_