Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / modules / device_orientation / DeviceMotionData.h
1 /*
2  * Copyright (C) 2010 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *  * Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  *  * Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef DeviceMotionData_h
27 #define DeviceMotionData_h
28
29 #include "heap/Handle.h"
30 #include "wtf/PassRefPtr.h"
31 #include "wtf/RefCounted.h"
32 #include "wtf/RefPtr.h"
33
34 namespace blink {
35 class WebDeviceMotionData;
36 }
37
38 namespace WebCore {
39
40 class DeviceMotionData : public RefCountedWillBeGarbageCollected<DeviceMotionData> {
41     DECLARE_GC_INFO;
42 public:
43
44     class Acceleration : public RefCountedWillBeGarbageCollected<DeviceMotionData::Acceleration> {
45         DECLARE_GC_INFO;
46     public:
47         static PassRefPtrWillBeRawPtr<Acceleration> create(bool canProvideX, double x, bool canProvideY, double y, bool canProvideZ, double z);
48         void trace(Visitor*) { }
49
50         bool canProvideX() const { return m_canProvideX; }
51         bool canProvideY() const { return m_canProvideY; }
52         bool canProvideZ() const { return m_canProvideZ; }
53
54         double x() const { return m_x; }
55         double y() const { return m_y; }
56         double z() const { return m_z; }
57
58     private:
59         Acceleration(bool canProvideX, double x, bool canProvideY, double y, bool canProvideZ, double z);
60
61         double m_x;
62         double m_y;
63         double m_z;
64
65         bool m_canProvideX;
66         bool m_canProvideY;
67         bool m_canProvideZ;
68     };
69
70     class RotationRate : public RefCountedWillBeGarbageCollected<DeviceMotionData::RotationRate> {
71         DECLARE_GC_INFO;
72     public:
73         static PassRefPtrWillBeRawPtr<RotationRate> create(bool canProvideAlpha, double alpha, bool canProvideBeta,  double beta, bool canProvideGamma, double gamma);
74         void trace(Visitor*) { }
75
76         bool canProvideAlpha() const { return m_canProvideAlpha; }
77         bool canProvideBeta() const { return m_canProvideBeta; }
78         bool canProvideGamma() const { return m_canProvideGamma; }
79
80         double alpha() const { return m_alpha; }
81         double beta() const { return m_beta; }
82         double gamma() const { return m_gamma; }
83
84     private:
85         RotationRate(bool canProvideAlpha, double alpha, bool canProvideBeta,  double beta, bool canProvideGamma, double gamma);
86
87         double m_alpha;
88         double m_beta;
89         double m_gamma;
90
91         bool m_canProvideAlpha;
92         bool m_canProvideBeta;
93         bool m_canProvideGamma;
94     };
95
96     static PassRefPtrWillBeRawPtr<DeviceMotionData> create();
97     static PassRefPtrWillBeRawPtr<DeviceMotionData> create(
98         PassRefPtrWillBeRawPtr<Acceleration>,
99         PassRefPtrWillBeRawPtr<Acceleration> accelerationIncludingGravity,
100         PassRefPtrWillBeRawPtr<RotationRate>,
101         bool canProvideInterval,
102         double interval);
103     static PassRefPtrWillBeRawPtr<DeviceMotionData> create(const blink::WebDeviceMotionData&);
104     void trace(Visitor*);
105
106     Acceleration* acceleration() const { return m_acceleration.get(); }
107     Acceleration* accelerationIncludingGravity() const { return m_accelerationIncludingGravity.get(); }
108     RotationRate* rotationRate() const { return m_rotationRate.get(); }
109
110     bool canProvideInterval() const { return m_canProvideInterval; }
111     double interval() const { return m_interval; }
112
113     bool canProvideEventData() const;
114
115 private:
116     DeviceMotionData();
117     DeviceMotionData(PassRefPtrWillBeRawPtr<Acceleration>, PassRefPtrWillBeRawPtr<Acceleration> accelerationIncludingGravity, PassRefPtrWillBeRawPtr<RotationRate>, bool canProvideInterval, double interval);
118
119     RefPtrWillBeMember<Acceleration> m_acceleration;
120     RefPtrWillBeMember<Acceleration> m_accelerationIncludingGravity;
121     RefPtrWillBeMember<RotationRate> m_rotationRate;
122     bool m_canProvideInterval;
123     double m_interval;
124 };
125
126 } // namespace WebCore
127
128 #endif // DeviceMotionData_h