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 CHROME_BROWSER_SPEECH_CHROME_SPEECH_RECOGNITION_MANAGER_DELEGATE_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_SPEECH_CHROME_SPEECH_RECOGNITION_MANAGER_DELEGATE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/speech_recognition_event_listener.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/speech_recognition_manager_delegate.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/speech_recognition_session_config.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace speech {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is Chrome's implementation of the SpeechRecognitionManagerDelegate
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// interface.
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChromeSpeechRecognitionManagerDelegate
197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    : public content::SpeechRecognitionManagerDelegate,
207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      public content::SpeechRecognitionEventListener {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ChromeSpeechRecognitionManagerDelegate();
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ChromeSpeechRecognitionManagerDelegate();
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // SpeechRecognitionEventListener methods.
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnRecognitionStart(int session_id) OVERRIDE;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnAudioStart(int session_id) OVERRIDE;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnEnvironmentEstimationComplete(int session_id) OVERRIDE;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnSoundStart(int session_id) OVERRIDE;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnSoundEnd(int session_id) OVERRIDE;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnAudioEnd(int session_id) OVERRIDE;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnRecognitionEnd(int session_id) OVERRIDE;
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnRecognitionResults(
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      int session_id, const content::SpeechRecognitionResults& result) OVERRIDE;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnRecognitionError(
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int session_id, const content::SpeechRecognitionError& error) OVERRIDE;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnAudioLevelsChange(int session_id, float volume,
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   float noise_volume) OVERRIDE;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // SpeechRecognitionManagerDelegate methods.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void GetDiagnosticInformation(bool* can_report_metrics,
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        std::string* hardware_info) OVERRIDE;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void CheckRecognitionIsAllowed(
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int session_id,
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Callback<void(bool ask_user, bool is_allowed)> callback) OVERRIDE;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual content::SpeechRecognitionEventListener* GetEventListener() OVERRIDE;
487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual bool FilterProfanities(int render_process_id) OVERRIDE;
497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Callback called by |tab_watcher_| on the IO thread to signal tab closure.
517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual void TabClosedCallback(int render_process_id, int render_view_id);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  class OptionalRequestInfo;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  class TabWatcher;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Checks for VIEW_TYPE_TAB_CONTENTS host in the UI thread and notifies back
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the result in the IO thread through |callback|.
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void CheckRenderViewType(
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Callback<void(bool ask_user, bool is_allowed)> callback,
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int render_process_id,
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int render_view_id,
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      bool js_api);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<OptionalRequestInfo> optional_request_info_;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<TabWatcher> tab_watcher_;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ChromeSpeechRecognitionManagerDelegate);
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace speech
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_SPEECH_CHROME_SPEECH_RECOGNITION_MANAGER_DELEGATE_H_
74