summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMoonchild <moonchild@palemoon.org>2020-07-28 15:46:41 +0000
committerMoonchild <moonchild@palemoon.org>2020-07-28 15:46:41 +0000
commitad453f0b28bf1ac30f889abf3ae38e95315295b0 (patch)
treec33683c6009278b1c6e9f049465fb2e4eda890d4
parentd332d4a60ddc0c82d72706ecb6084af6fed359cc (diff)
downloadUXP-ad453f0b28bf1ac30f889abf3ae38e95315295b0.tar
UXP-ad453f0b28bf1ac30f889abf3ae38e95315295b0.tar.gz
UXP-ad453f0b28bf1ac30f889abf3ae38e95315295b0.tar.lz
UXP-ad453f0b28bf1ac30f889abf3ae38e95315295b0.tar.xz
UXP-ad453f0b28bf1ac30f889abf3ae38e95315295b0.zip
Issue #1391 - Remove the DOM battery API
-rw-r--r--dom/base/Navigator.cpp43
-rw-r--r--dom/base/Navigator.h7
-rwxr-xr-xdom/base/moz.build1
-rw-r--r--dom/battery/BatteryManager.cpp212
-rw-r--r--dom/battery/BatteryManager.h84
-rw-r--r--dom/battery/Constants.h27
-rw-r--r--dom/battery/Types.h23
-rw-r--r--dom/battery/moz.build21
-rw-r--r--dom/battery/test/chrome.ini3
-rw-r--r--dom/battery/test/mochitest.ini1
-rw-r--r--dom/battery/test/test_battery_basics.html39
-rw-r--r--dom/battery/test/test_battery_charging.html35
-rw-r--r--dom/battery/test/test_battery_discharging.html35
-rw-r--r--dom/battery/test/test_battery_unprivileged.html24
-rw-r--r--dom/bindings/moz.build1
-rw-r--r--dom/moz.build1
-rw-r--r--dom/quota/QuotaManagerService.cpp24
-rw-r--r--dom/webidl/BatteryManager.webidl23
-rw-r--r--dom/webidl/Navigator.webidl8
-rw-r--r--dom/webidl/moz.build1
-rw-r--r--hal/Hal.cpp53
-rw-r--r--hal/Hal.h24
-rw-r--r--hal/cocoa/CocoaBattery.cpp325
-rw-r--r--hal/fallback/FallbackBattery.cpp30
-rw-r--r--hal/linux/UPowerClient.cpp508
-rw-r--r--hal/moz.build22
-rw-r--r--hal/sandbox/PHal.ipdl12
-rw-r--r--hal/sandbox/SandboxHal.cpp51
-rw-r--r--hal/windows/WindowsBattery.cpp127
-rw-r--r--modules/libpref/init/all.js5
30 files changed, 0 insertions, 1770 deletions
diff --git a/dom/base/Navigator.cpp b/dom/base/Navigator.cpp
index a544f23c1..53ce2b30f 100644
--- a/dom/base/Navigator.cpp
+++ b/dom/base/Navigator.cpp
@@ -30,7 +30,6 @@
#include "nsUnicharUtils.h"
#include "mozilla/Preferences.h"
#include "mozilla/Telemetry.h"
-#include "BatteryManager.h"
#ifdef MOZ_GAMEPAD
#include "mozilla/dom/GamepadServiceTest.h"
#endif
@@ -197,8 +196,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(Navigator)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mPermissions)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mGeolocation)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mNotification)
- NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mBatteryManager)
- NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mBatteryPromise)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mPowerManager)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mConnection)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mStorageManager)
@@ -249,13 +246,6 @@ Navigator::Invalidate()
mNotification = nullptr;
}
- if (mBatteryManager) {
- mBatteryManager->Shutdown();
- mBatteryManager = nullptr;
- }
-
- mBatteryPromise = nullptr;
-
if (mPowerManager) {
mPowerManager->Shutdown();
mPowerManager = nullptr;
@@ -1321,39 +1311,6 @@ Navigator::GetMozNotification(ErrorResult& aRv)
return mNotification;
}
-//*****************************************************************************
-// Navigator::nsINavigatorBattery
-//*****************************************************************************
-
-Promise*
-Navigator::GetBattery(ErrorResult& aRv)
-{
- if (mBatteryPromise) {
- return mBatteryPromise;
- }
-
- if (!mWindow || !mWindow->GetDocShell()) {
- aRv.Throw(NS_ERROR_UNEXPECTED);
- return nullptr;
- }
-
- nsCOMPtr<nsIGlobalObject> go = do_QueryInterface(mWindow);
- RefPtr<Promise> batteryPromise = Promise::Create(go, aRv);
- if (NS_WARN_IF(aRv.Failed())) {
- return nullptr;
- }
- mBatteryPromise = batteryPromise;
-
- if (!mBatteryManager) {
- mBatteryManager = new battery::BatteryManager(mWindow);
- mBatteryManager->Init();
- }
-
- mBatteryPromise->MaybeResolve(mBatteryManager);
-
- return mBatteryPromise;
-}
-
PowerManager*
Navigator::GetMozPower(ErrorResult& aRv)
{
diff --git a/dom/base/Navigator.h b/dom/base/Navigator.h
index 4ddaaabab..bcc67589e 100644
--- a/dom/base/Navigator.h
+++ b/dom/base/Navigator.h
@@ -51,10 +51,6 @@ namespace dom {
class Permissions;
-namespace battery {
-class BatteryManager;
-} // namespace battery
-
class Promise;
class DesktopNotificationCenter;
@@ -136,7 +132,6 @@ public:
Permissions* GetPermissions(ErrorResult& aRv);
// The XPCOM GetDoNotTrack is ok
Geolocation* GetGeolocation(ErrorResult& aRv);
- Promise* GetBattery(ErrorResult& aRv);
static void AppName(nsAString& aAppName, bool aUsePrefOverriddenValue);
@@ -269,8 +264,6 @@ private:
RefPtr<Permissions> mPermissions;
RefPtr<Geolocation> mGeolocation;
RefPtr<DesktopNotificationCenter> mNotification;
- RefPtr<battery::BatteryManager> mBatteryManager;
- RefPtr<Promise> mBatteryPromise;
RefPtr<PowerManager> mPowerManager;
RefPtr<network::Connection> mConnection;
#ifdef MOZ_AUDIO_CHANNEL_MANAGER
diff --git a/dom/base/moz.build b/dom/base/moz.build
index aadafe412..1de49424b 100755
--- a/dom/base/moz.build
+++ b/dom/base/moz.build
@@ -416,7 +416,6 @@ EXTRA_JS_MODULES += [
]
LOCAL_INCLUDES += [
- '../battery',
'../events',
'../media',
'../network',
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
diff --git a/dom/battery/BatteryManager.h b/dom/battery/BatteryManager.h
deleted file mode 100644
index 4094c40d4..000000000
--- a/dom/battery/BatteryManager.h
+++ /dev/null
@@ -1,84 +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/. */
-
-#ifndef mozilla_dom_battery_BatteryManager_h
-#define mozilla_dom_battery_BatteryManager_h
-
-#include "Types.h"
-#include "mozilla/DOMEventTargetHelper.h"
-#include "mozilla/Observer.h"
-#include "nsCycleCollectionParticipant.h"
-
-namespace mozilla {
-
-namespace hal {
-class BatteryInformation;
-} // namespace hal
-
-namespace dom {
-namespace battery {
-
-class BatteryManager : public DOMEventTargetHelper
- , public BatteryObserver
-{
-public:
- explicit BatteryManager(nsPIDOMWindowInner* aWindow);
-
- void Init();
- void Shutdown();
-
- // For IObserver.
- void Notify(const hal::BatteryInformation& aBatteryInfo) override;
-
- /**
- * WebIDL Interface
- */
-
- nsPIDOMWindowInner* GetParentObject() const
- {
- return GetOwner();
- }
-
- virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
-
- bool Charging() const;
-
- double ChargingTime() const;
-
- double DischargingTime() const;
-
- double Level() const;
-
- IMPL_EVENT_HANDLER(chargingchange)
- IMPL_EVENT_HANDLER(chargingtimechange)
- IMPL_EVENT_HANDLER(dischargingtimechange)
- IMPL_EVENT_HANDLER(levelchange)
-
-private:
- /**
- * Update the battery information stored in the battery manager object using
- * a battery information object.
- */
- void UpdateFromBatteryInfo(const hal::BatteryInformation& aBatteryInfo);
-
- /**
- * Represents the battery level, ranging from 0.0 (dead or removed?)
- * to 1.0 (fully charged)
- */
- double mLevel;
- bool mCharging;
- /**
- * Represents the discharging time or the charging time, depending on the
- * current battery status (charging or not).
- */
- double mRemainingTime;
-};
-
-} // namespace battery
-} // namespace dom
-} // namespace mozilla
-
-#endif // mozilla_dom_battery_BatteryManager_h
diff --git a/dom/battery/Constants.h b/dom/battery/Constants.h
deleted file mode 100644
index f642e2a46..000000000
--- a/dom/battery/Constants.h
+++ /dev/null
@@ -1,27 +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/. */
-
-#ifndef mozilla_dom_battery_Constants_h__
-#define mozilla_dom_battery_Constants_h__
-
-/**
- * A set of constants that might need to be used by battery backends.
- * It's not part of BatteryManager.h to prevent those backends to include it.
- */
-namespace mozilla {
-namespace dom {
-namespace battery {
-
- static const double kDefaultLevel = 1.0;
- static const bool kDefaultCharging = true;
- static const double kDefaultRemainingTime = 0;
- static const double kUnknownRemainingTime = -1;
-
-} // namespace battery
-} // namespace dom
-} // namespace mozilla
-
-#endif // mozilla_dom_battery_Constants_h__
diff --git a/dom/battery/Types.h b/dom/battery/Types.h
deleted file mode 100644
index ee55a26d3..000000000
--- a/dom/battery/Types.h
+++ /dev/null
@@ -1,23 +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/. */
-
-#ifndef mozilla_dom_battery_Types_h
-#define mozilla_dom_battery_Types_h
-
-namespace mozilla {
-namespace hal {
-class BatteryInformation;
-} // namespace hal
-
-template <class T>
-class Observer;
-
-typedef Observer<hal::BatteryInformation> BatteryObserver;
-
-} // namespace mozilla
-
-#endif // mozilla_dom_battery_Types_h
-
diff --git a/dom/battery/moz.build b/dom/battery/moz.build
deleted file mode 100644
index e3743c40b..000000000
--- a/dom/battery/moz.build
+++ /dev/null
@@ -1,21 +0,0 @@
-# -*- Mode: python; 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.battery += [
- 'Constants.h',
- 'Types.h',
-]
-
-SOURCES += [
- 'BatteryManager.cpp',
-]
-
-include('/ipc/chromium/chromium-config.mozbuild')
-
-FINAL_LIBRARY = 'xul'
-
-MOCHITEST_CHROME_MANIFESTS += ['test/chrome.ini']
-MOCHITEST_MANIFESTS += ['test/mochitest.ini']
diff --git a/dom/battery/test/chrome.ini b/dom/battery/test/chrome.ini
deleted file mode 100644
index ced199bff..000000000
--- a/dom/battery/test/chrome.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[test_battery_basics.html]
-[test_battery_charging.html]
-[test_battery_discharging.html]
diff --git a/dom/battery/test/mochitest.ini b/dom/battery/test/mochitest.ini
deleted file mode 100644
index 4d8307930..000000000
--- a/dom/battery/test/mochitest.ini
+++ /dev/null
@@ -1 +0,0 @@
-[test_battery_unprivileged.html]
diff --git a/dom/battery/test/test_battery_basics.html b/dom/battery/test/test_battery_basics.html
deleted file mode 100644
index 96f7f3368..000000000
--- a/dom/battery/test/test_battery_basics.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<head>
- <title>Test for Battery API</title>
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<p id="display"></p>
-<div id="content" style="display: none">
-</div>
-<pre id="test">
-<script type="application/javascript">
-
-"use strict";
-
-SimpleTest.waitForExplicitFinish();
-
-/** Test for Battery API **/
-ok("getBattery" in navigator, "navigator.getBattery should exist");
-ok(!("battery" in navigator), "navigator.battery should not exist");
-
-navigator.getBattery().then(function (battery) {
- ok(battery.level >= 0.0 && battery.level <= 1.0, "Battery level " + battery.level + " should be in the range [0.0, 1.0]");
-
- SpecialPowers.pushPrefEnv({"set": [["dom.battery.test.default", true]]}, function () {
- ok(battery.charging, "Battery should be charging by default");
- is(battery.chargingTime, 0, "Battery chargingTime " + battery.chargingTime + " should be zero by default");
- is(battery.dischargingTime, Infinity, "Battery dischargingTime should be Infinity by default");
- is(battery.level, 1.0, "Battery level " + battery.level + " should be 1.0 by default");
-
- SimpleTest.finish();
- });
-});
-
-</script>
-</pre>
-</body>
-</html>
diff --git a/dom/battery/test/test_battery_charging.html b/dom/battery/test/test_battery_charging.html
deleted file mode 100644
index 5d1e83284..000000000
--- a/dom/battery/test/test_battery_charging.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<head>
- <title>Test for Battery API</title>
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<p id="display"></p>
-<div id="content" style="display: none">
-</div>
-<pre id="test">
-<script type="application/javascript">
-
-"use strict";
-
-SimpleTest.waitForExplicitFinish();
-
-/** Test for Battery API **/
-navigator.getBattery().then(function (battery) {
- ok(battery.level >= 0.0 && battery.level <= 1.0, "Battery level " + battery.level + " should be in the range [0.0, 1.0]");
-
- SpecialPowers.pushPrefEnv({"set": [["dom.battery.test.charging", true]]}, function () {
- is(battery.charging, true, "Battery should be charging");
- ok(battery.chargingTime >= 0, "Battery chargingTime " + battery.chargingTime + " should be nonnegative when charging");
- is(battery.dischargingTime, Infinity, "Battery dischargingTime should be Infinity when charging");
-
- SimpleTest.finish();
- });
-});
-
-</script>
-</pre>
-</body>
-</html>
diff --git a/dom/battery/test/test_battery_discharging.html b/dom/battery/test/test_battery_discharging.html
deleted file mode 100644
index 26a0359d3..000000000
--- a/dom/battery/test/test_battery_discharging.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<head>
- <title>Test for Battery API</title>
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<p id="display"></p>
-<div id="content" style="display: none">
-</div>
-<pre id="test">
-<script type="application/javascript">
-
-"use strict";
-
-SimpleTest.waitForExplicitFinish();
-
-/** Test for Battery API **/
-navigator.getBattery().then(function (battery) {
- ok(battery.level >= 0.0 && battery.level <= 1.0, "Battery level " + battery.level + " should be in the range [0.0, 1.0]");
-
- SpecialPowers.pushPrefEnv({"set": [["dom.battery.test.discharging", true]]}, function () {
- is(battery.charging, false, "Battery should be discharging");
- is(battery.chargingTime, Infinity, "Battery chargingTime should be Infinity when discharging");
- ok(battery.dischargingTime > 0, "Battery dischargingTime " + battery.dischargingTime + " should be positive when discharging");
-
- SimpleTest.finish();
- });
-});
-
-</script>
-</pre>
-</body>
-</html>
diff --git a/dom/battery/test/test_battery_unprivileged.html b/dom/battery/test/test_battery_unprivileged.html
deleted file mode 100644
index e56db8ac7..000000000
--- a/dom/battery/test/test_battery_unprivileged.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<head>
- <title>Test for Battery API</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<p id="display"></p>
-<div id="content" style="display: none">
-</div>
-<pre id="test">
-<script type="application/javascript">
-
-"use strict";
-
-/** Test for Battery API **/
-ok(!("getBattery" in navigator), "navigator.getBattery should not exist for unprivileged web content");
-ok(!("battery" in navigator), "navigator.battery should not exist");
-
-</script>
-</pre>
-</body>
-</html>
diff --git a/dom/bindings/moz.build b/dom/bindings/moz.build
index 649689c41..8fc62ba99 100644
--- a/dom/bindings/moz.build
+++ b/dom/bindings/moz.build
@@ -64,7 +64,6 @@ LOCAL_INCLUDES += [
LOCAL_INCLUDES += [
'/dom/base',
- '/dom/battery',
'/dom/canvas',
'/dom/geolocation',
'/dom/html',
diff --git a/dom/moz.build b/dom/moz.build
index 7888ccd69..e232f3443 100644
--- a/dom/moz.build
+++ b/dom/moz.build
@@ -43,7 +43,6 @@ DIRS += [
'base',
'archivereader',
'bindings',
- 'battery',
'browser-element',
'cache',
'canvas',
diff --git a/dom/quota/QuotaManagerService.cpp b/dom/quota/QuotaManagerService.cpp
index bd811dc9b..22b5d17b1 100644
--- a/dom/quota/QuotaManagerService.cpp
+++ b/dom/quota/QuotaManagerService.cpp
@@ -432,30 +432,6 @@ QuotaManagerService::PerformIdleMaintenance()
MOZ_ASSERT(XRE_IsParentProcess());
MOZ_ASSERT(NS_IsMainThread());
- // If we're running on battery power then skip all idle maintenance since we
- // would otherwise be doing lots of disk I/O.
- BatteryInformation batteryInfo;
-
-#ifdef MOZ_WIDGET_ANDROID
- // Android XPCShell doesn't load the AndroidBridge that is needed to make
- // GetCurrentBatteryInformation work...
- if (!QuotaManager::IsRunningXPCShellTests())
-#endif
- {
- GetCurrentBatteryInformation(&batteryInfo);
- }
-
- // If we're running XPCShell because we always want to be able to test this
- // code so pretend that we're always charging.
- if (QuotaManager::IsRunningXPCShellTests()) {
- batteryInfo.level() = 100;
- batteryInfo.charging() = true;
- }
-
- if (NS_WARN_IF(!batteryInfo.charging())) {
- return;
- }
-
if (QuotaManager::IsRunningXPCShellTests()) {
// We don't want user activity to impact this code if we're running tests.
Unused << Observe(nullptr, OBSERVER_TOPIC_IDLE, nullptr);
diff --git a/dom/webidl/BatteryManager.webidl b/dom/webidl/BatteryManager.webidl
deleted file mode 100644
index a964f3b0b..000000000
--- a/dom/webidl/BatteryManager.webidl
+++ /dev/null
@@ -1,23 +0,0 @@
-/* -*- Mode: IDL; 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/.
- *
- * The origin of this IDL file is
- * http://www.w3.org/TR/battery-status/
- *
- * Copyright © 2012 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C
- * liability, trademark and document use rules apply.
- */
-
-interface BatteryManager : EventTarget {
- readonly attribute boolean charging;
- readonly attribute unrestricted double chargingTime;
- readonly attribute unrestricted double dischargingTime;
- readonly attribute double level;
-
- attribute EventHandler onchargingchange;
- attribute EventHandler onchargingtimechange;
- attribute EventHandler ondischargingtimechange;
- attribute EventHandler onlevelchange;
-};
diff --git a/dom/webidl/Navigator.webidl b/dom/webidl/Navigator.webidl
index 4536d7d25..f34429de7 100644
--- a/dom/webidl/Navigator.webidl
+++ b/dom/webidl/Navigator.webidl
@@ -7,7 +7,6 @@
* http://www.whatwg.org/specs/web-apps/current-work/#the-navigator-object
* http://www.w3.org/TR/tracking-dnt/
* http://www.w3.org/TR/geolocation-API/#geolocation_interface
- * http://www.w3.org/TR/battery-status/#navigatorbattery-interface
* http://www.w3.org/TR/vibration/#vibration-interface
* http://www.w3.org/2012/sysapps/runtime/#extension-to-the-navigator-interface-1
* https://dvcs.w3.org/hg/gamepad/raw-file/default/gamepad.html#navigator-interface-extension
@@ -125,13 +124,6 @@ interface NavigatorGeolocation {
};
Navigator implements NavigatorGeolocation;
-// http://www.w3.org/TR/battery-status/#navigatorbattery-interface
-partial interface Navigator {
- // ChromeOnly to prevent web content from fingerprinting users' batteries.
- [Throws, ChromeOnly, Pref="dom.battery.enabled"]
- Promise<BatteryManager> getBattery();
-};
-
// http://www.w3.org/TR/vibration/#vibration-interface
partial interface Navigator {
// We don't support sequences in unions yet
diff --git a/dom/webidl/moz.build b/dom/webidl/moz.build
index d8309c265..687e502fa 100644
--- a/dom/webidl/moz.build
+++ b/dom/webidl/moz.build
@@ -50,7 +50,6 @@ WEBIDL_FILES = [
'AutocompleteInfo.webidl',
'BarProp.webidl',
'BaseKeyframeTypes.webidl',
- 'BatteryManager.webidl',
'BeforeAfterKeyboardEvent.webidl',
'BeforeUnloadEvent.webidl',
'BiquadFilterNode.webidl',
diff --git a/hal/Hal.cpp b/hal/Hal.cpp
index 67930c355..981f49125 100644
--- a/hal/Hal.cpp
+++ b/hal/Hal.cpp
@@ -264,30 +264,6 @@ private:
bool mHasValidCache;
};
-class BatteryObserversManager : public CachingObserversManager<BatteryInformation>
-{
-protected:
- void EnableNotifications() {
- PROXY_IF_SANDBOXED(EnableBatteryNotifications());
- }
-
- void DisableNotifications() {
- PROXY_IF_SANDBOXED(DisableBatteryNotifications());
- }
-
- void GetCurrentInformationInternal(BatteryInformation* aInfo) {
- PROXY_IF_SANDBOXED(GetCurrentBatteryInformation(aInfo));
- }
-};
-
-static BatteryObserversManager&
-BatteryObservers()
-{
- static BatteryObserversManager sBatteryObservers;
- AssertMainThread();
- return sBatteryObservers;
-}
-
class NetworkObserversManager : public CachingObserversManager<NetworkInformation>
{
protected:
@@ -356,35 +332,6 @@ ScreenConfigurationObservers()
return sScreenConfigurationObservers;
}
-void
-RegisterBatteryObserver(BatteryObserver* aObserver)
-{
- AssertMainThread();
- BatteryObservers().AddObserver(aObserver);
-}
-
-void
-UnregisterBatteryObserver(BatteryObserver* aObserver)
-{
- AssertMainThread();
- BatteryObservers().RemoveObserver(aObserver);
-}
-
-void
-GetCurrentBatteryInformation(BatteryInformation* aInfo)
-{
- AssertMainThread();
- *aInfo = BatteryObservers().GetCurrentInformation();
-}
-
-void
-NotifyBatteryChange(const BatteryInformation& aInfo)
-{
- AssertMainThread();
- BatteryObservers().CacheInformation(aInfo);
- BatteryObservers().BroadcastCachedInformation();
-}
-
bool GetScreenEnabled()
{
AssertMainThread();
diff --git a/hal/Hal.h b/hal/Hal.h
index 5411b387a..53c9e68bb 100644
--- a/hal/Hal.h
+++ b/hal/Hal.h
@@ -10,7 +10,6 @@
#include "base/basictypes.h"
#include "base/platform_thread.h"
#include "nsTArray.h"
-#include "mozilla/dom/battery/Types.h"
#include "mozilla/dom/MozPowerManagerBinding.h"
#include "mozilla/dom/network/Types.h"
#include "mozilla/dom/power/Types.h"
@@ -88,29 +87,6 @@ void CancelVibrate(nsPIDOMWindowInner* aWindow);
void CancelVibrate(const hal::WindowIdentifier &id);
/**
- * Inform the battery backend there is a new battery observer.
- * @param aBatteryObserver The observer that should be added.
- */
-void RegisterBatteryObserver(BatteryObserver* aBatteryObserver);
-
-/**
- * Inform the battery backend a battery observer unregistered.
- * @param aBatteryObserver The observer that should be removed.
- */
-void UnregisterBatteryObserver(BatteryObserver* aBatteryObserver);
-
-/**
- * Returns the current battery information.
- */
-void GetCurrentBatteryInformation(hal::BatteryInformation* aBatteryInfo);
-
-/**
- * Notify of a change in the battery state.
- * @param aBatteryInfo The new battery information.
- */
-void NotifyBatteryChange(const hal::BatteryInformation& aBatteryInfo);
-
-/**
* Determine whether the device's screen is currently enabled.
*/
bool GetScreenEnabled();
diff --git a/hal/cocoa/CocoaBattery.cpp b/hal/cocoa/CocoaBattery.cpp
deleted file mode 100644
index 6f1b7b1dc..000000000
--- a/hal/cocoa/CocoaBattery.cpp
+++ /dev/null
@@ -1,325 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim set: sw=2 ts=2 et lcs=trail\:.,tab\:>~ : */
-/* 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/. */
-
-#import <CoreFoundation/CoreFoundation.h>
-#import <IOKit/ps/IOPowerSources.h>
-#import <IOKit/ps/IOPSKeys.h>
-
-#include <mozilla/Hal.h>
-#include <mozilla/dom/battery/Constants.h>
-#include <mozilla/Services.h>
-
-#include <nsIObserverService.h>
-#include <nsIObserver.h>
-
-#include <dlfcn.h>
-
-#define IOKIT_FRAMEWORK_PATH "/System/Library/Frameworks/IOKit.framework/IOKit"
-
-#ifndef kIOPSTimeRemainingUnknown
- #define kIOPSTimeRemainingUnknown ((CFTimeInterval)-1.0)
-#endif
-#ifndef kIOPSTimeRemainingUnlimited
- #define kIOPSTimeRemainingUnlimited ((CFTimeInterval)-2.0)
-#endif
-
-using namespace mozilla::dom::battery;
-
-namespace mozilla {
-namespace hal_impl {
-
-typedef CFTimeInterval (*IOPSGetTimeRemainingEstimateFunc)(void);
-
-class MacPowerInformationService
-{
-public:
- static MacPowerInformationService* GetInstance();
- static void Shutdown();
- static bool IsShuttingDown();
-
- void BeginListening();
- void StopListening();
-
- static void HandleChange(void *aContext);
-
- ~MacPowerInformationService();
-
-private:
- MacPowerInformationService();
-
- // The reference to the runloop that is notified of power changes.
- CFRunLoopSourceRef mRunLoopSource;
-
- double mLevel;
- bool mCharging;
- double mRemainingTime;
- bool mShouldNotify;
-
- friend void GetCurrentBatteryInformation(hal::BatteryInformation* aBatteryInfo);
-
- static MacPowerInformationService* sInstance;
- static bool sShuttingDown;
-
- static void* sIOKitFramework;
- static IOPSGetTimeRemainingEstimateFunc sIOPSGetTimeRemainingEstimate;
-};
-
-void* MacPowerInformationService::sIOKitFramework;
-IOPSGetTimeRemainingEstimateFunc MacPowerInformationService::sIOPSGetTimeRemainingEstimate;
-
-/*
- * Implementation of mozilla::hal_impl::EnableBatteryNotifications,
- * mozilla::hal_impl::DisableBatteryNotifications,
- * and mozilla::hal_impl::GetCurrentBatteryInformation.
- */
-
-void
-EnableBatteryNotifications()
-{
- if (!MacPowerInformationService::IsShuttingDown()) {
- MacPowerInformationService::GetInstance()->BeginListening();
- }
-}
-
-void
-DisableBatteryNotifications()
-{
- if (!MacPowerInformationService::IsShuttingDown()) {
- MacPowerInformationService::GetInstance()->StopListening();
- }
-}
-
-void
-GetCurrentBatteryInformation(hal::BatteryInformation* aBatteryInfo)
-{
- MacPowerInformationService* powerService = MacPowerInformationService::GetInstance();
-
- aBatteryInfo->level() = powerService->mLevel;
- aBatteryInfo->charging() = powerService->mCharging;
- aBatteryInfo->remainingTime() = powerService->mRemainingTime;
-}
-
-bool MacPowerInformationService::sShuttingDown = false;
-
-/*
- * Following is the implementation of MacPowerInformationService.
- */
-
-MacPowerInformationService* MacPowerInformationService::sInstance = nullptr;
-
-namespace {
-struct SingletonDestroyer final : public nsIObserver
-{
- NS_DECL_ISUPPORTS
- NS_DECL_NSIOBSERVER
-
-private:
- ~SingletonDestroyer() {}
-};
-
-NS_IMPL_ISUPPORTS(SingletonDestroyer, nsIObserver)
-
-NS_IMETHODIMP
-SingletonDestroyer::Observe(nsISupports*, const char* aTopic, const char16_t*)
-{
- MOZ_ASSERT(!strcmp(aTopic, "xpcom-shutdown"));
- MacPowerInformationService::Shutdown();
- return NS_OK;
-}
-} // namespace
-
-/* static */ MacPowerInformationService*
-MacPowerInformationService::GetInstance()
-{
- if (sInstance) {
- return sInstance;
- }
-
- sInstance = new MacPowerInformationService();
-
- nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
- if (obs) {
- obs->AddObserver(new SingletonDestroyer(), "xpcom-shutdown", false);
- }
-
- return sInstance;
-}
-
-bool
-MacPowerInformationService::IsShuttingDown()
-{
- return sShuttingDown;
-}
-
-void
-MacPowerInformationService::Shutdown()
-{
- sShuttingDown = true;
- delete sInstance;
- sInstance = nullptr;
-}
-
-MacPowerInformationService::MacPowerInformationService()
- : mRunLoopSource(nullptr)
- , mLevel(kDefaultLevel)
- , mCharging(kDefaultCharging)
- , mRemainingTime(kDefaultRemainingTime)
- , mShouldNotify(false)
-{
- // IOPSGetTimeRemainingEstimate (and the related constants) are only available
- // on 10.7, so we test for their presence at runtime.
- sIOKitFramework = dlopen(IOKIT_FRAMEWORK_PATH, RTLD_LAZY | RTLD_LOCAL);
- if (sIOKitFramework) {
- sIOPSGetTimeRemainingEstimate =
- (IOPSGetTimeRemainingEstimateFunc)dlsym(sIOKitFramework, "IOPSGetTimeRemainingEstimate");
- } else {
- sIOPSGetTimeRemainingEstimate = nullptr;
- }
-}
-
-MacPowerInformationService::~MacPowerInformationService()
-{
- MOZ_ASSERT(!mRunLoopSource,
- "The observers have not been correctly removed! "
- "(StopListening should have been called)");
-
- if (sIOKitFramework) {
- dlclose(sIOKitFramework);
- }
-}
-
-void
-MacPowerInformationService::BeginListening()
-{
- // Set ourselves up to be notified about changes.
- MOZ_ASSERT(!mRunLoopSource, "IOPS Notification Loop Source already set up. "
- "(StopListening should have been called)");
-
- mRunLoopSource = ::IOPSNotificationCreateRunLoopSource(HandleChange, this);
- if (mRunLoopSource) {
- ::CFRunLoopAddSource(::CFRunLoopGetCurrent(), mRunLoopSource,
- kCFRunLoopDefaultMode);
-
- // Invoke our callback now so we have data if GetCurrentBatteryInformation is
- // called before a change happens.
- HandleChange(this);
- mShouldNotify = true;
- }
-}
-
-void
-MacPowerInformationService::StopListening()
-{
- MOZ_ASSERT(mRunLoopSource, "IOPS Notification Loop Source not set up. "
- "(StopListening without BeginListening)");
-
- ::CFRunLoopRemoveSource(::CFRunLoopGetCurrent(), mRunLoopSource,
- kCFRunLoopDefaultMode);
- mRunLoopSource = nullptr;
-}
-
-void
-MacPowerInformationService::HandleChange(void* aContext) {
- MacPowerInformationService* power =
- static_cast<MacPowerInformationService*>(aContext);
-
- CFTypeRef data = ::IOPSCopyPowerSourcesInfo();
- if (!data) {
- ::CFRelease(data);
- return;
- }
-
- // Get the list of power sources.
- CFArrayRef list = ::IOPSCopyPowerSourcesList(data);
- if (!list) {
- ::CFRelease(list);
- return;
- }
-
- // Default values. These will be used if there are 0 sources or we can't find
- // better information.
- double level = kDefaultLevel;
- double charging = kDefaultCharging;
- double remainingTime = kDefaultRemainingTime;
-
- // Look for the first battery power source to give us the information we need.
- // Usually there's only 1 available, depending on current power source.
- for (CFIndex i = 0; i < ::CFArrayGetCount(list); ++i) {
- CFTypeRef source = ::CFArrayGetValueAtIndex(list, i);
- CFDictionaryRef currPowerSourceDesc = ::IOPSGetPowerSourceDescription(data, source);
- if (!currPowerSourceDesc) {
- continue;
- }
-
- // Get a battery level estimate. This key is required.
- int currentCapacity = 0;
- const void* cfRef = ::CFDictionaryGetValue(currPowerSourceDesc, CFSTR(kIOPSCurrentCapacityKey));
- ::CFNumberGetValue((CFNumberRef)cfRef, kCFNumberSInt32Type, &currentCapacity);
-
- // This key is also required.
- int maxCapacity = 0;
- cfRef = ::CFDictionaryGetValue(currPowerSourceDesc, CFSTR(kIOPSMaxCapacityKey));
- ::CFNumberGetValue((CFNumberRef)cfRef, kCFNumberSInt32Type, &maxCapacity);
-
- if (maxCapacity > 0) {
- level = static_cast<double>(currentCapacity)/static_cast<double>(maxCapacity);
- }
-
- // Find out if we're charging.
- // This key is optional, we fallback to kDefaultCharging if the current power
- // source doesn't have that info.
- if(::CFDictionaryGetValueIfPresent(currPowerSourceDesc, CFSTR(kIOPSIsChargingKey), &cfRef)) {
- charging = ::CFBooleanGetValue((CFBooleanRef)cfRef);
-
- // Get an estimate of how long it's going to take until we're fully charged.
- // This key is optional.
- if (charging) {
- // Default value that will be changed if we happen to find the actual
- // remaining time.
- remainingTime = level == 1.0 ? kDefaultRemainingTime : kUnknownRemainingTime;
-
- if (::CFDictionaryGetValueIfPresent(currPowerSourceDesc,
- CFSTR(kIOPSTimeToFullChargeKey), &cfRef)) {
- int timeToCharge;
- ::CFNumberGetValue((CFNumberRef)cfRef, kCFNumberIntType, &timeToCharge);
- if (timeToCharge != kIOPSTimeRemainingUnknown) {
- remainingTime = timeToCharge*60;
- }
- }
- } else if (sIOPSGetTimeRemainingEstimate) { // not charging
- // See if we can get a time estimate.
- CFTimeInterval estimate = sIOPSGetTimeRemainingEstimate();
- if (estimate == kIOPSTimeRemainingUnlimited || estimate == kIOPSTimeRemainingUnknown) {
- remainingTime = kUnknownRemainingTime;
- } else {
- remainingTime = estimate;
- }
- }
- }
-
- break;
- }
-
- bool isNewData = level != power->mLevel || charging != power->mCharging ||
- remainingTime != power->mRemainingTime;
-
- power->mRemainingTime = remainingTime;
- power->mCharging = charging;
- power->mLevel = level;
-
- // Notify the observers if stuff changed.
- if (power->mShouldNotify && isNewData) {
- hal::NotifyBatteryChange(hal::BatteryInformation(power->mLevel,
- power->mCharging,
- power->mRemainingTime));
- }
-
- ::CFRelease(data);
- ::CFRelease(list);
-}
-
-} // namespace hal_impl
-} // namespace mozilla
diff --git a/hal/fallback/FallbackBattery.cpp b/hal/fallback/FallbackBattery.cpp
deleted file mode 100644
index 3e5e71574..000000000
--- a/hal/fallback/FallbackBattery.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set sw=2 ts=8 et ft=cpp : */
-/* 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 "Hal.h"
-#include "mozilla/dom/battery/Constants.h"
-
-namespace mozilla {
-namespace hal_impl {
-
-void
-EnableBatteryNotifications()
-{}
-
-void
-DisableBatteryNotifications()
-{}
-
-void
-GetCurrentBatteryInformation(hal::BatteryInformation* aBatteryInfo)
-{
- aBatteryInfo->level() = dom::battery::kDefaultLevel;
- aBatteryInfo->charging() = dom::battery::kDefaultCharging;
- aBatteryInfo->remainingTime() = dom::battery::kDefaultRemainingTime;
-}
-
-} // hal_impl
-} // namespace mozilla
diff --git a/hal/linux/UPowerClient.cpp b/hal/linux/UPowerClient.cpp
deleted file mode 100644
index 9f6e04379..000000000
--- a/hal/linux/UPowerClient.cpp
+++ /dev/null
@@ -1,508 +0,0 @@
-/* -*- 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 "Hal.h"
-#include "HalLog.h"
-#include <dbus/dbus-glib.h>
-#include <dbus/dbus-glib-lowlevel.h>
-#include <mozilla/Attributes.h>
-#include <mozilla/dom/battery/Constants.h>
-#include "nsAutoRef.h"
-#include <cmath>
-
-/*
- * Helper that manages the destruction of glib objects as soon as they leave
- * the current scope.
- *
- * We are specializing nsAutoRef class.
- */
-
-template <>
-class nsAutoRefTraits<GHashTable> : public nsPointerRefTraits<GHashTable>
-{
-public:
- static void Release(GHashTable* ptr) { g_hash_table_unref(ptr); }
-};
-
-using namespace mozilla::dom::battery;
-
-namespace mozilla {
-namespace hal_impl {
-
-/**
- * This is the declaration of UPowerClient class. This class is listening and
- * communicating to upower daemon through DBus.
- * There is no header file because this class shouldn't be public.
- */
-class UPowerClient
-{
-public:
- static UPowerClient* GetInstance();
-
- void BeginListening();
- void StopListening();
-
- double GetLevel();
- bool IsCharging();
- double GetRemainingTime();
-
- ~UPowerClient();
-
-private:
- UPowerClient();
-
- enum States {
- eState_Unknown = 0,
- eState_Charging,
- eState_Discharging,
- eState_Empty,
- eState_FullyCharged,
- eState_PendingCharge,
- eState_PendingDischarge
- };
-
- /**
- * Update the currently tracked device.
- * @return whether everything went ok.
- */
- void UpdateTrackedDeviceSync();
-
- /**
- * Returns a hash table with the properties of aDevice.
- * Note: the caller has to unref the hash table.
- */
- GHashTable* GetDevicePropertiesSync(DBusGProxy* aProxy);
- void GetDevicePropertiesAsync(DBusGProxy* aProxy);
- static void GetDevicePropertiesCallback(DBusGProxy* aProxy,
- DBusGProxyCall* aCall,
- void* aData);
-
- /**
- * Using the device properties (aHashTable), this method updates the member
- * variable storing the values we care about.
- */
- void UpdateSavedInfo(GHashTable* aHashTable);
-
- /**
- * Callback used by 'DeviceChanged' signal.
- */
- static void DeviceChanged(DBusGProxy* aProxy, const gchar* aObjectPath,
- UPowerClient* aListener);
-
- /**
- * Callback used by 'PropertiesChanged' signal.
- * This method is called when the the battery level changes.
- * (Only with upower >= 0.99)
- */
- static void PropertiesChanged(DBusGProxy* aProxy, const gchar*,
- GHashTable*, char**,
- UPowerClient* aListener);
-
- /**
- * Callback called when mDBusConnection gets a signal.
- */
- static DBusHandlerResult ConnectionSignalFilter(DBusConnection* aConnection,
- DBusMessage* aMessage,
- void* aData);
-
- // The DBus connection object.
- DBusGConnection* mDBusConnection;
-
- // The DBus proxy object to upower.
- DBusGProxy* mUPowerProxy;
-
- // The path of the tracked device.
- gchar* mTrackedDevice;
-
- // The DBusGProxy for the tracked device.
- DBusGProxy* mTrackedDeviceProxy;
-
- double mLevel;
- bool mCharging;
- double mRemainingTime;
-
- static UPowerClient* sInstance;
-
- static const guint sDeviceTypeBattery = 2;
- static const guint64 kUPowerUnknownRemainingTime = 0;
-};
-
-/*
- * Implementation of mozilla::hal_impl::EnableBatteryNotifications,
- * mozilla::hal_impl::DisableBatteryNotifications,
- * and mozilla::hal_impl::GetCurrentBatteryInformation.
- */
-
-void
-EnableBatteryNotifications()
-{
- UPowerClient::GetInstance()->BeginListening();
-}
-
-void
-DisableBatteryNotifications()
-{
- UPowerClient::GetInstance()->StopListening();
-}
-
-void
-GetCurrentBatteryInformation(hal::BatteryInformation* aBatteryInfo)
-{
- UPowerClient* upowerClient = UPowerClient::GetInstance();
-
- aBatteryInfo->level() = upowerClient->GetLevel();
- aBatteryInfo->charging() = upowerClient->IsCharging();
- aBatteryInfo->remainingTime() = upowerClient->GetRemainingTime();
-}
-
-/*
- * Following is the implementation of UPowerClient.
- */
-
-UPowerClient* UPowerClient::sInstance = nullptr;
-
-/* static */ UPowerClient*
-UPowerClient::GetInstance()
-{
- if (!sInstance) {
- sInstance = new UPowerClient();
- }
-
- return sInstance;
-}
-
-UPowerClient::UPowerClient()
- : mDBusConnection(nullptr)
- , mUPowerProxy(nullptr)
- , mTrackedDevice(nullptr)
- , mTrackedDeviceProxy(nullptr)
- , mLevel(kDefaultLevel)
- , mCharging(kDefaultCharging)
- , mRemainingTime(kDefaultRemainingTime)
-{
-}
-
-UPowerClient::~UPowerClient()
-{
- NS_ASSERTION(!mDBusConnection && !mUPowerProxy && !mTrackedDevice && !mTrackedDeviceProxy,
- "The observers have not been correctly removed! "
- "(StopListening should have been called)");
-}
-
-void
-UPowerClient::BeginListening()
-{
- GError* error = nullptr;
- mDBusConnection = dbus_g_bus_get(DBUS_BUS_SYSTEM, &error);
-
- if (!mDBusConnection) {
- HAL_LOG("Failed to open connection to bus: %s\n", error->message);
- g_error_free(error);
- return;
- }
-
- DBusConnection* dbusConnection =
- dbus_g_connection_get_connection(mDBusConnection);
-
- // Make sure we do not exit the entire program if DBus connection get lost.
- dbus_connection_set_exit_on_disconnect(dbusConnection, false);
-
- // Listening to signals the DBus connection is going to get so we will know
- // when it is lost and we will be able to disconnect cleanly.
- dbus_connection_add_filter(dbusConnection, ConnectionSignalFilter, this,
- nullptr);
-
- mUPowerProxy = dbus_g_proxy_new_for_name(mDBusConnection,
- "org.freedesktop.UPower",
- "/org/freedesktop/UPower",
- "org.freedesktop.UPower");
-
- UpdateTrackedDeviceSync();
-
- /*
- * TODO: we should probably listen to DeviceAdded and DeviceRemoved signals.
- * If we do that, we would have to disconnect from those in StopListening.
- * It's not yet implemented because it requires testing hot plugging and
- * removal of a battery.
- */
- dbus_g_proxy_add_signal(mUPowerProxy, "DeviceChanged", G_TYPE_STRING,
- G_TYPE_INVALID);
- dbus_g_proxy_connect_signal(mUPowerProxy, "DeviceChanged",
- G_CALLBACK (DeviceChanged), this, nullptr);
-}
-
-void
-UPowerClient::StopListening()
-{
- // If mDBusConnection isn't initialized, that means we are not really listening.
- if (!mDBusConnection) {
- return;
- }
-
- dbus_connection_remove_filter(
- dbus_g_connection_get_connection(mDBusConnection),
- ConnectionSignalFilter, this);
-
- dbus_g_proxy_disconnect_signal(mUPowerProxy, "DeviceChanged",
- G_CALLBACK (DeviceChanged), this);
-
- g_free(mTrackedDevice);
- mTrackedDevice = nullptr;
-
- if (mTrackedDeviceProxy) {
- dbus_g_proxy_disconnect_signal(mTrackedDeviceProxy, "PropertiesChanged",
- G_CALLBACK (PropertiesChanged), this);
-
- g_object_unref(mTrackedDeviceProxy);
- mTrackedDeviceProxy = nullptr;
- }
-
- g_object_unref(mUPowerProxy);
- mUPowerProxy = nullptr;
-
- dbus_g_connection_unref(mDBusConnection);
- mDBusConnection = nullptr;
-
- // We should now show the default values, not the latest we got.
- mLevel = kDefaultLevel;
- mCharging = kDefaultCharging;
- mRemainingTime = kDefaultRemainingTime;
-}
-
-void
-UPowerClient::UpdateTrackedDeviceSync()
-{
- GType typeGPtrArray = dbus_g_type_get_collection("GPtrArray",
- DBUS_TYPE_G_OBJECT_PATH);
- GPtrArray* devices = nullptr;
- GError* error = nullptr;
-
- // Reset the current tracked device:
- g_free(mTrackedDevice);
- mTrackedDevice = nullptr;
-
- // Reset the current tracked device proxy:
- if (mTrackedDeviceProxy) {
- dbus_g_proxy_disconnect_signal(mTrackedDeviceProxy, "PropertiesChanged",
- G_CALLBACK (PropertiesChanged), this);
-
- g_object_unref(mTrackedDeviceProxy);
- mTrackedDeviceProxy = nullptr;
- }
-
- // If that fails, that likely means upower isn't installed.
- if (!dbus_g_proxy_call(mUPowerProxy, "EnumerateDevices", &error, G_TYPE_INVALID,
- typeGPtrArray, &devices, G_TYPE_INVALID)) {
- HAL_LOG("Error: %s\n", error->message);
- g_error_free(error);
- return;
- }
-
- /*
- * We are looking for the first device that is a battery.
- * TODO: we could try to combine more than one battery.
- */
- for (guint i=0; i<devices->len; ++i) {
- gchar* devicePath = static_cast<gchar*>(g_ptr_array_index(devices, i));
-
- DBusGProxy* proxy = dbus_g_proxy_new_from_proxy(mUPowerProxy,
- "org.freedesktop.DBus.Properties",
- devicePath);
-
- nsAutoRef<GHashTable> hashTable(GetDevicePropertiesSync(proxy));
-
- if (g_value_get_uint(static_cast<const GValue*>(g_hash_table_lookup(hashTable, "Type"))) == sDeviceTypeBattery) {
- UpdateSavedInfo(hashTable);
- mTrackedDevice = devicePath;
- mTrackedDeviceProxy = proxy;
- break;
- }
-
- g_object_unref(proxy);
- g_free(devicePath);
- }
-
- if (mTrackedDeviceProxy) {
- dbus_g_proxy_add_signal(mTrackedDeviceProxy, "PropertiesChanged",
- G_TYPE_STRING,
- dbus_g_type_get_map("GHashTable", G_TYPE_STRING,
- G_TYPE_VALUE),
- G_TYPE_STRV, G_TYPE_INVALID);
- dbus_g_proxy_connect_signal(mTrackedDeviceProxy, "PropertiesChanged",
- G_CALLBACK (PropertiesChanged), this, nullptr);
- }
-
- g_ptr_array_free(devices, true);
-}
-
-/* static */ void
-UPowerClient::DeviceChanged(DBusGProxy* aProxy, const gchar* aObjectPath,
- UPowerClient* aListener)
-{
- if (!aListener->mTrackedDevice) {
- return;
- }
-
-#if GLIB_MAJOR_VERSION >= 2 && GLIB_MINOR_VERSION >= 16
- if (g_strcmp0(aObjectPath, aListener->mTrackedDevice)) {
-#else
- if (g_ascii_strcasecmp(aObjectPath, aListener->mTrackedDevice)) {
-#endif
- return;
- }
-
- aListener->GetDevicePropertiesAsync(aListener->mTrackedDeviceProxy);
-}
-
-/* static */ void
-UPowerClient::PropertiesChanged(DBusGProxy* aProxy, const gchar*, GHashTable*,
- char**, UPowerClient* aListener)
-{
- aListener->GetDevicePropertiesAsync(aListener->mTrackedDeviceProxy);
-}
-
-/* static */ DBusHandlerResult
-UPowerClient::ConnectionSignalFilter(DBusConnection* aConnection,
- DBusMessage* aMessage, void* aData)
-{
- if (dbus_message_is_signal(aMessage, DBUS_INTERFACE_LOCAL, "Disconnected")) {
- static_cast<UPowerClient*>(aData)->StopListening();
- // We do not return DBUS_HANDLER_RESULT_HANDLED here because the connection
- // might be shared and some other filters might want to do something.
- }
-
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-}
-
-GHashTable*
-UPowerClient::GetDevicePropertiesSync(DBusGProxy* aProxy)
-{
- GError* error = nullptr;
- GHashTable* hashTable = nullptr;
- GType typeGHashTable = dbus_g_type_get_map("GHashTable", G_TYPE_STRING,
- G_TYPE_VALUE);
- if (!dbus_g_proxy_call(aProxy, "GetAll", &error, G_TYPE_STRING,
- "org.freedesktop.UPower.Device", G_TYPE_INVALID,
- typeGHashTable, &hashTable, G_TYPE_INVALID)) {
- HAL_LOG("Error: %s\n", error->message);
- g_error_free(error);
- return nullptr;
- }
-
- return hashTable;
-}
-
-/* static */ void
-UPowerClient::GetDevicePropertiesCallback(DBusGProxy* aProxy,
- DBusGProxyCall* aCall, void* aData)
-{
- GError* error = nullptr;
- GHashTable* hashTable = nullptr;
- GType typeGHashTable = dbus_g_type_get_map("GHashTable", G_TYPE_STRING,
- G_TYPE_VALUE);
- if (!dbus_g_proxy_end_call(aProxy, aCall, &error, typeGHashTable,
- &hashTable, G_TYPE_INVALID)) {
- HAL_LOG("Error: %s\n", error->message);
- g_error_free(error);
- } else {
- sInstance->UpdateSavedInfo(hashTable);
- hal::NotifyBatteryChange(hal::BatteryInformation(sInstance->mLevel,
- sInstance->mCharging,
- sInstance->mRemainingTime));
- g_hash_table_unref(hashTable);
- }
-}
-
-void
-UPowerClient::GetDevicePropertiesAsync(DBusGProxy* aProxy)
-{
- dbus_g_proxy_begin_call(aProxy, "GetAll", GetDevicePropertiesCallback, nullptr,
- nullptr, G_TYPE_STRING,
- "org.freedesktop.UPower.Device", G_TYPE_INVALID);
-}
-
-void
-UPowerClient::UpdateSavedInfo(GHashTable* aHashTable)
-{
- bool isFull = false;
-
- /*
- * State values are confusing...
- * First of all, after looking at upower sources (0.9.13), it seems that
- * PendingDischarge and PendingCharge are not used.
- * In addition, FullyCharged and Empty states are not clear because we do not
- * know if the battery is actually charging or not. Those values come directly
- * from sysfs (in the Linux kernel) which have four states: "Empty", "Full",
- * "Charging" and "Discharging". In sysfs, "Empty" and "Full" are also only
- * related to the level, not to the charging state.
- * In this code, we are going to assume that Full means charging and Empty
- * means discharging because if that is not the case, the state should not
- * last a long time (actually, it should disappear at the following update).
- * It might be even very hard to see real cases where the state is Empty and
- * the battery is charging or the state is Full and the battery is discharging
- * given that plugging/unplugging the battery should have an impact on the
- * level.
- */
- switch (g_value_get_uint(static_cast<const GValue*>(g_hash_table_lookup(aHashTable, "State")))) {
- case eState_Unknown:
- mCharging = kDefaultCharging;
- break;
- case eState_FullyCharged:
- isFull = true;
- MOZ_FALLTHROUGH;
- case eState_Charging:
- case eState_PendingCharge:
- mCharging = true;
- break;
- case eState_Discharging:
- case eState_Empty:
- case eState_PendingDischarge:
- mCharging = false;
- break;
- }
-
- /*
- * The battery level might be very close to 100% (like 99%) without
- * increasing. It seems that upower sets the battery state as 'full' in that
- * case so we should trust it and not even try to get the value.
- */
- if (isFull) {
- mLevel = 1.0;
- } else {
- mLevel = round(g_value_get_double(static_cast<const GValue*>(g_hash_table_lookup(aHashTable, "Percentage"))))*0.01;
- }
-
- if (isFull) {
- mRemainingTime = 0;
- } else {
- mRemainingTime = mCharging ? g_value_get_int64(static_cast<const GValue*>(g_hash_table_lookup(aHashTable, "TimeToFull")))
- : g_value_get_int64(static_cast<const GValue*>(g_hash_table_lookup(aHashTable, "TimeToEmpty")));
-
- if (mRemainingTime == kUPowerUnknownRemainingTime) {
- mRemainingTime = kUnknownRemainingTime;
- }
- }
-}
-
-double
-UPowerClient::GetLevel()
-{
- return mLevel;
-}
-
-bool
-UPowerClient::IsCharging()
-{
- return mCharging;
-}
-
-double
-UPowerClient::GetRemainingTime()
-{
- return mRemainingTime;
-}
-
-} // namespace hal_impl
-} // namespace mozilla
diff --git a/hal/moz.build b/hal/moz.build
index a1acfa320..d817e4a01 100644
--- a/hal/moz.build
+++ b/hal/moz.build
@@ -34,14 +34,6 @@ if CONFIG['OS_TARGET'] == 'Linux':
'linux/LinuxMemory.cpp',
'linux/LinuxPower.cpp',
]
- if CONFIG['MOZ_ENABLE_DBUS']:
- UNIFIED_SOURCES += [
- 'linux/UPowerClient.cpp',
- ]
- else:
- UNIFIED_SOURCES += [
- 'fallback/FallbackBattery.cpp',
- ]
elif CONFIG['OS_TARGET'] == 'WINNT':
UNIFIED_SOURCES += [
'fallback/FallbackAlarm.cpp',
@@ -51,13 +43,8 @@ elif CONFIG['OS_TARGET'] == 'WINNT':
'fallback/FallbackVibration.cpp',
'windows/WindowsSensor.cpp',
]
- # WindowsBattery.cpp cannot be built in unified mode because it relies on HalImpl.h.
- SOURCES += [
- 'windows/WindowsBattery.cpp',
- ]
elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
UNIFIED_SOURCES += [
- 'cocoa/CocoaBattery.cpp',
'fallback/FallbackAlarm.cpp',
'fallback/FallbackMemory.cpp',
'fallback/FallbackPower.cpp',
@@ -73,18 +60,9 @@ elif CONFIG['OS_TARGET'] in ('OpenBSD', 'NetBSD', 'FreeBSD', 'DragonFly'):
'fallback/FallbackSensor.cpp',
'fallback/FallbackVibration.cpp',
]
- if CONFIG['MOZ_ENABLE_DBUS']:
- UNIFIED_SOURCES += [
- 'linux/UPowerClient.cpp',
- ]
- else:
- UNIFIED_SOURCES += [
- 'fallback/FallbackBattery.cpp',
- ]
else:
UNIFIED_SOURCES += [
'fallback/FallbackAlarm.cpp',
- 'fallback/FallbackBattery.cpp',
'fallback/FallbackMemory.cpp',
'fallback/FallbackPower.cpp',
'fallback/FallbackScreenConfiguration.cpp',
diff --git a/hal/sandbox/PHal.ipdl b/hal/sandbox/PHal.ipdl
index 1af550aff..8701e1219 100644
--- a/hal/sandbox/PHal.ipdl
+++ b/hal/sandbox/PHal.ipdl
@@ -20,12 +20,6 @@ using PRTime from "prtime.h";
namespace mozilla {
namespace hal {
-struct BatteryInformation {
- double level;
- bool charging;
- double remainingTime;
-};
-
struct SensorData {
SensorType sensor;
PRTime timestamp;
@@ -69,7 +63,6 @@ nested(upto inside_cpow) sync protocol PHal {
manager PContent;
child:
- async NotifyBatteryChange(BatteryInformation aBatteryInfo);
async NotifyNetworkChange(NetworkInformation aNetworkInfo);
async NotifyWakeLockChange(WakeLockInformation aWakeLockInfo);
async NotifyScreenConfigurationChange(ScreenConfiguration aScreenOrientation);
@@ -80,11 +73,6 @@ parent:
async Vibrate(uint32_t[] pattern, uint64_t[] id, PBrowser browser);
async CancelVibrate(uint64_t[] id, PBrowser browser);
- async EnableBatteryNotifications();
- async DisableBatteryNotifications();
- sync GetCurrentBatteryInformation()
- returns (BatteryInformation aBatteryInfo);
-
async EnableNetworkNotifications();
async DisableNetworkNotifications();
sync GetCurrentNetworkInformation()
diff --git a/hal/sandbox/SandboxHal.cpp b/hal/sandbox/SandboxHal.cpp
index aeaeb724e..579f3b472 100644
--- a/hal/sandbox/SandboxHal.cpp
+++ b/hal/sandbox/SandboxHal.cpp
@@ -13,7 +13,6 @@
#include "mozilla/hal_sandbox/PHalParent.h"
#include "mozilla/dom/TabParent.h"
#include "mozilla/dom/TabChild.h"
-#include "mozilla/dom/battery/Types.h"
#include "mozilla/dom/network/Types.h"
#include "mozilla/dom/ScreenOrientation.h"
#include "mozilla/EnumeratedRange.h"
@@ -70,24 +69,6 @@ CancelVibrate(const WindowIdentifier &id)
}
void
-EnableBatteryNotifications()
-{
- Hal()->SendEnableBatteryNotifications();
-}
-
-void
-DisableBatteryNotifications()
-{
- Hal()->SendDisableBatteryNotifications();
-}
-
-void
-GetCurrentBatteryInformation(BatteryInformation* aBatteryInfo)
-{
- Hal()->SendGetCurrentBatteryInformation(aBatteryInfo);
-}
-
-void
EnableNetworkNotifications()
{
Hal()->SendEnableNetworkNotifications();
@@ -376,7 +357,6 @@ bool SystemServiceIsRunning(const char* aSvcName)
}
class HalParent : public PHalParent
- , public BatteryObserver
, public NetworkObserver
, public ISensorObserver
, public WakeLockObserver
@@ -390,7 +370,6 @@ public:
{
// NB: you *must* unconditionally unregister your observer here,
// if it *may* be registered below.
- hal::UnregisterBatteryObserver(this);
hal::UnregisterNetworkObserver(this);
hal::UnregisterScreenConfigurationObserver(this);
for (auto sensor : MakeEnumeratedRange(NUM_SENSOR_TYPE)) {
@@ -432,30 +411,6 @@ public:
}
virtual bool
- RecvEnableBatteryNotifications() override {
- // We give all content battery-status permission.
- hal::RegisterBatteryObserver(this);
- return true;
- }
-
- virtual bool
- RecvDisableBatteryNotifications() override {
- hal::UnregisterBatteryObserver(this);
- return true;
- }
-
- virtual bool
- RecvGetCurrentBatteryInformation(BatteryInformation* aBatteryInfo) override {
- // We give all content battery-status permission.
- hal::GetCurrentBatteryInformation(aBatteryInfo);
- return true;
- }
-
- void Notify(const BatteryInformation& aBatteryInfo) override {
- Unused << SendNotifyBatteryChange(aBatteryInfo);
- }
-
- virtual bool
RecvEnableNetworkNotifications() override {
// We give all content access to this network-status information.
hal::RegisterNetworkObserver(this);
@@ -769,12 +724,6 @@ public:
}
virtual bool
- RecvNotifyBatteryChange(const BatteryInformation& aBatteryInfo) override {
- hal::NotifyBatteryChange(aBatteryInfo);
- return true;
- }
-
- virtual bool
RecvNotifySensorChange(const hal::SensorData &aSensorData) override;
virtual bool
diff --git a/hal/windows/WindowsBattery.cpp b/hal/windows/WindowsBattery.cpp
deleted file mode 100644
index 520330242..000000000
--- a/hal/windows/WindowsBattery.cpp
+++ /dev/null
@@ -1,127 +0,0 @@
-/* -*- 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 "Hal.h"
-#include "HalImpl.h"
-#include "mozilla/Preferences.h"
-#include "mozilla/dom/battery/Constants.h"
-
-#include <windows.h>
-
-using namespace mozilla::dom::battery;
-
-namespace mozilla {
-namespace hal_impl {
-
-static HPOWERNOTIFY sPowerHandle = nullptr;
-static HPOWERNOTIFY sCapacityHandle = nullptr;
-static HWND sHWnd = nullptr;
-
-static
-LRESULT CALLBACK
-BatteryWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
- if (msg != WM_POWERBROADCAST || wParam != PBT_POWERSETTINGCHANGE) {
- return DefWindowProc(hwnd, msg, wParam, lParam);
- }
-
- hal::BatteryInformation currentInfo;
-
- // Since we need update remainingTime, we cannot use LPARAM.
- hal_impl::GetCurrentBatteryInformation(&currentInfo);
-
- hal::NotifyBatteryChange(currentInfo);
- return TRUE;
-}
-
-void
-EnableBatteryNotifications()
-{
- // Create custom window to watch battery event
- // If we can get Gecko's window handle, this is unnecessary.
-
- if (sHWnd == nullptr) {
- WNDCLASSW wc;
- HMODULE hSelf = GetModuleHandle(nullptr);
-
- if (!GetClassInfoW(hSelf, L"MozillaBatteryClass", &wc)) {
- ZeroMemory(&wc, sizeof(WNDCLASSW));
- wc.hInstance = hSelf;
- wc.lpfnWndProc = BatteryWindowProc;
- wc.lpszClassName = L"MozillaBatteryClass";
- RegisterClassW(&wc);
- }
-
- sHWnd = CreateWindowW(L"MozillaBatteryClass", L"Battery Watcher",
- 0, 0, 0, 0, 0,
- nullptr, nullptr, hSelf, nullptr);
- }
-
- if (sHWnd == nullptr) {
- return;
- }
-
- sPowerHandle =
- RegisterPowerSettingNotification(sHWnd,
- &GUID_ACDC_POWER_SOURCE,
- DEVICE_NOTIFY_WINDOW_HANDLE);
- sCapacityHandle =
- RegisterPowerSettingNotification(sHWnd,
- &GUID_BATTERY_PERCENTAGE_REMAINING,
- DEVICE_NOTIFY_WINDOW_HANDLE);
-}
-
-void
-DisableBatteryNotifications()
-{
- if (sPowerHandle) {
- UnregisterPowerSettingNotification(sPowerHandle);
- sPowerHandle = nullptr;
- }
-
- if (sCapacityHandle) {
- UnregisterPowerSettingNotification(sCapacityHandle);
- sCapacityHandle = nullptr;
- }
-
- if (sHWnd) {
- DestroyWindow(sHWnd);
- sHWnd = nullptr;
- }
-}
-
-void
-GetCurrentBatteryInformation(hal::BatteryInformation* aBatteryInfo)
-{
- SYSTEM_POWER_STATUS status;
- if (!GetSystemPowerStatus(&status)) {
- aBatteryInfo->level() = kDefaultLevel;
- aBatteryInfo->charging() = kDefaultCharging;
- aBatteryInfo->remainingTime() = kDefaultRemainingTime;
- return;
- }
-
- aBatteryInfo->level() =
- status.BatteryLifePercent == 255 ? kDefaultLevel
- : ((double)status.BatteryLifePercent) / 100.0;
- aBatteryInfo->charging() = (status.ACLineStatus != 0);
- if (status.ACLineStatus != 0) {
- if (aBatteryInfo->level() == 1.0) {
- // GetSystemPowerStatus API may returns -1 for BatteryFullLifeTime.
- // So, if battery is 100%, set kDefaultRemainingTime at force.
- aBatteryInfo->remainingTime() = kDefaultRemainingTime;
- } else {
- aBatteryInfo->remainingTime() =
- status.BatteryFullLifeTime == (DWORD)-1 ? kUnknownRemainingTime
- : status.BatteryFullLifeTime;
- }
- } else {
- aBatteryInfo->remainingTime() =
- status.BatteryLifeTime == (DWORD)-1 ? kUnknownRemainingTime
- : status.BatteryLifeTime;
- }
-}
-
-} // hal_impl
-} // mozilla
diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
index 90a178d9c..c8af46e1d 100644
--- a/modules/libpref/init/all.js
+++ b/modules/libpref/init/all.js
@@ -4731,15 +4731,10 @@ pref("dom.vibrator.enabled", true);
pref("dom.vibrator.max_vibrate_ms", 10000);
pref("dom.vibrator.max_vibrate_list_len", 128);
-// Battery API
-// Disabled by default to reduce private data exposure.
-pref("dom.battery.enabled", false);
-
// Abort API
pref("dom.abortController.enabled", true);
// Push
-
pref("dom.push.enabled", false);
pref("dom.push.loglevel", "error");