OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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_recognition_manager_impl.h" | 5 #include "content/browser/speech/speech_recognition_manager_impl.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/location.h" | |
9 #include "base/single_thread_task_runner.h" | |
10 #include "base/thread_task_runner_handle.h" | |
11 #include "content/browser/browser_main_loop.h" | 8 #include "content/browser/browser_main_loop.h" |
12 #include "content/browser/renderer_host/media/media_stream_manager.h" | 9 #include "content/browser/renderer_host/media/media_stream_manager.h" |
13 #include "content/browser/renderer_host/media/media_stream_ui_proxy.h" | 10 #include "content/browser/renderer_host/media/media_stream_ui_proxy.h" |
14 #include "content/browser/speech/google_one_shot_remote_engine.h" | 11 #include "content/browser/speech/google_one_shot_remote_engine.h" |
15 #include "content/browser/speech/google_streaming_remote_engine.h" | 12 #include "content/browser/speech/google_streaming_remote_engine.h" |
16 #include "content/browser/speech/speech_recognition_engine.h" | 13 #include "content/browser/speech/speech_recognition_engine.h" |
17 #include "content/browser/speech/speech_recognizer_impl.h" | 14 #include "content/browser/speech/speech_recognizer_impl.h" |
18 #include "content/public/browser/browser_thread.h" | 15 #include "content/public/browser/browser_thread.h" |
19 #include "content/public/browser/content_browser_client.h" | 16 #include "content/public/browser/content_browser_client.h" |
20 #include "content/public/browser/resource_context.h" | 17 #include "content/public/browser/resource_context.h" |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
206 context.request_id, | 203 context.request_id, |
207 StreamOptions(true, false), | 204 StreamOptions(true, false), |
208 GURL(context.context_name), | 205 GURL(context.context_name), |
209 base::Bind( | 206 base::Bind( |
210 &SpeechRecognitionManagerImpl::MediaRequestPermissionCallback, | 207 &SpeechRecognitionManagerImpl::MediaRequestPermissionCallback, |
211 weak_factory_.GetWeakPtr(), session_id)); | 208 weak_factory_.GetWeakPtr(), session_id)); |
212 return; | 209 return; |
213 } | 210 } |
214 | 211 |
215 if (is_allowed) { | 212 if (is_allowed) { |
216 base::ThreadTaskRunnerHandle::Get()->PostTask( | 213 base::MessageLoop::current()->PostTask( |
217 FROM_HERE, | 214 FROM_HERE, |
218 base::Bind(&SpeechRecognitionManagerImpl::DispatchEvent, | 215 base::Bind(&SpeechRecognitionManagerImpl::DispatchEvent, |
219 weak_factory_.GetWeakPtr(), session_id, EVENT_START)); | 216 weak_factory_.GetWeakPtr(), |
| 217 session_id, |
| 218 EVENT_START)); |
220 } else { | 219 } else { |
221 OnRecognitionError(session_id, SpeechRecognitionError( | 220 OnRecognitionError(session_id, SpeechRecognitionError( |
222 SPEECH_RECOGNITION_ERROR_NOT_ALLOWED)); | 221 SPEECH_RECOGNITION_ERROR_NOT_ALLOWED)); |
223 base::ThreadTaskRunnerHandle::Get()->PostTask( | 222 base::MessageLoop::current()->PostTask( |
224 FROM_HERE, | 223 FROM_HERE, |
225 base::Bind(&SpeechRecognitionManagerImpl::DispatchEvent, | 224 base::Bind(&SpeechRecognitionManagerImpl::DispatchEvent, |
226 weak_factory_.GetWeakPtr(), session_id, EVENT_ABORT)); | 225 weak_factory_.GetWeakPtr(), |
| 226 session_id, |
| 227 EVENT_ABORT)); |
227 } | 228 } |
228 } | 229 } |
229 | 230 |
230 void SpeechRecognitionManagerImpl::MediaRequestPermissionCallback( | 231 void SpeechRecognitionManagerImpl::MediaRequestPermissionCallback( |
231 int session_id, | 232 int session_id, |
232 const MediaStreamDevices& devices, | 233 const MediaStreamDevices& devices, |
233 scoped_ptr<MediaStreamUIProxy> stream_ui) { | 234 scoped_ptr<MediaStreamUIProxy> stream_ui) { |
234 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 235 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
235 | 236 |
236 SessionsTable::iterator iter = sessions_.find(session_id); | 237 SessionsTable::iterator iter = sessions_.find(session_id); |
(...skipping 22 matching lines...) Expand all Loading... |
259 return; | 260 return; |
260 | 261 |
261 SessionsTable::iterator iter = sessions_.find(session_id); | 262 SessionsTable::iterator iter = sessions_.find(session_id); |
262 iter->second->ui.reset(); | 263 iter->second->ui.reset(); |
263 | 264 |
264 if (iter->second->abort_requested) | 265 if (iter->second->abort_requested) |
265 return; | 266 return; |
266 | 267 |
267 iter->second->abort_requested = true; | 268 iter->second->abort_requested = true; |
268 | 269 |
269 base::ThreadTaskRunnerHandle::Get()->PostTask( | 270 base::MessageLoop::current()->PostTask( |
270 FROM_HERE, | 271 FROM_HERE, |
271 base::Bind(&SpeechRecognitionManagerImpl::DispatchEvent, | 272 base::Bind(&SpeechRecognitionManagerImpl::DispatchEvent, |
272 weak_factory_.GetWeakPtr(), session_id, EVENT_ABORT)); | 273 weak_factory_.GetWeakPtr(), |
| 274 session_id, |
| 275 EVENT_ABORT)); |
273 } | 276 } |
274 | 277 |
275 void SpeechRecognitionManagerImpl::StopAudioCaptureForSession(int session_id) { | 278 void SpeechRecognitionManagerImpl::StopAudioCaptureForSession(int session_id) { |
276 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 279 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
277 if (!SessionExists(session_id)) | 280 if (!SessionExists(session_id)) |
278 return; | 281 return; |
279 | 282 |
280 SessionsTable::iterator iter = sessions_.find(session_id); | 283 SessionsTable::iterator iter = sessions_.find(session_id); |
281 iter->second->ui.reset(); | 284 iter->second->ui.reset(); |
282 | 285 |
283 base::ThreadTaskRunnerHandle::Get()->PostTask( | 286 base::MessageLoop::current()->PostTask( |
284 FROM_HERE, | 287 FROM_HERE, |
285 base::Bind(&SpeechRecognitionManagerImpl::DispatchEvent, | 288 base::Bind(&SpeechRecognitionManagerImpl::DispatchEvent, |
286 weak_factory_.GetWeakPtr(), session_id, EVENT_STOP_CAPTURE)); | 289 weak_factory_.GetWeakPtr(), |
| 290 session_id, |
| 291 EVENT_STOP_CAPTURE)); |
287 } | 292 } |
288 | 293 |
289 // Here begins the SpeechRecognitionEventListener interface implementation, | 294 // Here begins the SpeechRecognitionEventListener interface implementation, |
290 // which will simply relay the events to the proper listener registered for the | 295 // which will simply relay the events to the proper listener registered for the |
291 // particular session and to the catch-all listener provided by the delegate | 296 // particular session and to the catch-all listener provided by the delegate |
292 // (if any). | 297 // (if any). |
293 | 298 |
294 void SpeechRecognitionManagerImpl::OnRecognitionStart(int session_id) { | 299 void SpeechRecognitionManagerImpl::OnRecognitionStart(int session_id) { |
295 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 300 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
296 if (!SessionExists(session_id)) | 301 if (!SessionExists(session_id)) |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
360 | 365 |
361 void SpeechRecognitionManagerImpl::OnAudioEnd(int session_id) { | 366 void SpeechRecognitionManagerImpl::OnAudioEnd(int session_id) { |
362 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 367 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
363 if (!SessionExists(session_id)) | 368 if (!SessionExists(session_id)) |
364 return; | 369 return; |
365 | 370 |
366 if (SpeechRecognitionEventListener* delegate_listener = GetDelegateListener()) | 371 if (SpeechRecognitionEventListener* delegate_listener = GetDelegateListener()) |
367 delegate_listener->OnAudioEnd(session_id); | 372 delegate_listener->OnAudioEnd(session_id); |
368 if (SpeechRecognitionEventListener* listener = GetListener(session_id)) | 373 if (SpeechRecognitionEventListener* listener = GetListener(session_id)) |
369 listener->OnAudioEnd(session_id); | 374 listener->OnAudioEnd(session_id); |
370 base::ThreadTaskRunnerHandle::Get()->PostTask( | 375 base::MessageLoop::current()->PostTask( |
371 FROM_HERE, | 376 FROM_HERE, |
372 base::Bind(&SpeechRecognitionManagerImpl::DispatchEvent, | 377 base::Bind(&SpeechRecognitionManagerImpl::DispatchEvent, |
373 weak_factory_.GetWeakPtr(), session_id, EVENT_AUDIO_ENDED)); | 378 weak_factory_.GetWeakPtr(), |
| 379 session_id, |
| 380 EVENT_AUDIO_ENDED)); |
374 } | 381 } |
375 | 382 |
376 void SpeechRecognitionManagerImpl::OnRecognitionResults( | 383 void SpeechRecognitionManagerImpl::OnRecognitionResults( |
377 int session_id, const SpeechRecognitionResults& results) { | 384 int session_id, const SpeechRecognitionResults& results) { |
378 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 385 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
379 if (!SessionExists(session_id)) | 386 if (!SessionExists(session_id)) |
380 return; | 387 return; |
381 | 388 |
382 if (SpeechRecognitionEventListener* delegate_listener = GetDelegateListener()) | 389 if (SpeechRecognitionEventListener* delegate_listener = GetDelegateListener()) |
383 delegate_listener->OnRecognitionResults(session_id, results); | 390 delegate_listener->OnRecognitionResults(session_id, results); |
(...skipping 27 matching lines...) Expand all Loading... |
411 | 418 |
412 void SpeechRecognitionManagerImpl::OnRecognitionEnd(int session_id) { | 419 void SpeechRecognitionManagerImpl::OnRecognitionEnd(int session_id) { |
413 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 420 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
414 if (!SessionExists(session_id)) | 421 if (!SessionExists(session_id)) |
415 return; | 422 return; |
416 | 423 |
417 if (SpeechRecognitionEventListener* delegate_listener = GetDelegateListener()) | 424 if (SpeechRecognitionEventListener* delegate_listener = GetDelegateListener()) |
418 delegate_listener->OnRecognitionEnd(session_id); | 425 delegate_listener->OnRecognitionEnd(session_id); |
419 if (SpeechRecognitionEventListener* listener = GetListener(session_id)) | 426 if (SpeechRecognitionEventListener* listener = GetListener(session_id)) |
420 listener->OnRecognitionEnd(session_id); | 427 listener->OnRecognitionEnd(session_id); |
421 base::ThreadTaskRunnerHandle::Get()->PostTask( | 428 base::MessageLoop::current()->PostTask( |
422 FROM_HERE, base::Bind(&SpeechRecognitionManagerImpl::DispatchEvent, | 429 FROM_HERE, |
423 weak_factory_.GetWeakPtr(), session_id, | 430 base::Bind(&SpeechRecognitionManagerImpl::DispatchEvent, |
424 EVENT_RECOGNITION_ENDED)); | 431 weak_factory_.GetWeakPtr(), |
| 432 session_id, |
| 433 EVENT_RECOGNITION_ENDED)); |
425 } | 434 } |
426 | 435 |
427 int SpeechRecognitionManagerImpl::GetSession( | 436 int SpeechRecognitionManagerImpl::GetSession( |
428 int render_process_id, int render_view_id, int request_id) const { | 437 int render_process_id, int render_view_id, int request_id) const { |
429 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 438 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
430 SessionsTable::const_iterator iter; | 439 SessionsTable::const_iterator iter; |
431 for (iter = sessions_.begin(); iter != sessions_.end(); ++iter) { | 440 for (iter = sessions_.begin(); iter != sessions_.end(); ++iter) { |
432 const int session_id = iter->first; | 441 const int session_id = iter->first; |
433 const SpeechRecognitionSessionContext& context = iter->second->context; | 442 const SpeechRecognitionSessionContext& context = iter->second->context; |
434 if (context.render_process_id == render_process_id && | 443 if (context.render_process_id == render_process_id && |
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
685 SpeechRecognitionManagerImpl::Session::Session() | 694 SpeechRecognitionManagerImpl::Session::Session() |
686 : id(kSessionIDInvalid), | 695 : id(kSessionIDInvalid), |
687 abort_requested(false), | 696 abort_requested(false), |
688 listener_is_active(true) { | 697 listener_is_active(true) { |
689 } | 698 } |
690 | 699 |
691 SpeechRecognitionManagerImpl::Session::~Session() { | 700 SpeechRecognitionManagerImpl::Session::~Session() { |
692 } | 701 } |
693 | 702 |
694 } // namespace content | 703 } // namespace content |
OLD | NEW |