diff options
author | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-24 23:51:04 +0000 |
---|---|---|
committer | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-24 23:51:04 +0000 |
commit | 3bc0b560d93f137fc0f4a0ca16ef722d9dc80652 (patch) | |
tree | e3f984afce2c62319ea58b2d1fb952735406ce27 /chrome/browser | |
parent | e6ad33a0c9538029a6835807e0f5444193e33327 (diff) | |
download | chromium_src-3bc0b560d93f137fc0f4a0ca16ef722d9dc80652.zip chromium_src-3bc0b560d93f137fc0f4a0ca16ef722d9dc80652.tar.gz chromium_src-3bc0b560d93f137fc0f4a0ca16ef722d9dc80652.tar.bz2 |
Get rid of link dependency from content to chrome. Make it get the SpeechInputManager through the embedder interface.
I've renamed Chrome's SpeechInputManagerImpl to ChromeSpeechInputManager, to match what we've been doing for other chrome implementations of content classes.
BUG=76697
Review URL: http://codereview.chromium.org/7729001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@98147 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r-- | chrome/browser/chrome_content_browser_client.cc | 6 | ||||
-rw-r--r-- | chrome/browser/chrome_content_browser_client.h | 1 | ||||
-rw-r--r-- | chrome/browser/profiles/profile_impl.cc | 8 | ||||
-rw-r--r-- | chrome/browser/speech/chrome_speech_input_manager.cc (renamed from chrome/browser/speech/speech_input_manager.cc) | 138 | ||||
-rw-r--r-- | chrome/browser/speech/chrome_speech_input_manager.h | 88 |
5 files changed, 125 insertions, 116 deletions
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc index 6c14cd8..355ec5f 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc @@ -35,6 +35,7 @@ #include "chrome/browser/renderer_host/chrome_render_view_host_observer.h" #include "chrome/browser/renderer_host/text_input_client_message_filter.h" #include "chrome/browser/search_engines/search_provider_install_state_message_filter.h" +#include "chrome/browser/speech/chrome_speech_input_manager.h" #include "chrome/browser/spellchecker/spellcheck_message_filter.h" #include "chrome/browser/ssl/ssl_add_cert_handler.h" #include "chrome/browser/ssl/ssl_blocking_page.h" @@ -665,6 +666,11 @@ net::NetLog* ChromeContentBrowserClient::GetNetLog() { return g_browser_process->net_log(); } +speech_input::SpeechInputManager* + ChromeContentBrowserClient::GetSpeechInputManager() { + return speech_input::ChromeSpeechInputManager::GetInstance(); +} + bool ChromeContentBrowserClient::IsFastShutdownPossible() { const CommandLine& browser_command_line = *CommandLine::ForCurrentProcess(); return !browser_command_line.HasSwitch(switches::kChromeFrame); diff --git a/chrome/browser/chrome_content_browser_client.h b/chrome/browser/chrome_content_browser_client.h index 2807dc4..375de53b 100644 --- a/chrome/browser/chrome_content_browser_client.h +++ b/chrome/browser/chrome_content_browser_client.h @@ -99,6 +99,7 @@ class ChromeContentBrowserClient : public content::ContentBrowserClient { virtual MHTMLGenerationManager* GetMHTMLGenerationManager() OVERRIDE; virtual DevToolsManager* GetDevToolsManager() OVERRIDE; virtual net::NetLog* GetNetLog() OVERRIDE; + virtual speech_input::SpeechInputManager* GetSpeechInputManager() OVERRIDE; virtual bool IsFastShutdownPossible() OVERRIDE; virtual WebPreferences GetWebkitPrefs( content::BrowserContext* browser_context, diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc index 746e0ce..d33e81a 100644 --- a/chrome/browser/profiles/profile_impl.cc +++ b/chrome/browser/profiles/profile_impl.cc @@ -60,6 +60,7 @@ #include "chrome/browser/search_engines/template_url_fetcher.h" #include "chrome/browser/search_engines/template_url_service.h" #include "chrome/browser/sessions/session_service_factory.h" +#include "chrome/browser/speech/chrome_speech_input_manager.h" #include "chrome/browser/spellchecker/spellcheck_profile.h" #include "chrome/browser/sync/profile_sync_factory_impl.h" #include "chrome/browser/sync/profile_sync_service.h" @@ -408,7 +409,7 @@ void ProfileImpl::DoFinalInit() { GetSpellCheckProfile()->StartRecordingMetrics( GetPrefs()->GetBoolean(prefs::kEnableSpellCheck)); - speech_input::SpeechInputManager::Get()->set_censor_results( + speech_input::ChromeSpeechInputManager::GetInstance()->set_censor_results( prefs->GetBoolean(prefs::kSpeechInputCensorResults)); FilePath cookie_path = GetPath(); @@ -1456,8 +1457,9 @@ void ProfileImpl::Observe(int type, process->Send(new SpellCheckMsg_EnableAutoSpellCorrect(enabled)); } } else if (*pref_name_in == prefs::kSpeechInputCensorResults) { - speech_input::SpeechInputManager::Get()->set_censor_results( - prefs->GetBoolean(prefs::kSpeechInputCensorResults)); + speech_input::ChromeSpeechInputManager::GetInstance()-> + set_censor_results(prefs->GetBoolean( + prefs::kSpeechInputCensorResults)); } else if (*pref_name_in == prefs::kClearSiteDataOnExit) { clear_local_state_on_exit_ = prefs->GetBoolean(prefs::kClearSiteDataOnExit); diff --git a/chrome/browser/speech/speech_input_manager.cc b/chrome/browser/speech/chrome_speech_input_manager.cc index 8f2cad9..58944ec 100644 --- a/chrome/browser/speech/speech_input_manager.cc +++ b/chrome/browser/speech/chrome_speech_input_manager.cc @@ -2,24 +2,19 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "content/browser/speech/speech_input_manager.h" +#include "chrome/browser/speech/chrome_speech_input_manager.h" -#include <map> #include <string> -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" #include "base/synchronization/lock.h" #include "base/threading/thread_restrictions.h" #include "base/utf_string_conversions.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/prefs/pref_service.h" -#include "chrome/browser/speech/speech_input_bubble_controller.h" #include "chrome/browser/tab_contents/tab_util.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/pref_names.h" #include "content/browser/browser_thread.h" -#include "content/browser/speech/speech_recognizer.h" #include "grit/generated_resources.h" #include "media/audio/audio_manager.h" #include "ui/base/l10n/l10n_util.h" @@ -30,13 +25,11 @@ namespace speech_input { -namespace { - // Asynchronously fetches the PC and audio hardware/driver info if // the user has opted into UMA. This information is sent with speech input // requests to the server for identifying and improving quality issues with // specific device configurations. -class OptionalRequestInfo +class ChromeSpeechInputManager::OptionalRequestInfo : public base::RefCountedThreadSafe<OptionalRequestInfo> { public: OptionalRequestInfo() : can_report_metrics_(false) {} @@ -91,113 +84,31 @@ class OptionalRequestInfo DISALLOW_COPY_AND_ASSIGN(OptionalRequestInfo); }; -class SpeechInputManagerImpl : public SpeechInputManager, - public SpeechInputBubbleControllerDelegate, - public SpeechRecognizerDelegate { - public: - // SpeechInputManager methods. - virtual void StartRecognition(SpeechInputManagerDelegate* delegate, - int caller_id, - int render_process_id, - int render_view_id, - const gfx::Rect& element_rect, - const std::string& language, - const std::string& grammar, - const std::string& origin_url); - virtual void CancelRecognition(int caller_id); - virtual void StopRecording(int caller_id); - virtual void CancelAllRequestsWithDelegate( - SpeechInputManagerDelegate* delegate); - - // SpeechRecognizer::Delegate methods. - virtual void DidStartReceivingAudio(int caller_id); - virtual void SetRecognitionResult(int caller_id, - bool error, - const SpeechInputResultArray& result); - virtual void DidCompleteRecording(int caller_id); - virtual void DidCompleteRecognition(int caller_id); - virtual void OnRecognizerError(int caller_id, - SpeechRecognizer::ErrorCode error); - virtual void DidCompleteEnvironmentEstimation(int caller_id); - virtual void SetInputVolume(int caller_id, float volume, float noise_volume); - - // SpeechInputBubbleController::Delegate methods. - virtual void InfoBubbleButtonClicked(int caller_id, - SpeechInputBubble::Button button); - virtual void InfoBubbleFocusChanged(int caller_id); - - private: - struct SpeechInputRequest { - SpeechInputManagerDelegate* delegate; - scoped_refptr<SpeechRecognizer> recognizer; - bool is_active; // Set to true when recording or recognition is going on. - }; - - // Private constructor to enforce singleton. - friend struct base::DefaultLazyInstanceTraits<SpeechInputManagerImpl>; - SpeechInputManagerImpl(); - virtual ~SpeechInputManagerImpl(); - - bool HasPendingRequest(int caller_id) const; - SpeechInputManagerDelegate* GetDelegate(int caller_id) const; - - void CancelRecognitionAndInformDelegate(int caller_id); - - // Starts/restarts recognition for an existing request. - void StartRecognitionForRequest(int caller_id); - - typedef std::map<int, SpeechInputRequest> SpeechRecognizerMap; - SpeechRecognizerMap requests_; - int recording_caller_id_; - scoped_refptr<SpeechInputBubbleController> bubble_controller_; - scoped_refptr<OptionalRequestInfo> optional_request_info_; -}; - -base::LazyInstance<SpeechInputManagerImpl> g_speech_input_manager_impl( - base::LINKER_INITIALIZED); - -} // namespace - -SpeechInputManager* SpeechInputManager::Get() { - return g_speech_input_manager_impl.Pointer(); -} - -void SpeechInputManager::ShowAudioInputSettings() { - // Since AudioManager::ShowAudioInputSettings can potentially launch external - // processes, do that in the FILE thread to not block the calling threads. - if (!BrowserThread::CurrentlyOn(BrowserThread::FILE)) { - BrowserThread::PostTask( - BrowserThread::FILE, FROM_HERE, - NewRunnableFunction(&SpeechInputManager::ShowAudioInputSettings)); - return; - } - - DCHECK(AudioManager::GetAudioManager()->CanShowAudioInputSettings()); - if (AudioManager::GetAudioManager()->CanShowAudioInputSettings()) - AudioManager::GetAudioManager()->ShowAudioInputSettings(); +ChromeSpeechInputManager* ChromeSpeechInputManager::GetInstance() { + return Singleton<ChromeSpeechInputManager>::get(); } -SpeechInputManagerImpl::SpeechInputManagerImpl() +ChromeSpeechInputManager::ChromeSpeechInputManager() : recording_caller_id_(0), bubble_controller_(new SpeechInputBubbleController( ALLOW_THIS_IN_INITIALIZER_LIST(this))) { } -SpeechInputManagerImpl::~SpeechInputManagerImpl() { +ChromeSpeechInputManager::~ChromeSpeechInputManager() { while (requests_.begin() != requests_.end()) CancelRecognition(requests_.begin()->first); } -bool SpeechInputManagerImpl::HasPendingRequest(int caller_id) const { +bool ChromeSpeechInputManager::HasPendingRequest(int caller_id) const { return requests_.find(caller_id) != requests_.end(); } -SpeechInputManagerDelegate* SpeechInputManagerImpl::GetDelegate( +SpeechInputManagerDelegate* ChromeSpeechInputManager::GetDelegate( int caller_id) const { return requests_.find(caller_id)->second.delegate; } -void SpeechInputManagerImpl::StartRecognition( +void ChromeSpeechInputManager::StartRecognition( SpeechInputManagerDelegate* delegate, int caller_id, int render_process_id, @@ -234,7 +145,7 @@ void SpeechInputManagerImpl::StartRecognition( StartRecognitionForRequest(caller_id); } -void SpeechInputManagerImpl::StartRecognitionForRequest(int caller_id) { +void ChromeSpeechInputManager::StartRecognitionForRequest(int caller_id) { DCHECK(HasPendingRequest(caller_id)); // If we are currently recording audio for another caller, abort that cleanly. @@ -252,7 +163,7 @@ void SpeechInputManagerImpl::StartRecognitionForRequest(int caller_id) { } } -void SpeechInputManagerImpl::CancelRecognition(int caller_id) { +void ChromeSpeechInputManager::CancelRecognition(int caller_id) { DCHECK(HasPendingRequest(caller_id)); if (requests_[caller_id].is_active) requests_[caller_id].recognizer->CancelRecognition(); @@ -262,7 +173,7 @@ void SpeechInputManagerImpl::CancelRecognition(int caller_id) { bubble_controller_->CloseBubble(caller_id); } -void SpeechInputManagerImpl::CancelAllRequestsWithDelegate( +void ChromeSpeechInputManager::CancelAllRequestsWithDelegate( SpeechInputManagerDelegate* delegate) { SpeechRecognizerMap::iterator it = requests_.begin(); while (it != requests_.end()) { @@ -276,18 +187,18 @@ void SpeechInputManagerImpl::CancelAllRequestsWithDelegate( } } -void SpeechInputManagerImpl::StopRecording(int caller_id) { +void ChromeSpeechInputManager::StopRecording(int caller_id) { DCHECK(HasPendingRequest(caller_id)); requests_[caller_id].recognizer->StopRecording(); } -void SpeechInputManagerImpl::SetRecognitionResult( +void ChromeSpeechInputManager::SetRecognitionResult( int caller_id, bool error, const SpeechInputResultArray& result) { DCHECK(HasPendingRequest(caller_id)); GetDelegate(caller_id)->SetRecognitionResult(caller_id, result); } -void SpeechInputManagerImpl::DidCompleteRecording(int caller_id) { +void ChromeSpeechInputManager::DidCompleteRecording(int caller_id) { DCHECK(recording_caller_id_ == caller_id); DCHECK(HasPendingRequest(caller_id)); recording_caller_id_ = 0; @@ -295,13 +206,13 @@ void SpeechInputManagerImpl::DidCompleteRecording(int caller_id) { bubble_controller_->SetBubbleRecognizingMode(caller_id); } -void SpeechInputManagerImpl::DidCompleteRecognition(int caller_id) { +void ChromeSpeechInputManager::DidCompleteRecognition(int caller_id) { GetDelegate(caller_id)->DidCompleteRecognition(caller_id); requests_.erase(caller_id); bubble_controller_->CloseBubble(caller_id); } -void SpeechInputManagerImpl::OnRecognizerError( +void ChromeSpeechInputManager::OnRecognizerError( int caller_id, SpeechRecognizer::ErrorCode error) { if (caller_id == recording_caller_id_) recording_caller_id_ = 0; @@ -335,33 +246,34 @@ void SpeechInputManagerImpl::OnRecognizerError( NOTREACHED() << "unknown error " << error; } -void SpeechInputManagerImpl::DidStartReceivingAudio(int caller_id) { +void ChromeSpeechInputManager::DidStartReceivingAudio(int caller_id) { DCHECK(HasPendingRequest(caller_id)); DCHECK(recording_caller_id_ == caller_id); bubble_controller_->SetBubbleRecordingMode(caller_id); } -void SpeechInputManagerImpl::DidCompleteEnvironmentEstimation(int caller_id) { +void ChromeSpeechInputManager::DidCompleteEnvironmentEstimation(int caller_id) { DCHECK(HasPendingRequest(caller_id)); DCHECK(recording_caller_id_ == caller_id); } -void SpeechInputManagerImpl::SetInputVolume(int caller_id, float volume, - float noise_volume) { +void ChromeSpeechInputManager::SetInputVolume(int caller_id, float volume, + float noise_volume) { DCHECK(HasPendingRequest(caller_id)); DCHECK_EQ(recording_caller_id_, caller_id); bubble_controller_->SetBubbleInputVolume(caller_id, volume, noise_volume); } -void SpeechInputManagerImpl::CancelRecognitionAndInformDelegate(int caller_id) { +void ChromeSpeechInputManager::CancelRecognitionAndInformDelegate( + int caller_id) { SpeechInputManagerDelegate* cur_delegate = GetDelegate(caller_id); CancelRecognition(caller_id); cur_delegate->DidCompleteRecording(caller_id); cur_delegate->DidCompleteRecognition(caller_id); } -void SpeechInputManagerImpl::InfoBubbleButtonClicked( +void ChromeSpeechInputManager::InfoBubbleButtonClicked( int caller_id, SpeechInputBubble::Button button) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); // Ignore if the caller id was not in our active recognizers list because the @@ -377,7 +289,7 @@ void SpeechInputManagerImpl::InfoBubbleButtonClicked( } } -void SpeechInputManagerImpl::InfoBubbleFocusChanged(int caller_id) { +void ChromeSpeechInputManager::InfoBubbleFocusChanged(int caller_id) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); // Ignore if the caller id was not in our active recognizers list because the // user might have clicked more than once, or recognition could have been diff --git a/chrome/browser/speech/chrome_speech_input_manager.h b/chrome/browser/speech/chrome_speech_input_manager.h new file mode 100644 index 0000000..6754761 --- /dev/null +++ b/chrome/browser/speech/chrome_speech_input_manager.h @@ -0,0 +1,88 @@ +// Copyright (c) 2011 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 CHROME_BROWSER_SPEECH_CHROME_SPEECH_INPUT_MANAGER_H_ +#define CHROME_BROWSER_SPEECH_CHROME_SPEECH_INPUT_MANAGER_H_ + +#include <map> + +#include "base/memory/ref_counted.h" +#include "base/memory/singleton.h" +#include "chrome/browser/speech/speech_input_bubble_controller.h" +#include "content/browser/speech/speech_input_manager.h" +#include "content/browser/speech/speech_recognizer.h" + +namespace speech_input { + +class ChromeSpeechInputManager : public SpeechInputManager, + public SpeechInputBubbleControllerDelegate, + public SpeechRecognizerDelegate { + public: + static ChromeSpeechInputManager* GetInstance(); + + // SpeechInputManager methods. + virtual void StartRecognition(SpeechInputManagerDelegate* delegate, + int caller_id, + int render_process_id, + int render_view_id, + const gfx::Rect& element_rect, + const std::string& language, + const std::string& grammar, + const std::string& origin_url); + virtual void CancelRecognition(int caller_id); + virtual void StopRecording(int caller_id); + virtual void CancelAllRequestsWithDelegate( + SpeechInputManagerDelegate* delegate); + + // SpeechRecognizer::Delegate methods. + virtual void DidStartReceivingAudio(int caller_id); + virtual void SetRecognitionResult(int caller_id, + bool error, + const SpeechInputResultArray& result); + virtual void DidCompleteRecording(int caller_id); + virtual void DidCompleteRecognition(int caller_id); + virtual void OnRecognizerError(int caller_id, + SpeechRecognizer::ErrorCode error); + virtual void DidCompleteEnvironmentEstimation(int caller_id); + virtual void SetInputVolume(int caller_id, float volume, float noise_volume); + + // SpeechInputBubbleController::Delegate methods. + virtual void InfoBubbleButtonClicked(int caller_id, + SpeechInputBubble::Button button); + virtual void InfoBubbleFocusChanged(int caller_id); + + private: + class OptionalRequestInfo; + + struct SpeechInputRequest { + SpeechInputManagerDelegate* delegate; + scoped_refptr<SpeechRecognizer> recognizer; + bool is_active; // Set to true when recording or recognition is going on. + }; + + // Private constructor to enforce singleton. + friend struct DefaultSingletonTraits<ChromeSpeechInputManager>; + ChromeSpeechInputManager(); + virtual ~ChromeSpeechInputManager(); + + bool HasPendingRequest(int caller_id) const; + SpeechInputManagerDelegate* GetDelegate(int caller_id) const; + + void CancelRecognitionAndInformDelegate(int caller_id); + + // Starts/restarts recognition for an existing request. + void StartRecognitionForRequest(int caller_id); + + typedef std::map<int, SpeechInputRequest> SpeechRecognizerMap; + SpeechRecognizerMap requests_; + int recording_caller_id_; + scoped_refptr<SpeechInputBubbleController> bubble_controller_; + scoped_refptr<OptionalRequestInfo> optional_request_info_; + + DISALLOW_COPY_AND_ASSIGN(ChromeSpeechInputManager); +}; + +} // namespace speech_input + +#endif // CHROME_BROWSER_SPEECH_CHROME_SPEECH_INPUT_MANAGER_H_ |