Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(43)

Side by Side Diff: chrome/browser/speech/speech_input_extension_manager.cc

Issue 9688012: Refactoring of chrome speech recognition architecture (CL1.2) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chrome/browser/speech/speech_input_extension_manager.h" 5 #include "chrome/browser/speech/speech_input_extension_manager.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/json/json_writer.h" 8 #include "base/json/json_writer.h"
9 #include "base/utf_string_conversions.h" 9 #include "base/utf_string_conversions.h"
10 #include "base/values.h" 10 #include "base/values.h"
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 SpeechInputExtensionManager::GetSpeechInputExtensionInterface() { 230 SpeechInputExtensionManager::GetSpeechInputExtensionInterface() {
231 return speech_interface_ ? speech_interface_ : this; 231 return speech_interface_ ? speech_interface_ : this;
232 } 232 }
233 233
234 void SpeechInputExtensionManager::ResetToIdleState() { 234 void SpeechInputExtensionManager::ResetToIdleState() {
235 VLOG(1) << "State changed to idle. Deassociating any extensions."; 235 VLOG(1) << "State changed to idle. Deassociating any extensions.";
236 state_ = kIdle; 236 state_ = kIdle;
237 extension_id_in_use_.clear(); 237 extension_id_in_use_.clear();
238 } 238 }
239 239
240 void SpeechInputExtensionManager::SetRecognitionResult( 240 void SpeechInputExtensionManager::OnRecognitionResult(
241 int caller_id, 241 int caller_id,
Satish 2012/03/13 15:30:15 change 'caller_id' to 'session_id' throughout to m
Primiano Tucci (use gerrit) 2012/03/14 09:40:35 See previous reply
242 const content::SpeechRecognitionResult& result) { 242 const content::SpeechRecognitionResult& result) {
243 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 243 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
244 DCHECK_EQ(caller_id, kSpeechCallerId); 244 DCHECK_EQ(caller_id, kSpeechCallerId);
245 245
246 // Stopping will start the disassociation with the extension. 246 // Stopping will start the disassociation with the extension.
247 // Make a copy to report the results to the proper one. 247 // Make a copy to report the results to the proper one.
248 std::string extension_id = extension_id_in_use_; 248 std::string extension_id = extension_id_in_use_;
249 ForceStopOnIOThread(); 249 ForceStopOnIOThread();
250 250
251 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 251 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
(...skipping 24 matching lines...) Expand all
276 js_hypothesis_object->SetDouble(kConfidenceKey, 276 js_hypothesis_object->SetDouble(kConfidenceKey,
277 hypothesis.confidence); 277 hypothesis.confidence);
278 } 278 }
279 279
280 std::string json_args; 280 std::string json_args;
281 base::JSONWriter::Write(&args, false, &json_args); 281 base::JSONWriter::Write(&args, false, &json_args);
282 VLOG(1) << "Results: " << json_args; 282 VLOG(1) << "Results: " << json_args;
283 DispatchEventToExtension(extension_id, kOnResultEvent, json_args); 283 DispatchEventToExtension(extension_id, kOnResultEvent, json_args);
284 } 284 }
285 285
286 void SpeechInputExtensionManager::DidStartReceivingAudio(int caller_id) { 286 void SpeechInputExtensionManager::OnRecognitionStart(int caller_id) {
287 VLOG(1) << "DidStartReceivingAudio"; 287 DCHECK_EQ(caller_id, kSpeechCallerId);
288 }
289
290 void SpeechInputExtensionManager::OnAudioStart(int caller_id) {
291 VLOG(1) << "OnAudioStart";
288 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 292 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
289 DCHECK_EQ(caller_id, kSpeechCallerId); 293 DCHECK_EQ(caller_id, kSpeechCallerId);
290 294
291 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 295 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
292 base::Bind(&SpeechInputExtensionManager::DidStartReceivingAudioOnUIThread, 296 base::Bind(&SpeechInputExtensionManager::DidStartReceivingAudioOnUIThread,
293 this)); 297 this));
294 } 298 }
295 299
296 void SpeechInputExtensionManager::DidCompleteRecording(int caller_id) { 300 void SpeechInputExtensionManager::OnAudioEnd(int caller_id) {
297 DCHECK_EQ(caller_id, kSpeechCallerId); 301 DCHECK_EQ(caller_id, kSpeechCallerId);
298 } 302 }
299 303
300 void SpeechInputExtensionManager::DidCompleteRecognition(int caller_id) { 304 void SpeechInputExtensionManager::OnRecognitionEnd(int caller_id,
305 bool success) {
301 DCHECK_EQ(caller_id, kSpeechCallerId); 306 DCHECK_EQ(caller_id, kSpeechCallerId);
302 } 307 }
303 308
304 void SpeechInputExtensionManager::DidStartReceivingAudioOnUIThread() { 309 void SpeechInputExtensionManager::DidStartReceivingAudioOnUIThread() {
305 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 310 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
306 311
307 base::AutoLock auto_lock(state_lock_); 312 base::AutoLock auto_lock(state_lock_);
308 if (state_ == kShutdown) 313 if (state_ == kShutdown)
309 return; 314 return;
310 315
(...skipping 17 matching lines...) Expand all
328 prefs::kSpeechInputTrayNotificationShown, true); 333 prefs::kSpeechInputTrayNotificationShown, true);
329 } 334 }
330 335
331 VLOG(1) << "Sending start notification"; 336 VLOG(1) << "Sending start notification";
332 content::NotificationService::current()->Notify( 337 content::NotificationService::current()->Notify(
333 chrome::NOTIFICATION_EXTENSION_SPEECH_INPUT_RECORDING_STARTED, 338 chrome::NOTIFICATION_EXTENSION_SPEECH_INPUT_RECORDING_STARTED,
334 content::Source<Profile>(profile_), 339 content::Source<Profile>(profile_),
335 content::Details<std::string>(&extension_id_in_use_)); 340 content::Details<std::string>(&extension_id_in_use_));
336 } 341 }
337 342
338 void SpeechInputExtensionManager::OnRecognizerError( 343 void SpeechInputExtensionManager::OnRecognitionError(
339 int caller_id, content::SpeechRecognitionErrorCode error) { 344 int caller_id, const content::SpeechRecognitionErrorCode& error) {
340 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 345 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
341 DCHECK_EQ(caller_id, kSpeechCallerId); 346 DCHECK_EQ(caller_id, kSpeechCallerId);
342 VLOG(1) << "OnRecognizerError: " << error; 347 VLOG(1) << "OnRecognitionError: " << error;
343 348
344 base::AutoLock auto_lock(state_lock_); 349 base::AutoLock auto_lock(state_lock_);
345 if (state_ == kShutdown) 350 if (state_ == kShutdown)
346 return; 351 return;
347 352
348 // Release the recognizer object. 353 // Release the recognizer object.
349 GetSpeechInputExtensionInterface()->StopRecording(true); 354 GetSpeechInputExtensionInterface()->StopRecording(true);
350 355
351 std::string event_error_code; 356 std::string event_error_code;
352 bool report_to_event = true; 357 bool report_to_event = true;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 NOTREACHED(); 393 NOTREACHED();
389 } 394 }
390 395
391 if (!event_error_code.empty()) { 396 if (!event_error_code.empty()) {
392 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 397 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
393 base::Bind(&SpeechInputExtensionManager::DispatchError, 398 base::Bind(&SpeechInputExtensionManager::DispatchError,
394 this, event_error_code, report_to_event)); 399 this, event_error_code, report_to_event));
395 } 400 }
396 } 401 }
397 402
398 void SpeechInputExtensionManager::DidCompleteEnvironmentEstimation( 403 void SpeechInputExtensionManager::OnEnvironmentEstimationComplete(
399 int caller_id) { 404 int caller_id) {
400 DCHECK_EQ(caller_id, kSpeechCallerId); 405 DCHECK_EQ(caller_id, kSpeechCallerId);
401 } 406 }
402 407
403 void SpeechInputExtensionManager::DidStartReceivingSpeech(int caller_id) { 408 void SpeechInputExtensionManager::OnSoundStart(int caller_id) {
404 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 409 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
405 DCHECK_EQ(caller_id, kSpeechCallerId); 410 DCHECK_EQ(caller_id, kSpeechCallerId);
406 VLOG(1) << "DidStartReceivingSpeech"; 411 VLOG(1) << "OnSoundStart";
407 412
408 std::string json_args; 413 std::string json_args;
409 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 414 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
410 base::Bind(&SpeechInputExtensionManager::DispatchEventToExtension, 415 base::Bind(&SpeechInputExtensionManager::DispatchEventToExtension,
411 this, extension_id_in_use_, std::string(kOnSoundStartEvent), 416 this, extension_id_in_use_, std::string(kOnSoundStartEvent),
412 json_args)); 417 json_args));
413 } 418 }
414 419
415 void SpeechInputExtensionManager::DidStopReceivingSpeech(int caller_id) { 420 void SpeechInputExtensionManager::OnSoundEnd(int caller_id) {
416 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 421 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
417 DCHECK_EQ(caller_id, kSpeechCallerId); 422 DCHECK_EQ(caller_id, kSpeechCallerId);
418 VLOG(1) << "DidStopReceivingSpeech"; 423 VLOG(1) << "OnSoundEnd";
419 424
420 std::string json_args; 425 std::string json_args;
421 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 426 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
422 base::Bind(&SpeechInputExtensionManager::DispatchEventToExtension, 427 base::Bind(&SpeechInputExtensionManager::DispatchEventToExtension,
423 this, extension_id_in_use_, std::string(kOnSoundEndEvent), 428 this, extension_id_in_use_, std::string(kOnSoundEndEvent),
424 json_args)); 429 json_args));
425 } 430 }
426 431
427 void SpeechInputExtensionManager::DispatchEventToExtension( 432 void SpeechInputExtensionManager::DispatchEventToExtension(
428 const std::string& extension_id, const std::string& event, 433 const std::string& extension_id, const std::string& event,
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
595 } 600 }
596 601
597 void SpeechInputExtensionManager::IsRecordingOnUIThread( 602 void SpeechInputExtensionManager::IsRecordingOnUIThread(
598 const IsRecordingCallback& callback, 603 const IsRecordingCallback& callback,
599 bool result) { 604 bool result) {
600 BrowserThread::CurrentlyOn(BrowserThread::UI); 605 BrowserThread::CurrentlyOn(BrowserThread::UI);
601 callback.Run(result); 606 callback.Run(result);
602 } 607 }
603 608
604 void SpeechInputExtensionManager::StartRecording( 609 void SpeechInputExtensionManager::StartRecording(
605 content::SpeechRecognizerDelegate* delegate, 610 content::SpeechRecognitionEventListener* delegate,
hans 2012/03/13 14:32:46 event_listener?
Primiano Tucci (use gerrit) 2012/03/14 09:40:35 Right. Renaming to just "listener", as agreed offl
606 net::URLRequestContextGetter* context_getter, 611 net::URLRequestContextGetter* context_getter,
607 int caller_id, 612 int caller_id,
608 const std::string& language, 613 const std::string& language,
609 const std::string& grammar, 614 const std::string& grammar,
610 bool filter_profanities) { 615 bool filter_profanities) {
611 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 616 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
612 DCHECK(!recognizer_); 617 DCHECK(!recognizer_);
613 recognizer_ = content::SpeechRecognizer::Create( 618 recognizer_ = content::SpeechRecognizer::Create(
614 delegate, caller_id, language, grammar, context_getter, 619 delegate, caller_id, language, grammar, context_getter,
615 filter_profanities, "", ""); 620 filter_profanities, "", "");
616 recognizer_->StartRecording(); 621 recognizer_->StartRecognition();
617 } 622 }
618 623
619 bool SpeechInputExtensionManager::HasValidRecognizer() { 624 bool SpeechInputExtensionManager::HasValidRecognizer() {
620 return !!recognizer_; 625 return !!recognizer_;
621 } 626 }
622 627
623 bool SpeechInputExtensionManager::Stop(const std::string& extension_id, 628 bool SpeechInputExtensionManager::Stop(const std::string& extension_id,
624 std::string* error) { 629 std::string* error) {
625 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 630 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
626 DCHECK(error); 631 DCHECK(error);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
675 680
676 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 681 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
677 base::Bind(&SpeechInputExtensionManager::StopSucceededOnUIThread, this)); 682 base::Bind(&SpeechInputExtensionManager::StopSucceededOnUIThread, this));
678 } 683 }
679 684
680 void SpeechInputExtensionManager::StopRecording(bool recognition_failed) { 685 void SpeechInputExtensionManager::StopRecording(bool recognition_failed) {
681 if (recognizer_) { 686 if (recognizer_) {
682 // Recognition is already cancelled in case of failure. 687 // Recognition is already cancelled in case of failure.
683 // Double-cancelling leads to assertion failures. 688 // Double-cancelling leads to assertion failures.
684 if (!recognition_failed) 689 if (!recognition_failed)
685 recognizer_->CancelRecognition(); 690 recognizer_->AbortRecognition();
686 recognizer_.release(); 691 recognizer_.release();
687 } 692 }
688 } 693 }
689 694
690 void SpeechInputExtensionManager::StopSucceededOnUIThread() { 695 void SpeechInputExtensionManager::StopSucceededOnUIThread() {
691 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 696 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
692 VLOG(1) << "Stop succeeded (UI thread)"; 697 VLOG(1) << "Stop succeeded (UI thread)";
693 698
694 base::AutoLock auto_lock(state_lock_); 699 base::AutoLock auto_lock(state_lock_);
695 if (state_ == kShutdown) 700 if (state_ == kShutdown)
696 return; 701 return;
697 702
698 std::string extension_id = extension_id_in_use_; 703 std::string extension_id = extension_id_in_use_;
699 ResetToIdleState(); 704 ResetToIdleState();
700 705
701 DCHECK(notification_.get()); 706 DCHECK(notification_.get());
702 notification_->Hide(); 707 notification_->Hide();
703 708
704 content::NotificationService::current()->Notify( 709 content::NotificationService::current()->Notify(
705 chrome::NOTIFICATION_EXTENSION_SPEECH_INPUT_RECORDING_STOPPED, 710 chrome::NOTIFICATION_EXTENSION_SPEECH_INPUT_RECORDING_STOPPED,
706 // Guarded by the state_ == kShutdown check. 711 // Guarded by the state_ == kShutdown check.
707 content::Source<Profile>(profile_), 712 content::Source<Profile>(profile_),
708 content::Details<std::string>(&extension_id)); 713 content::Details<std::string>(&extension_id));
709 } 714 }
710 715
711 void SpeechInputExtensionManager::SetInputVolume(int caller_id, 716 void SpeechInputExtensionManager::OnAudioLevelsChanged(int caller_id,
712 float volume, 717 float volume,
713 float noise_volume) { 718 float noise_volume) {
714 DCHECK_EQ(caller_id, kSpeechCallerId); 719 DCHECK_EQ(caller_id, kSpeechCallerId);
715 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 720 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
716 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 721 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
717 base::Bind(&SpeechInputExtensionManager::SetInputVolumeOnUIThread, 722 base::Bind(&SpeechInputExtensionManager::SetInputVolumeOnUIThread,
718 this, volume)); 723 this, volume));
719 } 724 }
720 725
721 void SpeechInputExtensionManager::SetInputVolumeOnUIThread( 726 void SpeechInputExtensionManager::SetInputVolumeOnUIThread(
722 float volume) { 727 float volume) {
723 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 728 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
724 DCHECK(notification_.get()); 729 DCHECK(notification_.get());
725 notification_->SetVUMeterVolume(volume); 730 notification_->SetVUMeterVolume(volume);
726 } 731 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698