1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "content/browser/battery_status/battery_status_message_filter.h" 6 7#include "content/common/battery_status_messages.h" 8 9namespace content { 10 11BatteryStatusMessageFilter::BatteryStatusMessageFilter() 12 : BrowserMessageFilter(BatteryStatusMsgStart), 13 is_started_(false) { 14 callback_ = base::Bind(&BatteryStatusMessageFilter::SendBatteryChange, 15 base::Unretained(this)); 16} 17 18BatteryStatusMessageFilter::~BatteryStatusMessageFilter() { 19 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 20 if (is_started_) 21 subscription_.reset(); 22} 23 24bool BatteryStatusMessageFilter::OnMessageReceived( 25 const IPC::Message& message) { 26 bool handled = true; 27 IPC_BEGIN_MESSAGE_MAP(BatteryStatusMessageFilter, message) 28 IPC_MESSAGE_HANDLER(BatteryStatusHostMsg_Start, OnBatteryStatusStart) 29 IPC_MESSAGE_HANDLER(BatteryStatusHostMsg_Stop, OnBatteryStatusStop) 30 IPC_MESSAGE_UNHANDLED(handled = false) 31 IPC_END_MESSAGE_MAP() 32 return handled; 33} 34 35void BatteryStatusMessageFilter::OnBatteryStatusStart() { 36 DCHECK(!is_started_); 37 if (is_started_) 38 return; 39 is_started_ = true; 40 subscription_ = BatteryStatusService::GetInstance()->AddCallback(callback_); 41} 42 43void BatteryStatusMessageFilter::OnBatteryStatusStop() { 44 DCHECK(is_started_); 45 if (!is_started_) 46 return; 47 is_started_ = false; 48 subscription_.reset(); 49} 50 51void BatteryStatusMessageFilter::SendBatteryChange( 52 const blink::WebBatteryStatus& status) { 53 Send(new BatteryStatusMsg_DidChange(status)); 54} 55 56} // namespace content 57