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#ifndef CONTENT_RENDERER_DEVICE_SENSORS_DEVICE_ORIENTATION_EVENT_PUMP_H_
60529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#define CONTENT_RENDERER_DEVICE_SENSORS_DEVICE_ORIENTATION_EVENT_PUMP_H_
72385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
82385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "base/memory/scoped_ptr.h"
90529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "content/renderer/device_sensors/device_sensor_event_pump.h"
102385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "content/renderer/shared_memory_seqlock_reader.h"
112385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "third_party/WebKit/public/platform/WebDeviceOrientationData.h"
122385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink {
142385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochclass WebDeviceOrientationListener;
152385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch}
162385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
172385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochnamespace content {
182385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)typedef SharedMemorySeqLockReader<blink::WebDeviceOrientationData>
202385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    DeviceOrientationSharedMemoryReader;
212385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
2203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class CONTENT_EXPORT DeviceOrientationEventPump
2303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    : public DeviceSensorEventPump<blink::WebDeviceOrientationListener> {
242385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch public:
252385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  // Angle threshold beyond which two orientation events are considered
262385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  // sufficiently different.
272385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  static const double kOrientationThreshold;
282385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  explicit DeviceOrientationEventPump(RenderThread* thread);
302385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  virtual ~DeviceOrientationEventPump();
312385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
3203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // PlatformEventObserver.
332385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  virtual bool OnControlMessageReceived(const IPC::Message& message) OVERRIDE;
3403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void SendFakeDataForTesting(void* data) OVERRIDE;
352385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
362385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch protected:
372385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  virtual void FireEvent() OVERRIDE;
382385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  virtual bool InitializeReader(base::SharedMemoryHandle handle) OVERRIDE;
3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // PlatformEventObserver.
4103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void SendStartMessage() OVERRIDE;
4203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void SendStopMessage() OVERRIDE;
432385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  bool ShouldFireEvent(const blink::WebDeviceOrientationData& data) const;
452385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  blink::WebDeviceOrientationData data_;
472385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  scoped_ptr<DeviceOrientationSharedMemoryReader> reader_;
4803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
4903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(DeviceOrientationEventPump);
502385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch};
512385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
522385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch}  // namespace content
532385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#endif  // CONTENT_RENDERER_DEVICE_SENSORS_DEVICE_ORIENTATION_EVENT_PUMP_H_
55