Home | History | Annotate | Download | only in device_orientation
      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