OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/speech/speech_input_dispatcher_host.h" | 5 #include "content/browser/speech/speech_input_dispatcher_host.h" |
6 | 6 |
7 #include "base/lazy_instance.h" | 7 #include "base/lazy_instance.h" |
| 8 #include "content/browser/content_browser_client.h" |
8 #include "content/common/speech_input_messages.h" | 9 #include "content/common/speech_input_messages.h" |
9 | 10 |
10 namespace speech_input { | 11 namespace speech_input { |
11 | 12 |
12 //----------------------------- SpeechInputCallers ----------------------------- | 13 //----------------------------- SpeechInputCallers ----------------------------- |
13 | 14 |
14 // A singleton class to map the tuple | 15 // A singleton class to map the tuple |
15 // (render-process-id, render-view-id, requestid) to a single ID which is passed | 16 // (render-process-id, render-view-id, requestid) to a single ID which is passed |
16 // through rest of the speech code. | 17 // through rest of the speech code. |
17 class SpeechInputDispatcherHost::SpeechInputCallers { | 18 class SpeechInputDispatcherHost::SpeechInputCallers { |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
94 int SpeechInputDispatcherHost::SpeechInputCallers::render_view_id(int id) { | 95 int SpeechInputDispatcherHost::SpeechInputCallers::render_view_id(int id) { |
95 return callers_[id].render_view_id; | 96 return callers_[id].render_view_id; |
96 } | 97 } |
97 | 98 |
98 int SpeechInputDispatcherHost::SpeechInputCallers::request_id(int id) { | 99 int SpeechInputDispatcherHost::SpeechInputCallers::request_id(int id) { |
99 return callers_[id].request_id; | 100 return callers_[id].request_id; |
100 } | 101 } |
101 | 102 |
102 //-------------------------- SpeechInputDispatcherHost ------------------------- | 103 //-------------------------- SpeechInputDispatcherHost ------------------------- |
103 | 104 |
104 SpeechInputManager::AccessorMethod* | 105 SpeechInputManager* SpeechInputDispatcherHost::manager_; |
105 SpeechInputDispatcherHost::manager_accessor_ = &SpeechInputManager::Get; | |
106 | 106 |
107 SpeechInputDispatcherHost::SpeechInputDispatcherHost(int render_process_id) | 107 SpeechInputDispatcherHost::SpeechInputDispatcherHost(int render_process_id) |
108 : render_process_id_(render_process_id), | 108 : render_process_id_(render_process_id), |
109 may_have_pending_requests_(false) { | 109 may_have_pending_requests_(false) { |
110 // This is initialized by Browser. Do not add any non-trivial | 110 // This is initialized by Browser. Do not add any non-trivial |
111 // initialization here, instead do it lazily when required (e.g. see the | 111 // initialization here, instead do it lazily when required (e.g. see the |
112 // method |manager()|) or add an Init() method. | 112 // method |manager()|) or add an Init() method. |
113 } | 113 } |
114 | 114 |
115 SpeechInputDispatcherHost::~SpeechInputDispatcherHost() { | 115 SpeechInputDispatcherHost::~SpeechInputDispatcherHost() { |
116 // If the renderer crashed for some reason or if we didn't receive a proper | 116 // If the renderer crashed for some reason or if we didn't receive a proper |
117 // Cancel/Stop call for an existing session, cancel such active sessions now. | 117 // Cancel/Stop call for an existing session, cancel such active sessions now. |
118 // We first check if this dispatcher received any speech IPC requst so that | 118 // We first check if this dispatcher received any speech IPC requst so that |
119 // we don't end up creating the speech input manager for web pages which don't | 119 // we don't end up creating the speech input manager for web pages which don't |
120 // use speech input. | 120 // use speech input. |
121 if (may_have_pending_requests_) | 121 if (may_have_pending_requests_) |
122 manager()->CancelAllRequestsWithDelegate(this); | 122 manager()->CancelAllRequestsWithDelegate(this); |
123 } | 123 } |
124 | 124 |
125 SpeechInputManager* SpeechInputDispatcherHost::manager() { | 125 SpeechInputManager* SpeechInputDispatcherHost::manager() { |
126 return (*manager_accessor_)(); | 126 if (manager_) |
| 127 return manager_; |
| 128 return content::GetContentClient()->browser()->GetSpeechInputManager(); |
127 } | 129 } |
128 | 130 |
129 bool SpeechInputDispatcherHost::OnMessageReceived( | 131 bool SpeechInputDispatcherHost::OnMessageReceived( |
130 const IPC::Message& message, bool* message_was_ok) { | 132 const IPC::Message& message, bool* message_was_ok) { |
131 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 133 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
132 bool handled = true; | 134 bool handled = true; |
133 IPC_BEGIN_MESSAGE_MAP_EX(SpeechInputDispatcherHost, message, | 135 IPC_BEGIN_MESSAGE_MAP_EX(SpeechInputDispatcherHost, message, |
134 *message_was_ok) | 136 *message_was_ok) |
135 IPC_MESSAGE_HANDLER(SpeechInputHostMsg_StartRecognition, | 137 IPC_MESSAGE_HANDLER(SpeechInputHostMsg_StartRecognition, |
136 OnStartRecognition) | 138 OnStartRecognition) |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
206 g_speech_input_callers.Get().render_view_id(caller_id); | 208 g_speech_input_callers.Get().render_view_id(caller_id); |
207 int caller_request_id = g_speech_input_callers.Get().request_id(caller_id); | 209 int caller_request_id = g_speech_input_callers.Get().request_id(caller_id); |
208 Send(new SpeechInputMsg_RecognitionComplete(caller_render_view_id, | 210 Send(new SpeechInputMsg_RecognitionComplete(caller_render_view_id, |
209 caller_request_id)); | 211 caller_request_id)); |
210 // Request sequence ended, so remove mapping. | 212 // Request sequence ended, so remove mapping. |
211 g_speech_input_callers.Get().RemoveId(caller_id); | 213 g_speech_input_callers.Get().RemoveId(caller_id); |
212 VLOG(1) << "SpeechInputDispatcherHost::DidCompleteRecognition exit"; | 214 VLOG(1) << "SpeechInputDispatcherHost::DidCompleteRecognition exit"; |
213 } | 215 } |
214 | 216 |
215 } // namespace speech_input | 217 } // namespace speech_input |
OLD | NEW |