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 9 namespace content { 10 11 BatteryStatusMessageFilter::BatteryStatusMessageFilter() 12 : BrowserMessageFilter(BatteryStatusMsgStart), 13 is_started_(false) { 14 callback_ = base::Bind(&BatteryStatusMessageFilter::SendBatteryChange, 15 base::Unretained(this)); 16 } 17 18 BatteryStatusMessageFilter::~BatteryStatusMessageFilter() { 19 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 20 if (is_started_) 21 subscription_.reset(); 22 } 23 24 bool 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 35 void BatteryStatusMessageFilter::OnBatteryStatusStart() { 36 DCHECK(!is_started_); 37 if (is_started_) 38 return; 39 is_started_ = true; 40 subscription_ = BatteryStatusService::GetInstance()->AddCallback(callback_); 41 } 42 43 void BatteryStatusMessageFilter::OnBatteryStatusStop() { 44 DCHECK(is_started_); 45 if (!is_started_) 46 return; 47 is_started_ = false; 48 subscription_.reset(); 49 } 50 51 void BatteryStatusMessageFilter::SendBatteryChange( 52 const blink::WebBatteryStatus& status) { 53 Send(new BatteryStatusMsg_DidChange(status)); 54 } 55 56 } // namespace content 57