chrome_speech_recognition_manager_delegate.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
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 "chrome/browser/speech/speech_recognition_bubble_controller.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/speech_recognition_event_listener.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/speech_recognition_manager_delegate.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/speech_recognition_session_config.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SpeechRecognitionTrayIconController;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace speech {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is Chrome's implementation of the SpeechRecognitionManagerDelegate
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// interface.
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChromeSpeechRecognitionManagerDelegate
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : NON_EXPORTED_BASE(public content::SpeechRecognitionManagerDelegate),
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      public content::SpeechRecognitionEventListener,
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      public SpeechRecognitionBubbleControllerDelegate {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ChromeSpeechRecognitionManagerDelegate();
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ChromeSpeechRecognitionManagerDelegate();
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // SpeechRecognitionBubbleControllerDelegate methods.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void InfoBubbleButtonClicked(
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int session_id, SpeechRecognitionBubble::Button button) OVERRIDE;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void InfoBubbleFocusChanged(int session_id) OVERRIDE;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // SpeechRecognitionEventListener methods.
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnRecognitionStart(int session_id) OVERRIDE;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnAudioStart(int session_id) OVERRIDE;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnEnvironmentEstimationComplete(int session_id) OVERRIDE;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnSoundStart(int session_id) OVERRIDE;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnSoundEnd(int session_id) OVERRIDE;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnAudioEnd(int session_id) OVERRIDE;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnRecognitionEnd(int session_id) OVERRIDE;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnRecognitionResult(
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int session_id, const content::SpeechRecognitionResult& result) OVERRIDE;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnRecognitionError(
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int session_id, const content::SpeechRecognitionError& error) OVERRIDE;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnAudioLevelsChange(int session_id, float volume,
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   float noise_volume) OVERRIDE;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // SpeechRecognitionManagerDelegate methods.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void GetDiagnosticInformation(bool* can_report_metrics,
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        std::string* hardware_info) OVERRIDE;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void CheckRecognitionIsAllowed(
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int session_id,
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Callback<void(bool ask_user, bool is_allowed)> callback) OVERRIDE;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual content::SpeechRecognitionEventListener* GetEventListener() OVERRIDE;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  class OptionalRequestInfo;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  class TabWatcher;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows the recognition tray icon for a given |context_name|, eventually
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // with a notification balloon. The balloon is shown only once per profile
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // for a given context_name. |render_process_id| is required to lookup the
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // profile associated with the renderer that initiated the recognition.
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void ShowTrayIconOnUIThread(
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const std::string& context_name,
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int render_process_id,
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      scoped_refptr<SpeechRecognitionTrayIconController> tray_icon_controller);
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Checks for VIEW_TYPE_TAB_CONTENTS host in the UI thread and notifies back
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the result in the IO thread through |callback|.
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void CheckRenderViewType(
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Callback<void(bool ask_user, bool is_allowed)> callback,
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int render_process_id,
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int render_view_id,
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      bool js_api);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Starts a new recognition session, using the config of the last one
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // (which is copied into |last_session_config_|). Used for "try again".
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void RestartLastSession();
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Callback called by |tab_watcher_| on the IO thread to signal tab closure.
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void TabClosedCallback(int render_process_id, int render_view_id);
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Lazy initializers for bubble and tray icon controller.
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SpeechRecognitionBubbleController* GetBubbleController();
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SpeechRecognitionTrayIconController* GetTrayIconController();
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<SpeechRecognitionBubbleController> bubble_controller_;
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<SpeechRecognitionTrayIconController> tray_icon_controller_;
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<OptionalRequestInfo> optional_request_info_;
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<content::SpeechRecognitionSessionConfig> last_session_config_;
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<TabWatcher> tab_watcher_;
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ChromeSpeechRecognitionManagerDelegate);
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace speech
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_SPEECH_CHROME_SPEECH_RECOGNITION_MANAGER_DELEGATE_H_
102