From f1bb542101119dd5faa6f85ec3aaa4445949eac6 Mon Sep 17 00:00:00 2001 From: Fedor Date: Wed, 12 Aug 2020 09:52:41 +0300 Subject: [PATCH] Remove the DOM battery API. --- dom/base/Navigator.cpp | 43 -- dom/base/Navigator.h | 7 - dom/base/moz.build | 1 - dom/battery/BatteryManager.cpp | 212 -------- dom/battery/BatteryManager.h | 84 --- dom/battery/Constants.h | 27 - dom/battery/Types.h | 23 - dom/battery/moz.build | 21 - dom/battery/test/chrome.ini | 3 - dom/battery/test/mochitest.ini | 1 - dom/battery/test/test_battery_basics.html | 39 -- dom/battery/test/test_battery_charging.html | 35 -- .../test/test_battery_discharging.html | 35 -- .../test/test_battery_unprivileged.html | 24 - dom/bindings/moz.build | 1 - dom/moz.build | 1 - dom/quota/QuotaManagerService.cpp | 24 - dom/webidl/BatteryManager.webidl | 23 - dom/webidl/Navigator.webidl | 8 - dom/webidl/moz.build | 1 - hal/Hal.cpp | 53 -- hal/Hal.h | 24 - hal/cocoa/CocoaBattery.cpp | 325 ----------- hal/fallback/FallbackBattery.cpp | 30 -- hal/linux/UPowerClient.cpp | 508 ------------------ hal/moz.build | 22 - hal/sandbox/PHal.ipdl | 12 - hal/sandbox/SandboxHal.cpp | 51 -- hal/windows/WindowsBattery.cpp | 190 ------- modules/libpref/init/all.js | 5 - 30 files changed, 1833 deletions(-) delete mode 100644 dom/battery/BatteryManager.cpp delete mode 100644 dom/battery/BatteryManager.h delete mode 100644 dom/battery/Constants.h delete mode 100644 dom/battery/Types.h delete mode 100644 dom/battery/moz.build delete mode 100644 dom/battery/test/chrome.ini delete mode 100644 dom/battery/test/mochitest.ini delete mode 100644 dom/battery/test/test_battery_basics.html delete mode 100644 dom/battery/test/test_battery_charging.html delete mode 100644 dom/battery/test/test_battery_discharging.html delete mode 100644 dom/battery/test/test_battery_unprivileged.html delete mode 100644 dom/webidl/BatteryManager.webidl delete mode 100644 hal/cocoa/CocoaBattery.cpp delete mode 100644 hal/fallback/FallbackBattery.cpp delete mode 100644 hal/linux/UPowerClient.cpp delete mode 100644 hal/windows/WindowsBattery.cpp 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 go = do_QueryInterface(mWindow); - RefPtr 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 mPermissions; RefPtr mGeolocation; RefPtr mNotification; - RefPtr mBatteryManager; - RefPtr mBatteryPromise; RefPtr mPowerManager; RefPtr mConnection; #ifdef MOZ_AUDIO_CHANNEL_MANAGER diff --git a/dom/base/moz.build b/dom/base/moz.build index 12d2ee47d..42e559e61 100644 --- a/dom/base/moz.build +++ b/dom/base/moz.build @@ -424,7 +424,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 -#include -#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 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::infinity(); - } - if (Preferences::GetBool("dom.battery.test.discharging", false)) { - return 42.0; - } - - if (Charging() || mRemainingTime == kUnknownRemainingTime) { - return std::numeric_limits::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::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 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 Observer; - -typedef Observer 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 @@ - - - - Test for Battery API - - - - -

- -
-
-
- - 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 @@ - - - - Test for Battery API - - - - -

- -
-
-
- - 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 @@ - - - - Test for Battery API - - - - -

- -
-
-
- - 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 @@ - - - - Test for Battery API - - - - -

- -
-
-
- - diff --git a/dom/bindings/moz.build b/dom/bindings/moz.build index 246518022..2e5d4a2e0 100644 --- a/dom/bindings/moz.build +++ b/dom/bindings/moz.build @@ -62,7 +62,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 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 11e3925bc..fd0ac8317 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 -{ -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 { 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" @@ -87,29 +86,6 @@ void Vibrate(const nsTArray& pattern, 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. */ 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 -#import -#import - -#include -#include -#include - -#include -#include - -#include - -#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 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(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, ¤tCapacity); - - // This key is also required. - int maxCapacity = 0; - cfRef = ::CFDictionaryGetValue(currPowerSourceDesc, CFSTR(kIOPSMaxCapacityKey)); - ::CFNumberGetValue((CFNumberRef)cfRef, kCFNumberSInt32Type, &maxCapacity); - - if (maxCapacity > 0) { - level = static_cast(currentCapacity)/static_cast(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 -#include -#include -#include -#include "nsAutoRef.h" -#include - -/* - * Helper that manages the destruction of glib objects as soon as they leave - * the current scope. - * - * We are specializing nsAutoRef class. - */ - -template <> -class nsAutoRefTraits : public nsPointerRefTraits -{ -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; ilen; ++i) { - gchar* devicePath = static_cast(g_ptr_array_index(devices, i)); - - DBusGProxy* proxy = dbus_g_proxy_new_from_proxy(mUPowerProxy, - "org.freedesktop.DBus.Properties", - devicePath); - - nsAutoRef hashTable(GetDevicePropertiesSync(proxy)); - - if (g_value_get_uint(static_cast(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(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(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(g_hash_table_lookup(aHashTable, "Percentage"))))*0.01; - } - - if (isFull) { - mRemainingTime = 0; - } else { - mRemainingTime = mCharging ? g_value_get_int64(static_cast(g_hash_table_lookup(aHashTable, "TimeToFull"))) - : g_value_get_int64(static_cast(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 8d2950ac0..c6ae9ebd8 100644 --- a/hal/moz.build +++ b/hal/moz.build @@ -48,14 +48,6 @@ elif 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', @@ -65,13 +57,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', @@ -87,18 +74,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" @@ -69,24 +68,6 @@ CancelVibrate(const WindowIdentifier &id) Hal()->SendCancelVibrate(newID.AsArray(), TabChild::GetFrom(newID.GetWindow())); } -void -EnableBatteryNotifications() -{ - Hal()->SendEnableBatteryNotifications(); -} - -void -DisableBatteryNotifications() -{ - Hal()->SendDisableBatteryNotifications(); -} - -void -GetCurrentBatteryInformation(BatteryInformation* aBatteryInfo) -{ - Hal()->SendGetCurrentBatteryInformation(aBatteryInfo); -} - void EnableNetworkNotifications() { @@ -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)) { @@ -431,30 +410,6 @@ public: return true; } - 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. @@ -768,12 +723,6 @@ public: sHalChildDestroyed = true; } - virtual bool - RecvNotifyBatteryChange(const BatteryInformation& aBatteryInfo) override { - hal::NotifyBatteryChange(aBatteryInfo); - return true; - } - virtual bool RecvNotifySensorChange(const hal::SensorData &aSensorData) override; diff --git a/hal/windows/WindowsBattery.cpp b/hal/windows/WindowsBattery.cpp deleted file mode 100644 index c1b9a31e6..000000000 --- a/hal/windows/WindowsBattery.cpp +++ /dev/null @@ -1,190 +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 "nsITimer.h" -#include "mozilla/Preferences.h" -#include "mozilla/dom/battery/Constants.h" -#include "nsComponentManagerUtils.h" - -#include -#include "mozilla/WindowsVersion.h" - -using namespace mozilla::dom::battery; - -namespace mozilla { -namespace hal_impl { - -static nsCOMPtr sUpdateTimer; - -/* Power Event API is Vista or later */ -static decltype(RegisterPowerSettingNotification)* sRegisterPowerSettingNotification = nullptr; -static decltype(UnregisterPowerSettingNotification)* sUnregisterPowerSettingNotification = nullptr; -static HPOWERNOTIFY sPowerHandle = nullptr; -static HPOWERNOTIFY sCapacityHandle = nullptr; -static HWND sHWnd = nullptr; - -static void -UpdateHandler(nsITimer* aTimer, void* aClosure) { - NS_ASSERTION(!IsVistaOrLater(), - "We shouldn't call this function for Vista or later version!"); - - static hal::BatteryInformation sLastInfo; - hal::BatteryInformation currentInfo; - - hal_impl::GetCurrentBatteryInformation(¤tInfo); - if (sLastInfo.level() != currentInfo.level() || - sLastInfo.charging() != currentInfo.charging() || - sLastInfo.remainingTime() != currentInfo.remainingTime()) { - hal::NotifyBatteryChange(currentInfo); - sLastInfo = currentInfo; - } -} - -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(¤tInfo); - - hal::NotifyBatteryChange(currentInfo); - return TRUE; -} - -void -EnableBatteryNotifications() -{ - if (IsVistaOrLater()) { - // RegisterPowerSettingNotification is from Vista or later. - // Use this API if available. - HMODULE hUser32 = GetModuleHandleW(L"USER32.DLL"); - if (!sRegisterPowerSettingNotification) - sRegisterPowerSettingNotification = (decltype(RegisterPowerSettingNotification)*) - GetProcAddress(hUser32, "RegisterPowerSettingNotification"); - if (!sUnregisterPowerSettingNotification) - sUnregisterPowerSettingNotification = (decltype(UnregisterPowerSettingNotification)*) - GetProcAddress(hUser32, "UnregisterPowerSettingNotification"); - - if (!sRegisterPowerSettingNotification || - !sUnregisterPowerSettingNotification) { - NS_ASSERTION(false, "Canot find PowerSettingNotification functions."); - return; - } - - // 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 = - sRegisterPowerSettingNotification(sHWnd, - &GUID_ACDC_POWER_SOURCE, - DEVICE_NOTIFY_WINDOW_HANDLE); - sCapacityHandle = - sRegisterPowerSettingNotification(sHWnd, - &GUID_BATTERY_PERCENTAGE_REMAINING, - DEVICE_NOTIFY_WINDOW_HANDLE); - } else - { - // for Windows XP. If we remove Windows XP support, - // we should remove timer-based power notification - sUpdateTimer = do_CreateInstance(NS_TIMER_CONTRACTID); - if (sUpdateTimer) { - sUpdateTimer->InitWithFuncCallback(UpdateHandler, - nullptr, - Preferences::GetInt("dom.battery.timer", - 30000 /* 30s */), - nsITimer::TYPE_REPEATING_SLACK); - } - } -} - -void -DisableBatteryNotifications() -{ - if (IsVistaOrLater()) { - if (sPowerHandle) { - sUnregisterPowerSettingNotification(sPowerHandle); - sPowerHandle = nullptr; - } - - if (sCapacityHandle) { - sUnregisterPowerSettingNotification(sCapacityHandle); - sCapacityHandle = nullptr; - } - - if (sHWnd) { - DestroyWindow(sHWnd); - sHWnd = nullptr; - } - } else - { - if (sUpdateTimer) { - sUpdateTimer->Cancel(); - sUpdateTimer = 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 78ec74c39..adede67dc 100644 --- a/modules/libpref/init/all.js +++ b/modules/libpref/init/all.js @@ -4741,15 +4741,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");