10529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 22385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch// Use of this source code is governed by a BSD-style license that can be 32385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch// found in the LICENSE file. 42385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 50529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "content/browser/device_sensors/device_orientation_message_filter.h" 62385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 70529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "content/browser/device_sensors/device_inertial_sensor_service.h" 80529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "content/common/device_sensors/device_orientation_messages.h" 92385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 102385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochnamespace content { 112385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 122385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen MurdochDeviceOrientationMessageFilter::DeviceOrientationMessageFilter() 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : BrowserMessageFilter(DeviceOrientationMsgStart), 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) is_started_(false) { 152385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch} 162385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 172385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen MurdochDeviceOrientationMessageFilter::~DeviceOrientationMessageFilter() { 182385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (is_started_) 203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DeviceInertialSensorService::GetInstance()->RemoveConsumer( 213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) CONSUMER_TYPE_ORIENTATION); 222385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch} 232385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 242385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochbool DeviceOrientationMessageFilter::OnMessageReceived( 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const IPC::Message& message) { 262385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch bool handled = true; 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IPC_BEGIN_MESSAGE_MAP(DeviceOrientationMessageFilter, message) 282385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch IPC_MESSAGE_HANDLER(DeviceOrientationHostMsg_StartPolling, 292385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch OnDeviceOrientationStartPolling) 302385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch IPC_MESSAGE_HANDLER(DeviceOrientationHostMsg_StopPolling, 312385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch OnDeviceOrientationStopPolling) 322385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch IPC_MESSAGE_UNHANDLED(handled = false) 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IPC_END_MESSAGE_MAP() 342385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch return handled; 352385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch} 362385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 372385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochvoid DeviceOrientationMessageFilter::OnDeviceOrientationStartPolling() { 382385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch DCHECK(!is_started_); 392385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch if (is_started_) 402385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch return; 412385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch is_started_ = true; 423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DeviceInertialSensorService::GetInstance()->AddConsumer( 433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) CONSUMER_TYPE_ORIENTATION); 442385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch DidStartDeviceOrientationPolling(); 452385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch} 462385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 472385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochvoid DeviceOrientationMessageFilter::OnDeviceOrientationStopPolling() { 482385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch DCHECK(is_started_); 492385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch if (!is_started_) 502385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch return; 512385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch is_started_ = false; 523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DeviceInertialSensorService::GetInstance()->RemoveConsumer( 533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) CONSUMER_TYPE_ORIENTATION); 542385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch} 552385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 562385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochvoid DeviceOrientationMessageFilter::DidStartDeviceOrientationPolling() { 573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) Send(new DeviceOrientationMsg_DidStartPolling( 583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DeviceInertialSensorService::GetInstance()-> 593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GetSharedMemoryHandleForProcess( 603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) CONSUMER_TYPE_ORIENTATION, 613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) PeerHandle()))); 622385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch} 632385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 642385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch} // namespace content 65