зеркало из https://github.com/mozilla/gecko-dev.git
Bug 697641, part 3: Make Sensor API available for Sandbox. r=cjones
Add Sensor API to PHal protocol that Sandbox can access sensors.
This commit is contained in:
Родитель
cee1f7b77a
Коммит
8d1dae936a
61
hal/Hal.cpp
61
hal/Hal.cpp
|
@ -200,7 +200,7 @@ class ObserversManager
|
|||
public:
|
||||
void AddObserver(Observer<InfoType>* aObserver) {
|
||||
if (!mObservers) {
|
||||
mObservers = new ObserverList<InfoType>();
|
||||
mObservers = new mozilla::ObserverList<InfoType>();
|
||||
}
|
||||
|
||||
mObservers->AddObserver(aObserver);
|
||||
|
@ -250,7 +250,7 @@ protected:
|
|||
virtual void GetCurrentInformationInternal(InfoType*) = 0;
|
||||
|
||||
private:
|
||||
ObserverList<InfoType>* mObservers;
|
||||
mozilla::ObserverList<InfoType>* mObservers;
|
||||
InfoType mInfo;
|
||||
bool mHasValidCache;
|
||||
};
|
||||
|
@ -344,6 +344,63 @@ void SetScreenBrightness(double brightness)
|
|||
PROXY_IF_SANDBOXED(SetScreenBrightness(clamped(brightness, 0.0, 1.0)));
|
||||
}
|
||||
|
||||
void
|
||||
EnableSensorNotifications(SensorType aSensor) {
|
||||
AssertMainThread();
|
||||
PROXY_IF_SANDBOXED(EnableSensorNotifications(aSensor));
|
||||
}
|
||||
|
||||
void
|
||||
DisableSensorNotifications(SensorType aSensor) {
|
||||
AssertMainThread();
|
||||
PROXY_IF_SANDBOXED(DisableSensorNotifications(aSensor));
|
||||
}
|
||||
|
||||
typedef mozilla::ObserverList<SensorData> SensorObserverList;
|
||||
static SensorObserverList *gSensorObservers = NULL;
|
||||
|
||||
static SensorObserverList &
|
||||
GetSensorObservers(SensorType sensor_type) {
|
||||
MOZ_ASSERT(sensor_type < NUM_SENSOR_TYPE);
|
||||
|
||||
if(gSensorObservers == NULL)
|
||||
gSensorObservers = new SensorObserverList[NUM_SENSOR_TYPE];
|
||||
return gSensorObservers[sensor_type];
|
||||
}
|
||||
|
||||
void
|
||||
RegisterSensorObserver(SensorType aSensor, ISensorObserver *aObserver) {
|
||||
SensorObserverList &observers = GetSensorObservers(aSensor);
|
||||
|
||||
AssertMainThread();
|
||||
|
||||
observers.AddObserver(aObserver);
|
||||
if(observers.Length() == 1) {
|
||||
EnableSensorNotifications(aSensor);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
UnregisterSensorObserver(SensorType aSensor, ISensorObserver *aObserver) {
|
||||
SensorObserverList &observers = GetSensorObservers(aSensor);
|
||||
|
||||
AssertMainThread();
|
||||
|
||||
observers.RemoveObserver(aObserver);
|
||||
if(observers.Length() == 0) {
|
||||
DisableSensorNotifications(aSensor);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
NotifySensorChange(const SensorData &aSensorData) {
|
||||
SensorObserverList &observers = GetSensorObservers(aSensorData.sensor());
|
||||
|
||||
AssertMainThread();
|
||||
|
||||
observers.Broadcast(aSensorData);
|
||||
}
|
||||
|
||||
void
|
||||
RegisterNetworkObserver(NetworkObserver* aObserver)
|
||||
{
|
||||
|
|
|
@ -100,6 +100,13 @@ parent:
|
|||
Reboot();
|
||||
PowerOff();
|
||||
|
||||
child:
|
||||
NotifySensorChange(SensorData aSensorData);
|
||||
|
||||
parent:
|
||||
EnableSensorNotifications(SensorType aSensor);
|
||||
DisableSensorNotifications(SensorType aSensor);
|
||||
|
||||
__delete__();
|
||||
};
|
||||
|
||||
|
|
|
@ -164,9 +164,20 @@ PowerOff()
|
|||
Hal()->SendPowerOff();
|
||||
}
|
||||
|
||||
void
|
||||
EnableSensorNotifications(SensorType aSensor) {
|
||||
Hal()->SendEnableSensorNotifications(aSensor);
|
||||
}
|
||||
|
||||
void
|
||||
DisableSensorNotifications(SensorType aSensor) {
|
||||
Hal()->SendDisableSensorNotifications(aSensor);
|
||||
}
|
||||
|
||||
class HalParent : public PHalParent
|
||||
, public BatteryObserver
|
||||
, public NetworkObserver
|
||||
, public ISensorObserver
|
||||
{
|
||||
public:
|
||||
NS_OVERRIDE virtual bool
|
||||
|
@ -293,6 +304,22 @@ public:
|
|||
hal::PowerOff();
|
||||
return true;
|
||||
}
|
||||
|
||||
NS_OVERRIDE virtual bool
|
||||
RecvEnableSensorNotifications(const SensorType &aSensor) {
|
||||
hal::RegisterSensorObserver(aSensor, this);
|
||||
return true;
|
||||
}
|
||||
|
||||
NS_OVERRIDE virtual bool
|
||||
RecvDisableSensorNotifications(const SensorType &aSensor) {
|
||||
hal::UnregisterSensorObserver(aSensor, this);
|
||||
return true;
|
||||
}
|
||||
|
||||
void Notify(const SensorData& aSensorData) {
|
||||
unused << SendNotifySensorChange(aSensorData);
|
||||
}
|
||||
};
|
||||
|
||||
class HalChild : public PHalChild {
|
||||
|
@ -303,6 +330,9 @@ public:
|
|||
return true;
|
||||
}
|
||||
|
||||
NS_OVERRIDE virtual bool
|
||||
RecvNotifySensorChange(const hal::SensorData &aSensorData);
|
||||
|
||||
NS_OVERRIDE virtual bool
|
||||
RecvNotifyNetworkChange(const NetworkInformation& aNetworkInfo) {
|
||||
hal::NotifyNetworkChange(aNetworkInfo);
|
||||
|
@ -310,6 +340,13 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
bool
|
||||
HalChild::RecvNotifySensorChange(const hal::SensorData &aSensorData) {
|
||||
hal::NotifySensorChange(aSensorData);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
PHalChild* CreateHalChild() {
|
||||
return new HalChild();
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче