mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 870676: Part 2 - Implement IPDL for mozFMRadio. r=khuey
This commit is contained in:
parent
f320083266
commit
abf2bdf860
182
dom/fmradio/ipc/FMRadioChild.cpp
Normal file
182
dom/fmradio/ipc/FMRadioChild.cpp
Normal file
@ -0,0 +1,182 @@
|
||||
/* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
|
||||
/* vim: set ts=2 et sw=2 tw=80: */
|
||||
/* 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 "FMRadioChild.h"
|
||||
#include "mozilla/dom/ContentChild.h"
|
||||
#include "mozilla/dom/FMRadioRequestChild.h"
|
||||
|
||||
using namespace mozilla::hal;
|
||||
|
||||
BEGIN_FMRADIO_NAMESPACE
|
||||
|
||||
StaticAutoPtr<FMRadioChild> FMRadioChild::sFMRadioChild;
|
||||
|
||||
FMRadioChild::FMRadioChild()
|
||||
: mEnabled(false)
|
||||
, mFrequency(0)
|
||||
, mObserverList(FMRadioEventObserverList())
|
||||
{
|
||||
MOZ_COUNT_CTOR(FMRadioChild);
|
||||
|
||||
ContentChild::GetSingleton()->SendPFMRadioConstructor(this);
|
||||
|
||||
StatusInfo statusInfo;
|
||||
SendGetStatusInfo(&statusInfo);
|
||||
|
||||
mEnabled = statusInfo.enabled();
|
||||
mFrequency = statusInfo.frequency();
|
||||
mUpperBound = statusInfo.upperBound();
|
||||
mLowerBound= statusInfo.lowerBound();
|
||||
mChannelWidth = statusInfo.channelWidth();
|
||||
}
|
||||
|
||||
FMRadioChild::~FMRadioChild()
|
||||
{
|
||||
MOZ_COUNT_DTOR(FMRadioChild);
|
||||
}
|
||||
|
||||
bool
|
||||
FMRadioChild::IsEnabled() const
|
||||
{
|
||||
return mEnabled;
|
||||
}
|
||||
|
||||
double
|
||||
FMRadioChild::GetFrequency() const
|
||||
{
|
||||
return mFrequency;
|
||||
}
|
||||
|
||||
|
||||
double
|
||||
FMRadioChild::GetFrequencyUpperBound() const
|
||||
{
|
||||
return mUpperBound;
|
||||
}
|
||||
|
||||
double
|
||||
FMRadioChild::GetFrequencyLowerBound() const
|
||||
{
|
||||
return mLowerBound;
|
||||
}
|
||||
|
||||
double
|
||||
FMRadioChild::GetChannelWidth() const
|
||||
{
|
||||
return mChannelWidth;
|
||||
}
|
||||
|
||||
void
|
||||
FMRadioChild::Enable(double aFrequency, ReplyRunnable* aReplyRunnable)
|
||||
{
|
||||
SendRequest(aReplyRunnable, EnableRequestArgs(aFrequency));
|
||||
}
|
||||
|
||||
void
|
||||
FMRadioChild::Disable(ReplyRunnable* aReplyRunnable)
|
||||
{
|
||||
SendRequest(aReplyRunnable, DisableRequestArgs());
|
||||
}
|
||||
|
||||
void
|
||||
FMRadioChild::SetFrequency(double aFrequency,
|
||||
ReplyRunnable* aReplyRunnable)
|
||||
{
|
||||
SendRequest(aReplyRunnable, SetFrequencyRequestArgs(aFrequency));
|
||||
}
|
||||
|
||||
void
|
||||
FMRadioChild::Seek(FMRadioSeekDirection aDirection, ReplyRunnable* aReplyRunnable)
|
||||
{
|
||||
SendRequest(aReplyRunnable, SeekRequestArgs(aDirection));
|
||||
}
|
||||
|
||||
void
|
||||
FMRadioChild::CancelSeek(ReplyRunnable* aReplyRunnable)
|
||||
{
|
||||
SendRequest(aReplyRunnable, CancelSeekRequestArgs());
|
||||
}
|
||||
|
||||
inline void
|
||||
FMRadioChild::NotifyFMRadioEvent(FMRadioEventType aType)
|
||||
{
|
||||
mObserverList.Broadcast(aType);
|
||||
}
|
||||
|
||||
void
|
||||
FMRadioChild::AddObserver(FMRadioEventObserver* aObserver)
|
||||
{
|
||||
mObserverList.AddObserver(aObserver);
|
||||
}
|
||||
|
||||
void
|
||||
FMRadioChild::RemoveObserver(FMRadioEventObserver* aObserver)
|
||||
{
|
||||
mObserverList.RemoveObserver(aObserver);
|
||||
}
|
||||
|
||||
void
|
||||
FMRadioChild::SendRequest(ReplyRunnable* aReplyRunnable,
|
||||
FMRadioRequestArgs aArgs)
|
||||
{
|
||||
PFMRadioRequestChild* childRequest = new FMRadioRequestChild(aReplyRunnable);
|
||||
SendPFMRadioRequestConstructor(childRequest, aArgs);
|
||||
}
|
||||
|
||||
bool
|
||||
FMRadioChild::RecvNotifyFrequencyChanged(const double& aFrequency)
|
||||
{
|
||||
mFrequency = aFrequency;
|
||||
NotifyFMRadioEvent(FrequencyChanged);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
FMRadioChild::RecvNotifyEnabledChanged(const bool& aEnabled,
|
||||
const double& aFrequency)
|
||||
{
|
||||
mEnabled = aEnabled;
|
||||
mFrequency = aFrequency;
|
||||
NotifyFMRadioEvent(EnabledChanged);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
FMRadioChild::Recv__delete__()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
PFMRadioRequestChild*
|
||||
FMRadioChild::AllocPFMRadioRequestChild(const FMRadioRequestArgs& aArgs)
|
||||
{
|
||||
MOZ_CRASH();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bool
|
||||
FMRadioChild::DeallocPFMRadioRequestChild(PFMRadioRequestChild* aActor)
|
||||
{
|
||||
delete aActor;
|
||||
return true;
|
||||
}
|
||||
|
||||
// static
|
||||
FMRadioChild*
|
||||
FMRadioChild::Singleton()
|
||||
{
|
||||
MOZ_ASSERT(XRE_GetProcessType() != GeckoProcessType_Default);
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
|
||||
if (!sFMRadioChild) {
|
||||
sFMRadioChild = new FMRadioChild();
|
||||
}
|
||||
|
||||
return sFMRadioChild;
|
||||
}
|
||||
|
||||
END_FMRADIO_NAMESPACE
|
||||
|
91
dom/fmradio/ipc/FMRadioChild.h
Normal file
91
dom/fmradio/ipc/FMRadioChild.h
Normal file
@ -0,0 +1,91 @@
|
||||
/* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
|
||||
/* vim: set ts=2 et sw=2 tw=80: */
|
||||
/* 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/. */
|
||||
|
||||
#ifndef mozilla_dom_fmradiochild_h__
|
||||
#define mozilla_dom_fmradiochild_h__
|
||||
|
||||
#include "FMRadioCommon.h"
|
||||
#include "FMRadioService.h"
|
||||
#include "mozilla/dom/PFMRadioChild.h"
|
||||
#include "mozilla/StaticPtr.h"
|
||||
|
||||
BEGIN_FMRADIO_NAMESPACE
|
||||
|
||||
/**
|
||||
* FMRadioChild plays two roles:
|
||||
* - Kind of proxy of FMRadioService
|
||||
* Redirect all the requests coming from web content to FMRadioService
|
||||
* in parent through IPC channel.
|
||||
* - Child Actor of PFMRadio
|
||||
* IPC channel to transfer the requests.
|
||||
*/
|
||||
class FMRadioChild MOZ_FINAL : public IFMRadioService
|
||||
, public PFMRadioChild
|
||||
{
|
||||
public:
|
||||
static FMRadioChild* Singleton();
|
||||
~FMRadioChild();
|
||||
|
||||
void SendRequest(ReplyRunnable* aReplyRunnable, FMRadioRequestArgs aArgs);
|
||||
|
||||
/* IFMRadioService */
|
||||
virtual bool IsEnabled() const MOZ_OVERRIDE;
|
||||
virtual double GetFrequency() const MOZ_OVERRIDE;
|
||||
virtual double GetFrequencyUpperBound() const MOZ_OVERRIDE;
|
||||
virtual double GetFrequencyLowerBound() const MOZ_OVERRIDE;
|
||||
virtual double GetChannelWidth() const MOZ_OVERRIDE;
|
||||
|
||||
virtual void Enable(double aFrequency, ReplyRunnable* aReplyRunnable) MOZ_OVERRIDE;
|
||||
virtual void Disable(ReplyRunnable* aReplyRunnable) MOZ_OVERRIDE;
|
||||
virtual void SetFrequency(double frequency,
|
||||
ReplyRunnable* aReplyRunnable) MOZ_OVERRIDE;
|
||||
virtual void Seek(mozilla::hal::FMRadioSeekDirection aDirection,
|
||||
ReplyRunnable* aReplyRunnable) MOZ_OVERRIDE;
|
||||
virtual void CancelSeek(ReplyRunnable* aReplyRunnable) MOZ_OVERRIDE;
|
||||
|
||||
virtual void AddObserver(FMRadioEventObserver* aObserver) MOZ_OVERRIDE;
|
||||
virtual void RemoveObserver(FMRadioEventObserver* aObserver) MOZ_OVERRIDE;
|
||||
|
||||
/* PFMRadioChild */
|
||||
virtual bool
|
||||
Recv__delete__() MOZ_OVERRIDE;
|
||||
|
||||
virtual bool
|
||||
RecvNotifyFrequencyChanged(const double& aFrequency) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool
|
||||
RecvNotifyEnabledChanged(const bool& aEnabled,
|
||||
const double& aFrequency) MOZ_OVERRIDE;
|
||||
|
||||
virtual PFMRadioRequestChild*
|
||||
AllocPFMRadioRequestChild(const FMRadioRequestArgs& aArgs) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool
|
||||
DeallocPFMRadioRequestChild(PFMRadioRequestChild* aActor) MOZ_OVERRIDE;
|
||||
|
||||
private:
|
||||
FMRadioChild();
|
||||
|
||||
void Init();
|
||||
|
||||
inline void NotifyFMRadioEvent(FMRadioEventType aType);
|
||||
|
||||
bool mEnabled;
|
||||
double mFrequency;
|
||||
double mUpperBound;
|
||||
double mLowerBound;
|
||||
double mChannelWidth;
|
||||
|
||||
FMRadioEventObserverList mObserverList;
|
||||
|
||||
private:
|
||||
static StaticAutoPtr<FMRadioChild> sFMRadioChild;
|
||||
};
|
||||
|
||||
END_FMRADIO_NAMESPACE
|
||||
|
||||
#endif // mozilla_dom_fmradiochild_h__
|
||||
|
101
dom/fmradio/ipc/FMRadioParent.cpp
Normal file
101
dom/fmradio/ipc/FMRadioParent.cpp
Normal file
@ -0,0 +1,101 @@
|
||||
/* -*- 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<FMRadioRequestParent> 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();
|
||||
}
|
||||
|
||||
return requestParent.forget().get();
|
||||
}
|
||||
|
||||
bool
|
||||
FMRadioParent::DeallocPFMRadioRequestParent(PFMRadioRequestParent* aActor)
|
||||
{
|
||||
FMRadioRequestParent* parent = static_cast<FMRadioRequestParent*>(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;
|
||||
}
|
||||
}
|
||||
|
||||
END_FMRADIO_NAMESPACE
|
||||
|
41
dom/fmradio/ipc/FMRadioParent.h
Normal file
41
dom/fmradio/ipc/FMRadioParent.h
Normal file
@ -0,0 +1,41 @@
|
||||
/* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
|
||||
/* vim: set ts=2 et sw=2 tw=80: */
|
||||
/* 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/. */
|
||||
|
||||
#ifndef mozilla_dom_fmradioparent_h__
|
||||
#define mozilla_dom_fmradioparent_h__
|
||||
|
||||
#include "FMRadioCommon.h"
|
||||
#include "mozilla/dom/PFMRadioParent.h"
|
||||
#include "mozilla/HalTypes.h"
|
||||
|
||||
BEGIN_FMRADIO_NAMESPACE
|
||||
|
||||
class PFMRadioRequestParent;
|
||||
|
||||
class FMRadioParent MOZ_FINAL : public PFMRadioParent
|
||||
, public FMRadioEventObserver
|
||||
{
|
||||
public:
|
||||
FMRadioParent();
|
||||
~FMRadioParent();
|
||||
|
||||
virtual bool
|
||||
RecvGetStatusInfo(StatusInfo* aStatusInfo) MOZ_OVERRIDE;
|
||||
|
||||
virtual PFMRadioRequestParent*
|
||||
AllocPFMRadioRequestParent(const FMRadioRequestArgs& aArgs) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool
|
||||
DeallocPFMRadioRequestParent(PFMRadioRequestParent* aActor) MOZ_OVERRIDE;
|
||||
|
||||
/* FMRadioEventObserver */
|
||||
virtual void Notify(const FMRadioEventType& aType) MOZ_OVERRIDE;
|
||||
};
|
||||
|
||||
END_FMRADIO_NAMESPACE
|
||||
|
||||
#endif // mozilla_dom_fmradioparent_h__
|
||||
|
33
dom/fmradio/ipc/FMRadioRequestChild.cpp
Normal file
33
dom/fmradio/ipc/FMRadioRequestChild.cpp
Normal file
@ -0,0 +1,33 @@
|
||||
/* -*- 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 "mozilla/dom/PFMRadioRequestChild.h"
|
||||
#include "FMRadioRequestChild.h"
|
||||
#include "FMRadioService.h"
|
||||
|
||||
BEGIN_FMRADIO_NAMESPACE
|
||||
|
||||
FMRadioRequestChild::FMRadioRequestChild(ReplyRunnable* aReplyRunnable)
|
||||
: mReplyRunnable(aReplyRunnable)
|
||||
{
|
||||
MOZ_COUNT_CTOR(FMRadioRequestChild);
|
||||
}
|
||||
|
||||
FMRadioRequestChild::~FMRadioRequestChild()
|
||||
{
|
||||
MOZ_COUNT_DTOR(FMRadioRequestChild);
|
||||
}
|
||||
|
||||
bool
|
||||
FMRadioRequestChild::Recv__delete__(const FMRadioResponseType& aType)
|
||||
{
|
||||
mReplyRunnable->SetReply(aType);
|
||||
NS_DispatchToMainThread(mReplyRunnable);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
END_FMRADIO_NAMESPACE
|
||||
|
34
dom/fmradio/ipc/FMRadioRequestChild.h
Normal file
34
dom/fmradio/ipc/FMRadioRequestChild.h
Normal file
@ -0,0 +1,34 @@
|
||||
/* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
|
||||
/* vim: set ts=2 et sw=2 tw=80: */
|
||||
/* 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/. */
|
||||
|
||||
#ifndef mozilla_dom_fmradiorequestchild_h__
|
||||
#define mozilla_dom_fmradiorequestchild_h__
|
||||
|
||||
#include "FMRadioCommon.h"
|
||||
#include "mozilla/dom/PFMRadioRequestChild.h"
|
||||
#include "DOMRequest.h"
|
||||
|
||||
BEGIN_FMRADIO_NAMESPACE
|
||||
|
||||
class ReplyRunnable;
|
||||
|
||||
class FMRadioRequestChild MOZ_FINAL : public PFMRadioRequestChild
|
||||
{
|
||||
public:
|
||||
FMRadioRequestChild(ReplyRunnable* aReplyRunnable);
|
||||
~FMRadioRequestChild();
|
||||
|
||||
virtual bool
|
||||
Recv__delete__(const FMRadioResponseType& aResponse) MOZ_OVERRIDE;
|
||||
|
||||
private:
|
||||
nsRefPtr<ReplyRunnable> mReplyRunnable;
|
||||
};
|
||||
|
||||
END_FMRADIO_NAMESPACE
|
||||
|
||||
#endif // mozilla_dom_fmradiorequestchild_h__
|
||||
|
43
dom/fmradio/ipc/FMRadioRequestParent.cpp
Normal file
43
dom/fmradio/ipc/FMRadioRequestParent.cpp
Normal file
@ -0,0 +1,43 @@
|
||||
/* -*- 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 "FMRadioRequestParent.h"
|
||||
#include "FMRadioService.h"
|
||||
#include "mozilla/unused.h"
|
||||
#include "mozilla/dom/PFMRadio.h"
|
||||
|
||||
BEGIN_FMRADIO_NAMESPACE
|
||||
|
||||
FMRadioRequestParent::FMRadioRequestParent()
|
||||
: mActorDestroyed(false)
|
||||
{
|
||||
MOZ_COUNT_CTOR(FMRadioRequestParent);
|
||||
}
|
||||
|
||||
FMRadioRequestParent::~FMRadioRequestParent()
|
||||
{
|
||||
MOZ_COUNT_DTOR(FMRadioRequestParent);
|
||||
}
|
||||
|
||||
void
|
||||
FMRadioRequestParent::ActorDestroy(ActorDestroyReason aWhy)
|
||||
{
|
||||
mActorDestroyed = true;
|
||||
}
|
||||
|
||||
nsresult
|
||||
FMRadioRequestParent::Run()
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread(), "Wrong thread!");
|
||||
|
||||
if (!mActorDestroyed) {
|
||||
unused << Send__delete__(this, mResponseType);
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
END_FMRADIO_NAMESPACE
|
||||
|
34
dom/fmradio/ipc/FMRadioRequestParent.h
Normal file
34
dom/fmradio/ipc/FMRadioRequestParent.h
Normal file
@ -0,0 +1,34 @@
|
||||
/* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
|
||||
/* vim: set ts=2 et sw=2 tw=80: */
|
||||
/* 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/. */
|
||||
|
||||
#ifndef mozilla_dom_fmradiorequestparent_h__
|
||||
#define mozilla_dom_fmradiorequestparent_h__
|
||||
|
||||
#include "FMRadioCommon.h"
|
||||
#include "mozilla/dom/PFMRadioRequestParent.h"
|
||||
#include "FMRadioService.h"
|
||||
|
||||
BEGIN_FMRADIO_NAMESPACE
|
||||
|
||||
class FMRadioRequestParent MOZ_FINAL : public PFMRadioRequestParent
|
||||
, public ReplyRunnable
|
||||
{
|
||||
public:
|
||||
FMRadioRequestParent();
|
||||
~FMRadioRequestParent();
|
||||
|
||||
virtual void ActorDestroy(ActorDestroyReason aWhy) MOZ_OVERRIDE;
|
||||
|
||||
NS_IMETHOD Run();
|
||||
|
||||
private:
|
||||
bool mActorDestroyed;
|
||||
};
|
||||
|
||||
END_FMRADIO_NAMESPACE
|
||||
|
||||
#endif // mozilla_dom_fmradiorequestparent_h__
|
||||
|
20
dom/fmradio/ipc/Makefile.in
Normal file
20
dom/fmradio/ipc/Makefile.in
Normal file
@ -0,0 +1,20 @@
|
||||
# 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/.
|
||||
|
||||
DEPTH = @DEPTH@
|
||||
topsrcdir = @top_srcdir@
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
|
||||
LOCAL_INCLUDES += \
|
||||
-I$(topsrcdir)/dom/fmradio \
|
||||
$(NULL)
|
||||
|
||||
include $(topsrcdir)/dom/dom-config.mk
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
include $(topsrcdir)/ipc/chromium/chromium-config.mk
|
||||
|
94
dom/fmradio/ipc/PFMRadio.ipdl
Normal file
94
dom/fmradio/ipc/PFMRadio.ipdl
Normal file
@ -0,0 +1,94 @@
|
||||
/* 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 "mozilla/HalTypes.h";
|
||||
|
||||
include protocol PContent;
|
||||
include protocol PFMRadioRequest;
|
||||
|
||||
using mozilla::hal::FMRadioSeekDirection;
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
struct EnableRequestArgs
|
||||
{
|
||||
double frequency;
|
||||
};
|
||||
|
||||
struct DisableRequestArgs
|
||||
{
|
||||
};
|
||||
|
||||
struct SetFrequencyRequestArgs
|
||||
{
|
||||
double frequency;
|
||||
};
|
||||
|
||||
struct SeekRequestArgs
|
||||
{
|
||||
FMRadioSeekDirection direction;
|
||||
};
|
||||
|
||||
struct CancelSeekRequestArgs
|
||||
{
|
||||
};
|
||||
|
||||
union FMRadioRequestArgs
|
||||
{
|
||||
EnableRequestArgs;
|
||||
DisableRequestArgs;
|
||||
SetFrequencyRequestArgs;
|
||||
SeekRequestArgs;
|
||||
CancelSeekRequestArgs;
|
||||
};
|
||||
|
||||
struct StatusInfo
|
||||
{
|
||||
bool enabled;
|
||||
double frequency;
|
||||
double upperBound;
|
||||
double lowerBound;
|
||||
double channelWidth;
|
||||
};
|
||||
|
||||
sync protocol PFMRadio
|
||||
{
|
||||
manager PContent;
|
||||
manages PFMRadioRequest;
|
||||
|
||||
child:
|
||||
/**
|
||||
* Sent when the frequency is changed.
|
||||
*/
|
||||
NotifyFrequencyChanged(double frequency);
|
||||
/**
|
||||
* Sent when the power state of FM radio HW is changed.
|
||||
*/
|
||||
NotifyEnabledChanged(bool enabled, double frequency);
|
||||
|
||||
__delete__();
|
||||
|
||||
parent:
|
||||
/**
|
||||
* Get the current status infomation of FM radio HW synchronously.
|
||||
* Sent when the singleton object of FMRadioChild is initialized.
|
||||
*/
|
||||
sync GetStatusInfo() returns (StatusInfo info);
|
||||
|
||||
/**
|
||||
* Send request to parent process to operate the FM radio HW.
|
||||
*
|
||||
* We don't have separate Enable/SetFrequency/etc. methods instead here,
|
||||
* because we can leverage the IPC messaging mechanism to manage the mapping
|
||||
* of the asynchronous request and the DOMRequest we returned to the caller
|
||||
* on web content, otherwise, we have to do the mapping stuff manually which
|
||||
* is more error prone.
|
||||
*/
|
||||
PFMRadioRequest(FMRadioRequestArgs requestType);
|
||||
};
|
||||
|
||||
} // namespace dom
|
||||
} // namespace mozilla
|
||||
|
43
dom/fmradio/ipc/PFMRadioRequest.ipdl
Normal file
43
dom/fmradio/ipc/PFMRadioRequest.ipdl
Normal file
@ -0,0 +1,43 @@
|
||||
/* 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 protocol PFMRadio;
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
struct ErrorResponse
|
||||
{
|
||||
nsString error;
|
||||
};
|
||||
|
||||
struct SuccessResponse
|
||||
{
|
||||
};
|
||||
|
||||
union FMRadioResponseType
|
||||
{
|
||||
ErrorResponse;
|
||||
SuccessResponse;
|
||||
};
|
||||
|
||||
/**
|
||||
* The protocol is used for sending asynchronous operation requests of
|
||||
* FM radio HW from child to parent, and the type of the request is defined in
|
||||
* FMRadioRequestArgs.
|
||||
*
|
||||
* When the request completed, the result, i.e. FMRadioResponseType, will be
|
||||
* sent back to child from parent in the `__delete__` message.
|
||||
*/
|
||||
async protocol PFMRadioRequest
|
||||
{
|
||||
manager PFMRadio;
|
||||
|
||||
child:
|
||||
__delete__(FMRadioResponseType response);
|
||||
};
|
||||
|
||||
} // namespace dom
|
||||
} // namespace mozilla
|
||||
|
25
dom/fmradio/ipc/moz.build
Normal file
25
dom/fmradio/ipc/moz.build
Normal file
@ -0,0 +1,25 @@
|
||||
# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
|
||||
# vim: set filetype=python:
|
||||
# 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/.
|
||||
|
||||
EXPORTS.mozilla.dom += [
|
||||
'FMRadioChild.h',
|
||||
'FMRadioParent.h',
|
||||
'FMRadioRequestChild.h',
|
||||
'FMRadioRequestParent.h',
|
||||
]
|
||||
|
||||
CPP_SOURCES += [
|
||||
'FMRadioChild.cpp',
|
||||
'FMRadioParent.cpp',
|
||||
'FMRadioRequestChild.cpp',
|
||||
'FMRadioRequestParent.cpp',
|
||||
]
|
||||
|
||||
FAIL_ON_WARNINGS = True
|
||||
|
||||
LIBXUL_LIBRARY = True
|
||||
LIBRARY_NAME = 'domfmradio_s'
|
||||
|
@ -98,6 +98,7 @@
|
||||
#include "mozilla/dom/mobilemessage/SmsChild.h"
|
||||
#include "mozilla/dom/devicestorage/DeviceStorageRequestChild.h"
|
||||
#include "mozilla/dom/bluetooth/PBluetoothChild.h"
|
||||
#include "mozilla/dom/PFMRadioChild.h"
|
||||
#include "mozilla/ipc/InputStreamUtils.h"
|
||||
|
||||
#ifdef MOZ_WEBSPEECH
|
||||
@ -954,6 +955,30 @@ ContentChild::DeallocPBluetoothChild(PBluetoothChild* aActor)
|
||||
#endif
|
||||
}
|
||||
|
||||
PFMRadioChild*
|
||||
ContentChild::AllocPFMRadioChild()
|
||||
{
|
||||
#ifdef MOZ_B2G_FM
|
||||
NS_RUNTIMEABORT("No one should be allocating PFMRadioChild actors");
|
||||
return nullptr;
|
||||
#else
|
||||
NS_RUNTIMEABORT("No support for FMRadio on this platform!");
|
||||
return nullptr;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool
|
||||
ContentChild::DeallocPFMRadioChild(PFMRadioChild* aActor)
|
||||
{
|
||||
#ifdef MOZ_B2G_FM
|
||||
delete aActor;
|
||||
return true;
|
||||
#else
|
||||
NS_RUNTIMEABORT("No support for FMRadio on this platform!");
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
PSpeechSynthesisChild*
|
||||
ContentChild::AllocPSpeechSynthesisChild()
|
||||
{
|
||||
|
@ -158,6 +158,9 @@ public:
|
||||
virtual PBluetoothChild* AllocPBluetoothChild();
|
||||
virtual bool DeallocPBluetoothChild(PBluetoothChild* aActor);
|
||||
|
||||
virtual PFMRadioChild* AllocPFMRadioChild();
|
||||
virtual bool DeallocPFMRadioChild(PFMRadioChild* aActor);
|
||||
|
||||
virtual PSpeechSynthesisChild* AllocPSpeechSynthesisChild();
|
||||
virtual bool DeallocPSpeechSynthesisChild(PSpeechSynthesisChild* aActor);
|
||||
|
||||
|
@ -32,6 +32,7 @@
|
||||
#include "mozilla/dom/power/PowerManagerService.h"
|
||||
#include "mozilla/dom/DOMStorageIPC.h"
|
||||
#include "mozilla/dom/bluetooth/PBluetoothParent.h"
|
||||
#include "mozilla/dom/PFMRadioParent.h"
|
||||
#include "mozilla/dom/devicestorage/DeviceStorageRequestParent.h"
|
||||
#include "SmsParent.h"
|
||||
#include "mozilla/Hal.h"
|
||||
@ -125,6 +126,11 @@ using namespace mozilla::system;
|
||||
#endif
|
||||
|
||||
#include "JavaScriptParent.h"
|
||||
|
||||
#ifdef MOZ_B2G_FM
|
||||
#include "mozilla/dom/FMRadioParent.h"
|
||||
#endif
|
||||
|
||||
#include "Crypto.h"
|
||||
|
||||
#ifdef MOZ_WEBSPEECH
|
||||
@ -2291,6 +2297,32 @@ ContentParent::RecvPBluetoothConstructor(PBluetoothParent* aActor)
|
||||
#endif
|
||||
}
|
||||
|
||||
PFMRadioParent*
|
||||
ContentParent::AllocPFMRadioParent()
|
||||
{
|
||||
#ifdef MOZ_B2G_FM
|
||||
if (!AssertAppProcessPermission(this, "fmradio")) {
|
||||
return nullptr;
|
||||
}
|
||||
return new FMRadioParent();
|
||||
#else
|
||||
NS_WARNING("No support for FMRadio on this platform!");
|
||||
return nullptr;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool
|
||||
ContentParent::DeallocPFMRadioParent(PFMRadioParent* aActor)
|
||||
{
|
||||
#ifdef MOZ_B2G_FM
|
||||
delete aActor;
|
||||
return true;
|
||||
#else
|
||||
NS_WARNING("No support for FMRadio on this platform!");
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
PSpeechSynthesisParent*
|
||||
ContentParent::AllocPSpeechSynthesisParent()
|
||||
{
|
||||
|
@ -328,6 +328,9 @@ private:
|
||||
virtual bool DeallocPBluetoothParent(PBluetoothParent* aActor);
|
||||
virtual bool RecvPBluetoothConstructor(PBluetoothParent* aActor);
|
||||
|
||||
virtual PFMRadioParent* AllocPFMRadioParent();
|
||||
virtual bool DeallocPFMRadioParent(PFMRadioParent* aActor);
|
||||
|
||||
virtual PSpeechSynthesisParent* AllocPSpeechSynthesisParent();
|
||||
virtual bool DeallocPSpeechSynthesisParent(PSpeechSynthesisParent* aActor);
|
||||
virtual bool RecvPSpeechSynthesisConstructor(PSpeechSynthesisParent* aActor);
|
||||
|
@ -32,6 +32,7 @@ LOCAL_INCLUDES += \
|
||||
-I$(topsrcdir)/hal/sandbox \
|
||||
-I$(topsrcdir)/dom/mobilemessage/src/ipc \
|
||||
-I$(topsrcdir)/dom/devicestorage \
|
||||
-I$(topsrcdir)/dom/fmradio/ipc \
|
||||
-I$(topsrcdir)/widget/xpwidgets \
|
||||
-I$(topsrcdir)/dom/bluetooth \
|
||||
-I$(topsrcdir)/layout/base \
|
||||
|
@ -11,6 +11,7 @@ include protocol PCompositor;
|
||||
include protocol PCrashReporter;
|
||||
include protocol PExternalHelperApp;
|
||||
include protocol PDeviceStorageRequest;
|
||||
include protocol PFMRadio;
|
||||
include protocol PHal;
|
||||
include protocol PImageBridge;
|
||||
include protocol PIndexedDB;
|
||||
@ -126,6 +127,40 @@ union DeviceStorageParams
|
||||
DeviceStorageAvailableParams;
|
||||
};
|
||||
|
||||
struct FMRadioRequestEnableParams
|
||||
{
|
||||
double frequency;
|
||||
};
|
||||
|
||||
struct FMRadioRequestDisableParams
|
||||
{
|
||||
|
||||
};
|
||||
|
||||
struct FMRadioRequestSetFrequencyParams
|
||||
{
|
||||
double frequency;
|
||||
};
|
||||
|
||||
struct FMRadioRequestSeekParams
|
||||
{
|
||||
bool upward;
|
||||
};
|
||||
|
||||
struct FMRadioRequestCancelSeekParams
|
||||
{
|
||||
|
||||
};
|
||||
|
||||
union FMRadioRequestParams
|
||||
{
|
||||
FMRadioRequestEnableParams;
|
||||
FMRadioRequestDisableParams;
|
||||
FMRadioRequestSetFrequencyParams;
|
||||
FMRadioRequestSeekParams;
|
||||
FMRadioRequestCancelSeekParams;
|
||||
};
|
||||
|
||||
union PrefValue {
|
||||
nsCString;
|
||||
int32_t;
|
||||
@ -154,6 +189,7 @@ rpc protocol PContent
|
||||
manages PCrashReporter;
|
||||
manages PDeviceStorageRequest;
|
||||
manages PExternalHelperApp;
|
||||
manages PFMRadio;
|
||||
manages PHal;
|
||||
manages PIndexedDB;
|
||||
manages PMemoryReportRequest;
|
||||
@ -319,6 +355,8 @@ parent:
|
||||
|
||||
PBluetooth();
|
||||
|
||||
PFMRadio();
|
||||
|
||||
// Services remoting
|
||||
|
||||
async StartVisitedQuery(URIParams uri);
|
||||
|
Loading…
Reference in New Issue
Block a user