Index: chrome/browser/speech/speech_input_dispatcher_host.cc |
diff --git a/chrome/browser/speech/speech_input_dispatcher_host.cc b/chrome/browser/speech/speech_input_dispatcher_host.cc |
index 1563af3788bb7e01b789b558cef32816322d6fd0..add39af21cb46fc12956df1e01f446805be1e528 100644 |
--- a/chrome/browser/speech/speech_input_dispatcher_host.cc |
+++ b/chrome/browser/speech/speech_input_dispatcher_host.cc |
@@ -4,7 +4,7 @@ |
#include "chrome/browser/speech/speech_input_dispatcher_host.h" |
-#include "base/singleton.h" |
+#include "base/lazy_instance.h" |
#include "chrome/browser/renderer_host/render_process_host.h" |
#include "chrome/browser/renderer_host/render_view_host.h" |
#include "chrome/browser/renderer_host/render_view_host_notification_task.h" |
@@ -40,7 +40,7 @@ class SpeechInputDispatcherHost::SpeechInputCallers { |
int render_view_id; |
int request_id; |
}; |
- friend struct DefaultSingletonTraits<SpeechInputCallers>; |
+ friend struct base::DefaultLazyInstanceTraits<SpeechInputCallers>; |
SpeechInputCallers(); |
@@ -48,6 +48,9 @@ class SpeechInputDispatcherHost::SpeechInputCallers { |
int next_id_; |
}; |
+static base::LazyInstance<SpeechInputDispatcherHost::SpeechInputCallers> |
+ g_speech_input_callers(base::LINKER_INITIALIZED); |
+ |
SpeechInputDispatcherHost::SpeechInputCallers::SpeechInputCallers() |
: next_id_(1) { |
} |
@@ -107,8 +110,7 @@ SpeechInputManager::AccessorMethod* |
SpeechInputDispatcherHost::SpeechInputDispatcherHost( |
int resource_message_filter_process_id) |
- : resource_message_filter_process_id_(resource_message_filter_process_id), |
- callers_(Singleton<SpeechInputCallers>::get()) { |
+ : resource_message_filter_process_id_(resource_message_filter_process_id) { |
// This is initialized by ResourceMessageFilter. Do not add any non-trivial |
// initialization here, instead do it lazily when required (e.g. see the |
// method |manager()|) or add an Init() method. |
@@ -143,8 +145,8 @@ void SpeechInputDispatcherHost::OnStartRecognition( |
const gfx::Rect& element_rect, |
const std::string& language, |
const std::string& grammar) { |
- int caller_id = callers_->CreateId(resource_message_filter_process_id_, |
- render_view_id, request_id); |
+ int caller_id = g_speech_input_callers.Get().CreateId( |
+ resource_message_filter_process_id_, render_view_id, request_id); |
manager()->StartRecognition(this, caller_id, |
resource_message_filter_process_id_, |
render_view_id, element_rect, |
@@ -153,18 +155,19 @@ void SpeechInputDispatcherHost::OnStartRecognition( |
void SpeechInputDispatcherHost::OnCancelRecognition(int render_view_id, |
int request_id) { |
- int caller_id = callers_->GetId(resource_message_filter_process_id_, |
- render_view_id, request_id); |
+ int caller_id = g_speech_input_callers.Get().GetId( |
+ resource_message_filter_process_id_, render_view_id, request_id); |
if (caller_id) { |
manager()->CancelRecognition(caller_id); |
- callers_->RemoveId(caller_id); // Request sequence ended so remove mapping. |
+ // Request sequence ended so remove mapping. |
+ g_speech_input_callers.Get().RemoveId(caller_id); |
} |
} |
void SpeechInputDispatcherHost::OnStopRecording(int render_view_id, |
int request_id) { |
- int caller_id = callers_->GetId(resource_message_filter_process_id_, |
- render_view_id, request_id); |
+ int caller_id = g_speech_input_callers.Get().GetId( |
+ resource_message_filter_process_id_, render_view_id, request_id); |
if (caller_id) |
manager()->StopRecording(caller_id); |
} |
@@ -180,8 +183,9 @@ void SpeechInputDispatcherHost::SetRecognitionResult( |
int caller_id, const SpeechInputResultArray& result) { |
VLOG(1) << "SpeechInputDispatcherHost::SetRecognitionResult enter"; |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- int caller_render_view_id = callers_->render_view_id(caller_id); |
- int caller_request_id = callers_->request_id(caller_id); |
+ int caller_render_view_id = |
+ g_speech_input_callers.Get().render_view_id(caller_id); |
+ int caller_request_id = g_speech_input_callers.Get().request_id(caller_id); |
SendMessageToRenderView( |
new ViewMsg_SpeechInput_SetRecognitionResult(caller_render_view_id, |
caller_request_id, |
@@ -193,8 +197,9 @@ void SpeechInputDispatcherHost::SetRecognitionResult( |
void SpeechInputDispatcherHost::DidCompleteRecording(int caller_id) { |
VLOG(1) << "SpeechInputDispatcherHost::DidCompleteRecording enter"; |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- int caller_render_view_id = callers_->render_view_id(caller_id); |
- int caller_request_id = callers_->request_id(caller_id); |
+ int caller_render_view_id = |
+ g_speech_input_callers.Get().render_view_id(caller_id); |
+ int caller_request_id = g_speech_input_callers.Get().request_id(caller_id); |
SendMessageToRenderView( |
new ViewMsg_SpeechInput_RecordingComplete(caller_render_view_id, |
caller_request_id), |
@@ -205,13 +210,15 @@ void SpeechInputDispatcherHost::DidCompleteRecording(int caller_id) { |
void SpeechInputDispatcherHost::DidCompleteRecognition(int caller_id) { |
VLOG(1) << "SpeechInputDispatcherHost::DidCompleteRecognition enter"; |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- int caller_render_view_id = callers_->render_view_id(caller_id); |
- int caller_request_id = callers_->request_id(caller_id); |
+ int caller_render_view_id = |
+ g_speech_input_callers.Get().render_view_id(caller_id); |
+ int caller_request_id = g_speech_input_callers.Get().request_id(caller_id); |
SendMessageToRenderView( |
new ViewMsg_SpeechInput_RecognitionComplete(caller_render_view_id, |
caller_request_id), |
caller_render_view_id); |
- callers_->RemoveId(caller_id); // Request sequence ended, so remove mapping. |
+ // Request sequence ended, so remove mapping. |
+ g_speech_input_callers.Get().RemoveId(caller_id); |
VLOG(1) << "SpeechInputDispatcherHost::DidCompleteRecognition exit"; |
} |