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