/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "SpeechSynthesisChild.h" #include "nsSynthVoiceRegistry.h" namespace mozilla { namespace dom { SpeechSynthesisChild::SpeechSynthesisChild() { MOZ_COUNT_CTOR(SpeechSynthesisChild); } SpeechSynthesisChild::~SpeechSynthesisChild() { MOZ_COUNT_DTOR(SpeechSynthesisChild); } bool SpeechSynthesisChild::RecvVoiceAdded(const RemoteVoice& aVoice) { nsSynthVoiceRegistry::RecvAddVoice(aVoice); return true; } bool SpeechSynthesisChild::RecvVoiceRemoved(const nsString& aUri) { nsSynthVoiceRegistry::RecvRemoveVoice(aUri); return true; } bool SpeechSynthesisChild::RecvSetDefaultVoice(const nsString& aUri, const bool& aIsDefault) { nsSynthVoiceRegistry::RecvSetDefaultVoice(aUri, aIsDefault); return true; } bool SpeechSynthesisChild::RecvIsSpeakingChanged(const bool& aIsSpeaking) { nsSynthVoiceRegistry::RecvIsSpeakingChanged(aIsSpeaking); return true; } bool SpeechSynthesisChild::RecvNotifyVoicesChanged() { nsSynthVoiceRegistry::RecvNotifyVoicesChanged(); return true; } PSpeechSynthesisRequestChild* SpeechSynthesisChild::AllocPSpeechSynthesisRequestChild(const nsString& aText, const nsString& aLang, const nsString& aUri, const float& aVolume, const float& aRate, const float& aPitch) { MOZ_CRASH("Caller is supposed to manually construct a request!"); } bool SpeechSynthesisChild::DeallocPSpeechSynthesisRequestChild(PSpeechSynthesisRequestChild* aActor) { delete aActor; return true; } // SpeechSynthesisRequestChild SpeechSynthesisRequestChild::SpeechSynthesisRequestChild(SpeechTaskChild* aTask) : mTask(aTask) { mTask->mActor = this; MOZ_COUNT_CTOR(SpeechSynthesisRequestChild); } SpeechSynthesisRequestChild::~SpeechSynthesisRequestChild() { MOZ_COUNT_DTOR(SpeechSynthesisRequestChild); } bool SpeechSynthesisRequestChild::RecvOnStart(const nsString& aUri) { mTask->DispatchStartImpl(aUri); return true; } bool SpeechSynthesisRequestChild::RecvOnEnd(const bool& aIsError, const float& aElapsedTime, const uint32_t& aCharIndex) { SpeechSynthesisRequestChild* actor = mTask->mActor; mTask->mActor = nullptr; if (aIsError) { mTask->DispatchErrorImpl(aElapsedTime, aCharIndex); } else { mTask->DispatchEndImpl(aElapsedTime, aCharIndex); } actor->Send__delete__(actor); return true; } bool SpeechSynthesisRequestChild::RecvOnPause(const float& aElapsedTime, const uint32_t& aCharIndex) { mTask->DispatchPauseImpl(aElapsedTime, aCharIndex); return true; } bool SpeechSynthesisRequestChild::RecvOnResume(const float& aElapsedTime, const uint32_t& aCharIndex) { mTask->DispatchResumeImpl(aElapsedTime, aCharIndex); return true; } bool SpeechSynthesisRequestChild::RecvOnBoundary(const nsString& aName, const float& aElapsedTime, const uint32_t& aCharIndex) { mTask->DispatchBoundaryImpl(aName, aElapsedTime, aCharIndex); return true; } bool SpeechSynthesisRequestChild::RecvOnMark(const nsString& aName, const float& aElapsedTime, const uint32_t& aCharIndex) { mTask->DispatchMarkImpl(aName, aElapsedTime, aCharIndex); return true; } // SpeechTaskChild SpeechTaskChild::SpeechTaskChild(SpeechSynthesisUtterance* aUtterance) : nsSpeechTask(aUtterance) { } NS_IMETHODIMP SpeechTaskChild::Setup(nsISpeechTaskCallback* aCallback, uint32_t aChannels, uint32_t aRate, uint8_t argc) { MOZ_CRASH("Should never be called from child"); } NS_IMETHODIMP SpeechTaskChild::SendAudio(JS::Handle aData, JS::Handle aLandmarks, JSContext* aCx) { MOZ_CRASH("Should never be called from child"); } NS_IMETHODIMP SpeechTaskChild::SendAudioNative(int16_t* aData, uint32_t aDataLen) { MOZ_CRASH("Should never be called from child"); } void SpeechTaskChild::Pause() { MOZ_ASSERT(mActor); mActor->SendPause(); } void SpeechTaskChild::Resume() { MOZ_ASSERT(mActor); mActor->SendResume(); } void SpeechTaskChild::Cancel() { MOZ_ASSERT(mActor); mActor->SendCancel(); } void SpeechTaskChild::ForceEnd() { MOZ_ASSERT(mActor); mActor->SendForceEnd(); } void SpeechTaskChild::SetAudioOutputVolume(float aVolume) { if (mActor) { mActor->SendSetAudioOutputVolume(aVolume); } } } // namespace dom } // namespace mozilla