gecko/dom/alarm/AlarmHalService.cpp
Justin Lebar 56db9a6e24 Bug 772987 - Part 2: Use Static{Auto,Ref}Ptr where appropriate. r=mounir
--HG--
extra : rebase_source : 4e3e72ba53cd0177160f80231eebeb4972119eec
2012-07-26 15:33:45 -04:00

99 lines
2.0 KiB
C++

/* 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 "AlarmHalService.h"
namespace mozilla {
namespace dom {
namespace alarm {
using namespace hal;
NS_IMPL_ISUPPORTS1(AlarmHalService, nsIAlarmHalService)
void
AlarmHalService::Init()
{
mAlarmEnabled = RegisterTheOneAlarmObserver(this);
}
/* virtual */ AlarmHalService::~AlarmHalService()
{
if (mAlarmEnabled) {
UnregisterTheOneAlarmObserver();
}
}
/* static */ StaticRefPtr<AlarmHalService> AlarmHalService::sSingleton;
/* static */ already_AddRefed<nsIAlarmHalService>
AlarmHalService::GetInstance()
{
if (!sSingleton) {
sSingleton = new AlarmHalService();
sSingleton->Init();
ClearOnShutdown(&sSingleton);
}
nsCOMPtr<nsIAlarmHalService> service(do_QueryInterface(sSingleton));
return service.forget();
}
NS_IMETHODIMP
AlarmHalService::SetAlarm(PRInt32 aSeconds, PRInt32 aNanoseconds, bool* aStatus)
{
if (!mAlarmEnabled) {
return NS_ERROR_FAILURE;
}
bool status = hal::SetAlarm(aSeconds, aNanoseconds);
if (status) {
*aStatus = status;
return NS_OK;
} else {
return NS_ERROR_FAILURE;
}
}
NS_IMETHODIMP
AlarmHalService::SetAlarmFiredCb(nsIAlarmFiredCb* aAlarmFiredCb)
{
mAlarmFiredCb = aAlarmFiredCb;
return NS_OK;
}
NS_IMETHODIMP
AlarmHalService::SetTimezoneChangedCb(nsITimezoneChangedCb* aTimeZoneChangedCb)
{
mTimezoneChangedCb = aTimeZoneChangedCb;
return NS_OK;
}
void
AlarmHalService::Notify(const mozilla::void_t& aVoid)
{
if (mAlarmFiredCb) {
mAlarmFiredCb->OnAlarmFired();
}
}
PRInt32
AlarmHalService::GetTimezoneOffset(bool aIgnoreDST)
{
PRExplodedTime prTime;
PR_ExplodeTime(PR_Now(), PR_LocalTimeParameters, &prTime);
PRInt32 offset = prTime.tm_params.tp_gmt_offset;
if (!aIgnoreDST) {
offset += prTime.tm_params.tp_dst_offset;
}
return -(offset / 60);
}
} // alarm
} // dom
} // mozilla