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/device_sensors/device_light_message_filter.h" 6 7 #include "content/browser/device_sensors/device_inertial_sensor_service.h" 8 #include "content/common/device_sensors/device_light_messages.h" 9 10 namespace content { 11 12 DeviceLightMessageFilter::DeviceLightMessageFilter() 13 : BrowserMessageFilter(DeviceLightMsgStart), is_started_(false) { 14 } 15 16 DeviceLightMessageFilter::~DeviceLightMessageFilter() { 17 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 18 if (is_started_) { 19 DeviceInertialSensorService::GetInstance()->RemoveConsumer( 20 CONSUMER_TYPE_LIGHT); 21 } 22 } 23 24 bool DeviceLightMessageFilter::OnMessageReceived(const IPC::Message& message) { 25 bool handled = true; 26 IPC_BEGIN_MESSAGE_MAP(DeviceLightMessageFilter, message) 27 IPC_MESSAGE_HANDLER(DeviceLightHostMsg_StartPolling, 28 OnDeviceLightStartPolling) 29 IPC_MESSAGE_HANDLER(DeviceLightHostMsg_StopPolling, OnDeviceLightStopPolling) 30 IPC_MESSAGE_UNHANDLED(handled = false) 31 IPC_END_MESSAGE_MAP() 32 return handled; 33 } 34 35 void DeviceLightMessageFilter::OnDeviceLightStartPolling() { 36 DCHECK(!is_started_); 37 if (is_started_) 38 return; 39 is_started_ = true; 40 DeviceInertialSensorService::GetInstance()->AddConsumer(CONSUMER_TYPE_LIGHT); 41 DidStartDeviceLightPolling(); 42 } 43 44 void DeviceLightMessageFilter::OnDeviceLightStopPolling() { 45 DCHECK(is_started_); 46 if (!is_started_) 47 return; 48 is_started_ = false; 49 DeviceInertialSensorService::GetInstance()->RemoveConsumer( 50 CONSUMER_TYPE_LIGHT); 51 } 52 53 void DeviceLightMessageFilter::DidStartDeviceLightPolling() { 54 Send(new DeviceLightMsg_DidStartPolling( 55 DeviceInertialSensorService::GetInstance() 56 ->GetSharedMemoryHandleForProcess(CONSUMER_TYPE_LIGHT, 57 PeerHandle()))); 58 } 59 60 } // namespace content 61