summaryrefslogtreecommitdiffstats
path: root/dom/battery/BatteryManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'dom/battery/BatteryManager.cpp')
-rw-r--r--dom/battery/BatteryManager.cpp212
1 files changed, 0 insertions, 212 deletions
diff --git a/dom/battery/BatteryManager.cpp b/dom/battery/BatteryManager.cpp
deleted file mode 100644
index 271fa373d..000000000
--- a/dom/battery/BatteryManager.cpp
+++ /dev/null
@@ -1,212 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=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 <cmath>
-#include <limits>
-#include "BatteryManager.h"
-#include "Constants.h"
-#include "mozilla/DOMEventTargetHelper.h"
-#include "mozilla/Hal.h"
-#include "mozilla/dom/BatteryManagerBinding.h"
-#include "mozilla/Preferences.h"
-#include "nsContentUtils.h"
-#include "nsIDOMClassInfo.h"
-#include "nsIDocument.h"
-
-/**
- * We have to use macros here because our leak analysis tool things we are
- * leaking strings when we have |static const nsString|. Sad :(
- */
-#define LEVELCHANGE_EVENT_NAME NS_LITERAL_STRING("levelchange")
-#define CHARGINGCHANGE_EVENT_NAME NS_LITERAL_STRING("chargingchange")
-#define DISCHARGINGTIMECHANGE_EVENT_NAME NS_LITERAL_STRING("dischargingtimechange")
-#define CHARGINGTIMECHANGE_EVENT_NAME NS_LITERAL_STRING("chargingtimechange")
-
-namespace mozilla {
-namespace dom {
-namespace battery {
-
-BatteryManager::BatteryManager(nsPIDOMWindowInner* aWindow)
- : DOMEventTargetHelper(aWindow)
- , mLevel(kDefaultLevel)
- , mCharging(kDefaultCharging)
- , mRemainingTime(kDefaultRemainingTime)
-{
-}
-
-void
-BatteryManager::Init()
-{
- hal::RegisterBatteryObserver(this);
-
- hal::BatteryInformation batteryInfo;
- hal::GetCurrentBatteryInformation(&batteryInfo);
-
- UpdateFromBatteryInfo(batteryInfo);
-}
-
-void
-BatteryManager::Shutdown()
-{
- hal::UnregisterBatteryObserver(this);
-}
-
-JSObject*
-BatteryManager::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
-{
- return BatteryManagerBinding::Wrap(aCx, this, aGivenProto);
-}
-
-bool
-BatteryManager::Charging() const
-{
- MOZ_ASSERT(NS_IsMainThread());
- // For testing, unable to report the battery status information
- if (Preferences::GetBool("dom.battery.test.default", false)) {
- return true;
- }
- if (Preferences::GetBool("dom.battery.test.charging", false)) {
- return true;
- }
- if (Preferences::GetBool("dom.battery.test.discharging", false)) {
- return false;
- }
-
- return mCharging;
-}
-
-double
-BatteryManager::DischargingTime() const
-{
- MOZ_ASSERT(NS_IsMainThread());
- // For testing, unable to report the battery status information
- if (Preferences::GetBool("dom.battery.test.default", false)) {
- return std::numeric_limits<double>::infinity();
- }
- if (Preferences::GetBool("dom.battery.test.discharging", false)) {
- return 42.0;
- }
-
- if (Charging() || mRemainingTime == kUnknownRemainingTime) {
- return std::numeric_limits<double>::infinity();
- }
-
- return mRemainingTime;
-}
-
-double
-BatteryManager::ChargingTime() const
-{
- MOZ_ASSERT(NS_IsMainThread());
- // For testing, unable to report the battery status information
- if (Preferences::GetBool("dom.battery.test.default", false)) {
- return 0.0;
- }
- if (Preferences::GetBool("dom.battery.test.charging", false)) {
- return 42.0;
- }
-
- if (!Charging() || mRemainingTime == kUnknownRemainingTime) {
- return std::numeric_limits<double>::infinity();
- }
-
- return mRemainingTime;
-}
-
-double
-BatteryManager::Level() const
-{
- MOZ_ASSERT(NS_IsMainThread());
- // For testing, unable to report the battery status information
- if (Preferences::GetBool("dom.battery.test.default")) {
- return 1.0;
- }
-
- return mLevel;
-}
-
-void
-BatteryManager::UpdateFromBatteryInfo(const hal::BatteryInformation& aBatteryInfo)
-{
- mLevel = aBatteryInfo.level();
-
- // Round to the nearest ten percent for non-chrome and non-certified apps
- nsIDocument* doc = GetOwner() ? GetOwner()->GetDoc() : nullptr;
- uint16_t status = nsIPrincipal::APP_STATUS_NOT_INSTALLED;
- if (doc) {
- status = doc->NodePrincipal()->GetAppStatus();
- }
-
- mCharging = aBatteryInfo.charging();
- mRemainingTime = aBatteryInfo.remainingTime();
-
- if (!nsContentUtils::IsChromeDoc(doc) &&
- status != nsIPrincipal::APP_STATUS_CERTIFIED)
- {
- mLevel = lround(mLevel * 10.0) / 10.0;
- if (mLevel == 1.0) {
- mRemainingTime = mCharging ? kDefaultRemainingTime : kUnknownRemainingTime;
- } else if (mRemainingTime != kUnknownRemainingTime) {
- // Round the remaining time to a multiple of 15 minutes and never zero
- const double MINUTES_15 = 15.0 * 60.0;
- mRemainingTime = fmax(lround(mRemainingTime / MINUTES_15) * MINUTES_15,
- MINUTES_15);
- }
- }
-
- // Add some guards to make sure the values are coherent.
- if (mLevel == 1.0 && mCharging == true &&
- mRemainingTime != kDefaultRemainingTime) {
- mRemainingTime = kDefaultRemainingTime;
- NS_ERROR("Battery API: When charging and level at 1.0, remaining time "
- "should be 0. Please fix your backend!");
- }
-}
-
-void
-BatteryManager::Notify(const hal::BatteryInformation& aBatteryInfo)
-{
- double previousLevel = mLevel;
- bool previousCharging = mCharging;
- double previousRemainingTime = mRemainingTime;
-
- UpdateFromBatteryInfo(aBatteryInfo);
-
- if (previousCharging != mCharging) {
- DispatchTrustedEvent(CHARGINGCHANGE_EVENT_NAME);
- }
-
- if (previousLevel != mLevel) {
- DispatchTrustedEvent(LEVELCHANGE_EVENT_NAME);
- }
-
- /*
- * There are a few situations that could happen here:
- * 1. Charging state changed:
- * a. Previous remaining time wasn't unkwonw, we have to fire an event for
- * the change.
- * b. New remaining time isn't unkwonw, we have to fire an event for it.
- * 2. Charging state didn't change but remainingTime did, we have to fire
- * the event that correspond to the current charging state.
- */
- if (mCharging != previousCharging) {
- if (previousRemainingTime != kUnknownRemainingTime) {
- DispatchTrustedEvent(previousCharging ? CHARGINGTIMECHANGE_EVENT_NAME
- : DISCHARGINGTIMECHANGE_EVENT_NAME);
- }
- if (mRemainingTime != kUnknownRemainingTime) {
- DispatchTrustedEvent(mCharging ? CHARGINGTIMECHANGE_EVENT_NAME
- : DISCHARGINGTIMECHANGE_EVENT_NAME);
- }
- } else if (previousRemainingTime != mRemainingTime) {
- DispatchTrustedEvent(mCharging ? CHARGINGTIMECHANGE_EVENT_NAME
- : DISCHARGINGTIMECHANGE_EVENT_NAME);
- }
-}
-
-} // namespace battery
-} // namespace dom
-} // namespace mozilla