1/* 2 * Copyright (C) 2012 Samsung Electronics 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Library General Public 6 * License as published by the Free Software Foundation; either 7 * version 2 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Library General Public License for more details. 13 * 14 * You should have received a copy of the GNU Library General Public License 15 * along with this library; see the file COPYING.LIB. If not, write to 16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 17 * Boston, MA 02110-1301, USA. 18 */ 19 20#include "config.h" 21#include "BatteryManager.h" 22 23#if ENABLE(BATTERY_STATUS) 24 25#include "BatteryController.h" 26#include "BatteryStatus.h" 27#include "Document.h" 28#include "Event.h" 29#include "Frame.h" 30#include "Navigator.h" 31#include <limits> 32 33namespace WebCore { 34 35PassRefPtr<BatteryManager> BatteryManager::create(Navigator* navigator) 36{ 37 RefPtr<BatteryManager> batteryManager(adoptRef(new BatteryManager(navigator))); 38 batteryManager->suspendIfNeeded(); 39 return batteryManager.release(); 40} 41 42BatteryManager::~BatteryManager() 43{ 44} 45 46BatteryManager::BatteryManager(Navigator* navigator) 47 : ActiveDOMObject(navigator->frame()->document()) 48 , m_batteryController(BatteryController::from(navigator->frame()->page())) 49 , m_batteryStatus(0) 50{ 51 m_batteryController->addListener(this); 52} 53 54bool BatteryManager::charging() 55{ 56 return m_batteryStatus ? m_batteryStatus->charging() : true; 57} 58 59double BatteryManager::chargingTime() 60{ 61 if (!m_batteryStatus || !m_batteryStatus->charging()) 62 return std::numeric_limits<double>::infinity(); 63 64 return m_batteryStatus->chargingTime(); 65} 66 67double BatteryManager::dischargingTime() 68{ 69 if (!m_batteryStatus || m_batteryStatus->charging()) 70 return std::numeric_limits<double>::infinity(); 71 72 return m_batteryStatus->dischargingTime(); 73} 74 75double BatteryManager::level() 76{ 77 return m_batteryStatus ? m_batteryStatus->level() : 1; 78} 79 80void BatteryManager::didChangeBatteryStatus(PassRefPtr<Event> event, PassRefPtr<BatteryStatus> batteryStatus) 81{ 82 updateBatteryStatus(batteryStatus); 83 dispatchEvent(event); 84} 85 86void BatteryManager::updateBatteryStatus(PassRefPtr<BatteryStatus> batteryStatus) 87{ 88 m_batteryStatus = batteryStatus; 89} 90 91void BatteryManager::suspend(ReasonForSuspension) 92{ 93 if (m_batteryController) 94 m_batteryController->removeListener(this); 95} 96 97void BatteryManager::resume() 98{ 99 if (m_batteryController) 100 m_batteryController->addListener(this); 101} 102 103void BatteryManager::stop() 104{ 105 if (m_batteryController) 106 m_batteryController->removeListener(this); 107} 108 109} // namespace WebCore 110 111#endif // BATTERY_STATUS 112 113