10529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 27dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 37dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// found in the LICENSE file. 47dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 50529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "content/browser/device_sensors/device_motion_message_filter.h" 67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 70529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "content/browser/device_sensors/device_inertial_sensor_service.h" 80529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "content/common/device_sensors/device_motion_messages.h" 97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace content { 117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 122385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen MurdochDeviceMotionMessageFilter::DeviceMotionMessageFilter() 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : BrowserMessageFilter(DeviceMotionMsgStart), 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) is_started_(false) { 157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 172385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen MurdochDeviceMotionMessageFilter::~DeviceMotionMessageFilter() { 187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (is_started_) 203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DeviceInertialSensorService::GetInstance()->RemoveConsumer( 213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) CONSUMER_TYPE_MOTION); 227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool DeviceMotionMessageFilter::OnMessageReceived(const IPC::Message& message) { 257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool handled = true; 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IPC_BEGIN_MESSAGE_MAP(DeviceMotionMessageFilter, message) 277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch IPC_MESSAGE_HANDLER(DeviceMotionHostMsg_StartPolling, 287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch OnDeviceMotionStartPolling) 297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch IPC_MESSAGE_HANDLER(DeviceMotionHostMsg_StopPolling, 307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch OnDeviceMotionStopPolling) 317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch IPC_MESSAGE_UNHANDLED(handled = false) 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IPC_END_MESSAGE_MAP() 337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return handled; 347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 362385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochvoid DeviceMotionMessageFilter::OnDeviceMotionStartPolling() { 377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK(!is_started_); 387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (is_started_) 397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return; 407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch is_started_ = true; 413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DeviceInertialSensorService::GetInstance()->AddConsumer( 423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) CONSUMER_TYPE_MOTION); 437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DidStartDeviceMotionPolling(); 447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 462385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochvoid DeviceMotionMessageFilter::OnDeviceMotionStopPolling() { 477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK(is_started_); 487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!is_started_) 497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return; 507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch is_started_ = false; 513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DeviceInertialSensorService::GetInstance()->RemoveConsumer( 523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) CONSUMER_TYPE_MOTION); 537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 552385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochvoid DeviceMotionMessageFilter::DidStartDeviceMotionPolling() { 567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Send(new DeviceMotionMsg_DidStartPolling( 573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DeviceInertialSensorService::GetInstance()-> 583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GetSharedMemoryHandleForProcess( 593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) CONSUMER_TYPE_MOTION, PeerHandle()))); 607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} // namespace content 63