diff -r 000000000000 -r 6474c204b198 dom/fmradio/ipc/FMRadioParent.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dom/fmradio/ipc/FMRadioParent.cpp Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,109 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* 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 "FMRadioParent.h" +#include "mozilla/unused.h" +#include "mozilla/dom/ContentParent.h" +#include "FMRadioRequestParent.h" +#include "FMRadioService.h" + +BEGIN_FMRADIO_NAMESPACE + +FMRadioParent::FMRadioParent() +{ + MOZ_COUNT_CTOR(FMRadioParent); + + IFMRadioService::Singleton()->AddObserver(this); +} + +FMRadioParent::~FMRadioParent() +{ + MOZ_COUNT_DTOR(FMRadioParent); + + IFMRadioService::Singleton()->RemoveObserver(this); +} + +bool +FMRadioParent::RecvGetStatusInfo(StatusInfo* aStatusInfo) +{ + aStatusInfo->enabled() = IFMRadioService::Singleton()->IsEnabled(); + aStatusInfo->frequency() = IFMRadioService::Singleton()->GetFrequency(); + aStatusInfo->upperBound() = + IFMRadioService::Singleton()->GetFrequencyUpperBound(); + aStatusInfo->lowerBound() = + IFMRadioService::Singleton()->GetFrequencyLowerBound(); + aStatusInfo->channelWidth() = + IFMRadioService::Singleton()->GetChannelWidth(); + return true; +} + +PFMRadioRequestParent* +FMRadioParent::AllocPFMRadioRequestParent(const FMRadioRequestArgs& aArgs) +{ + nsRefPtr requestParent = new FMRadioRequestParent(); + + switch (aArgs.type()) { + case FMRadioRequestArgs::TEnableRequestArgs: + IFMRadioService::Singleton()->Enable( + aArgs.get_EnableRequestArgs().frequency(), requestParent); + break; + case FMRadioRequestArgs::TDisableRequestArgs: + IFMRadioService::Singleton()->Disable(requestParent); + break; + case FMRadioRequestArgs::TSetFrequencyRequestArgs: + IFMRadioService::Singleton()->SetFrequency( + aArgs.get_SetFrequencyRequestArgs().frequency(), requestParent); + break; + case FMRadioRequestArgs::TSeekRequestArgs: + IFMRadioService::Singleton()->Seek( + aArgs.get_SeekRequestArgs().direction(), requestParent); + break; + case FMRadioRequestArgs::TCancelSeekRequestArgs: + IFMRadioService::Singleton()->CancelSeek(requestParent); + break; + default: + MOZ_CRASH(); + } + + // Balanced in DeallocPFMRadioRequestParent + return requestParent.forget().take(); +} + +bool +FMRadioParent::DeallocPFMRadioRequestParent(PFMRadioRequestParent* aActor) +{ + FMRadioRequestParent* parent = static_cast(aActor); + NS_RELEASE(parent); + return true; +} + +void +FMRadioParent::Notify(const FMRadioEventType& aType) +{ + switch (aType) { + case FrequencyChanged: + unused << SendNotifyFrequencyChanged( + IFMRadioService::Singleton()->GetFrequency()); + break; + case EnabledChanged: + unused << SendNotifyEnabledChanged( + IFMRadioService::Singleton()->IsEnabled(), + IFMRadioService::Singleton()->GetFrequency()); + break; + default: + NS_RUNTIMEABORT("not reached"); + break; + } +} + +bool +FMRadioParent::RecvEnableAudio(const bool& aAudioEnabled) +{ + IFMRadioService::Singleton()->EnableAudio(aAudioEnabled); + return true; +} + +END_FMRADIO_NAMESPACE +