Index: third_party/WebKit/Source/modules/battery/BatteryDispatcher.cpp |
diff --git a/third_party/WebKit/Source/modules/battery/BatteryDispatcher.cpp b/third_party/WebKit/Source/modules/battery/BatteryDispatcher.cpp |
index 8a414accee6e851edd475579bf4bc75f270994ee..896d72deeedf1388859b8619e392544dd169096b 100644 |
--- a/third_party/WebKit/Source/modules/battery/BatteryDispatcher.cpp |
+++ b/third_party/WebKit/Source/modules/battery/BatteryDispatcher.cpp |
@@ -4,9 +4,27 @@ |
#include "modules/battery/BatteryDispatcher.h" |
-#include "wtf/PassOwnPtr.h" |
+#include "modules/battery/BatteryStatus.h" |
+#include "public/platform/Platform.h" |
namespace blink { |
+ |
+namespace { |
+ |
+double ensureTwoSignificantDigits(double level) |
+{ |
+ // Convert battery level value which should be in [0, 1] to a value in [0, 1] |
+ // with 2 digits of precision. This is to provide a consistent experience |
+ // across platforms (e.g. on Mac and Android the battery changes are generally |
+ // reported with 1% granularity). It also serves the purpose of reducing the |
+ // possibility of fingerprinting and triggers less level change events on |
+ // platforms where the granularity is high. |
+ ASSERT(level >= 0 && level <= 1); |
+ return round(level * 100) / 100.f; |
+} |
+ |
+} // namespace |
+ |
BatteryDispatcher& BatteryDispatcher::instance() |
{ |
@@ -15,8 +33,6 @@ |
} |
BatteryDispatcher::BatteryDispatcher() |
- : m_hasLatestData(false) |
- , m_batteryDispatcherProxy(adoptPtr(new BatteryDispatcherProxy(this))) |
{ |
} |
@@ -24,22 +40,34 @@ |
{ |
} |
-void BatteryDispatcher::OnUpdateBatteryStatus(const BatteryStatus& batteryStatus) |
+DEFINE_TRACE(BatteryDispatcher) |
{ |
- m_batteryStatus = batteryStatus; |
- m_hasLatestData = true; |
+ visitor->trace(m_batteryStatus); |
+ PlatformEventDispatcher::trace(visitor); |
+} |
+ |
+void BatteryDispatcher::updateBatteryStatus(const WebBatteryStatus& batteryStatus) |
+{ |
+ m_batteryStatus = BatteryStatus::create( |
+ batteryStatus.charging, batteryStatus.chargingTime, batteryStatus.dischargingTime, |
+ ensureTwoSignificantDigits(batteryStatus.level)); |
notifyControllers(); |
+} |
+ |
+BatteryStatus* BatteryDispatcher::latestData() |
+{ |
+ return m_batteryStatus.get(); |
} |
void BatteryDispatcher::startListening() |
{ |
- m_batteryDispatcherProxy->StartListening(); |
+ Platform::current()->startListening(WebPlatformEventTypeBattery, this); |
} |
void BatteryDispatcher::stopListening() |
{ |
- m_batteryDispatcherProxy->StopListening(); |
- m_hasLatestData = false; |
+ Platform::current()->stopListening(WebPlatformEventTypeBattery); |
+ m_batteryStatus.clear(); |
} |
} // namespace blink |