1 // Copyright 2013 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 "device_motion_event_pump.h" 6 7 #include "content/common/device_orientation/device_motion_messages.h" 8 #include "content/public/renderer/render_thread.h" 9 #include "third_party/WebKit/public/platform/WebDeviceMotionListener.h" 10 11 namespace content { 12 13 DeviceMotionEventPump::DeviceMotionEventPump() 14 : DeviceSensorEventPump(), listener_(0) { 15 } 16 17 DeviceMotionEventPump::DeviceMotionEventPump(int pump_delay_millis) 18 : DeviceSensorEventPump(pump_delay_millis), listener_(0) { 19 } 20 21 DeviceMotionEventPump::~DeviceMotionEventPump() { 22 } 23 24 bool DeviceMotionEventPump::SetListener( 25 WebKit::WebDeviceMotionListener* listener) { 26 listener_ = listener; 27 return listener_ ? RequestStart() : Stop(); 28 } 29 30 bool DeviceMotionEventPump::OnControlMessageReceived( 31 const IPC::Message& message) { 32 bool handled = true; 33 IPC_BEGIN_MESSAGE_MAP(DeviceMotionEventPump, message) 34 IPC_MESSAGE_HANDLER(DeviceMotionMsg_DidStartPolling, OnDidStart) 35 IPC_MESSAGE_UNHANDLED(handled = false) 36 IPC_END_MESSAGE_MAP() 37 return handled; 38 } 39 40 void DeviceMotionEventPump::FireEvent() { 41 DCHECK(listener_); 42 WebKit::WebDeviceMotionData data; 43 if (reader_->GetLatestData(&data) && data.allAvailableSensorsAreActive) 44 listener_->didChangeDeviceMotion(data); 45 } 46 47 bool DeviceMotionEventPump::InitializeReader(base::SharedMemoryHandle handle) { 48 if (!reader_) 49 reader_.reset(new DeviceMotionSharedMemoryReader()); 50 return reader_->Initialize(handle); 51 } 52 53 bool DeviceMotionEventPump::SendStartMessage() { 54 return RenderThread::Get()->Send(new DeviceMotionHostMsg_StartPolling()); 55 } 56 57 58 bool DeviceMotionEventPump::SendStopMessage() { 59 return RenderThread::Get()->Send(new DeviceMotionHostMsg_StopPolling()); 60 } 61 62 } // namespace content 63