Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / content / renderer / device_sensors / device_sensor_event_pump.h
1 // Copyright 2014 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 #ifndef CONTENT_RENDERER_DEVICE_SENSORS_DEVICE_SENSOR_EVENT_PUMP_H_
6 #define CONTENT_RENDERER_DEVICE_SENSORS_DEVICE_SENSOR_EVENT_PUMP_H_
7
8 #include "base/memory/shared_memory.h"
9 #include "base/timer/timer.h"
10 #include "content/public/renderer/render_process_observer.h"
11
12 namespace content {
13 class RenderThread;
14
15 class CONTENT_EXPORT DeviceSensorEventPump : public RenderProcessObserver {
16  public:
17   // Default delay between subsequent firing of events.
18   static const int kDefaultPumpDelayMillis;
19
20   int GetDelayMillis() const;
21
22   void Attach(RenderThread* thread);
23   virtual bool OnControlMessageReceived(const IPC::Message& message) = 0;
24
25  protected:
26   // Constructor for a pump with default delay.
27   DeviceSensorEventPump();
28
29   // Constructor for a pump with a given delay.
30   explicit DeviceSensorEventPump(int pump_delay_millis);
31   virtual ~DeviceSensorEventPump();
32
33   // The pump is a tri-state automaton with allowed transitions as follows:
34   // STOPPED -> PENDING_START
35   // PENDING_START -> RUNNING
36   // PENDING_START -> STOPPED
37   // RUNNING -> STOPPED
38   enum PumpState {
39       STOPPED,
40       RUNNING,
41       PENDING_START
42   };
43
44   bool RequestStart();
45   void OnDidStart(base::SharedMemoryHandle handle);
46   bool Stop();
47
48   virtual void FireEvent() = 0;
49   virtual bool InitializeReader(base::SharedMemoryHandle handle) = 0;
50   virtual bool SendStartMessage() = 0;
51   virtual bool SendStopMessage() = 0;
52
53   int pump_delay_millis_;
54   PumpState state_;
55   base::RepeatingTimer<DeviceSensorEventPump> timer_;
56 };
57
58 }  // namespace content
59
60 #endif  // CONTENT_RENDERER_DEVICE_SENSORS_DEVICE_SENSOR_EVENT_PUMP_H_