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 10namespace content { 11 12DeviceMotionMessageFilter::DeviceMotionMessageFilter() 13 : BrowserMessageFilter(DeviceMotionMsgStart), 14 is_started_(false) { 15} 16 17DeviceMotionMessageFilter::~DeviceMotionMessageFilter() { 18 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 19 if (is_started_) 20 DeviceInertialSensorService::GetInstance()->RemoveConsumer( 21 CONSUMER_TYPE_MOTION); 22} 23 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 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 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 55void DeviceMotionMessageFilter::DidStartDeviceMotionPolling() { 56 Send(new DeviceMotionMsg_DidStartPolling( 57 DeviceInertialSensorService::GetInstance()-> 58 GetSharedMemoryHandleForProcess( 59 CONSUMER_TYPE_MOTION, PeerHandle()))); 60} 61 62} // namespace content 63