void SpeechRecognition::Start(ErrorResult& aRv) { if (!mCurrentState == STATE_IDLE) { aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR); return; } nsAutoCString speechRecognitionServiceCID; GetRecognitionServiceCID(speechRecognitionServiceCID); nsresult rv; mRecognitionService = do_GetService(speechRecognitionServiceCID.get(), &rv); NS_ENSURE_SUCCESS_VOID(rv); rv = mRecognitionService->Initialize(this->asWeakPtr()); NS_ENSURE_SUCCESS_VOID(rv); AutoSafeJSContext cx; MediaStreamConstraints constraints; constraints.mAudio.SetAsBoolean() = true; if (!mTestConfig.mFakeFSMEvents) { MediaManager* manager = MediaManager::Get(); manager->GetUserMedia(cx, false, GetOwner(), constraints, new GetUserMediaSuccessCallback(this), new GetUserMediaErrorCallback(this)); } nsRefPtr<SpeechEvent> event = new SpeechEvent(this, EVENT_START); NS_DispatchToMainThread(event); }
void SpeechRecognition::Start(const Optional<NonNull<DOMMediaStream>>& aStream, ErrorResult& aRv) { if (mCurrentState != STATE_IDLE) { aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR); return; } nsAutoCString speechRecognitionServiceCID; GetRecognitionServiceCID(speechRecognitionServiceCID); nsresult rv; mRecognitionService = do_GetService(speechRecognitionServiceCID.get(), &rv); NS_ENSURE_SUCCESS_VOID(rv); rv = mRecognitionService->Initialize(this); NS_ENSURE_SUCCESS_VOID(rv); MediaStreamConstraints constraints; constraints.mAudio.SetAsBoolean() = true; if (aStream.WasPassed()) { StartRecording(&aStream.Value()); } else { MediaManager* manager = MediaManager::Get(); manager->GetUserMedia(false, GetOwner(), constraints, new GetUserMediaSuccessCallback(this), new GetUserMediaErrorCallback(this)); } nsRefPtr<SpeechEvent> event = new SpeechEvent(this, EVENT_START); NS_DispatchToMainThread(event); }