1/*
2 * Copyright (C) 2011, 2012 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 * 1. Redistributions of source code must retain the above copyright
8 *    notice, this list of conditions and the following disclaimer.
9 * 2. 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 APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#ifndef WebGeolocationPosition_h
27#define WebGeolocationPosition_h
28
29#include "APIObject.h"
30#include "ArgumentEncoder.h"
31#include "ArgumentDecoder.h"
32#include <wtf/PassRefPtr.h>
33
34namespace WebKit {
35
36class WebGeolocationPosition : public API::ObjectImpl<API::Object::Type::GeolocationPosition> {
37public:
38    struct Data {
39        void encode(IPC::ArgumentEncoder&) const;
40        static bool decode(IPC::ArgumentDecoder&, Data&);
41
42        double timestamp;
43        double latitude;
44        double longitude;
45        double accuracy;
46
47        double altitude;
48        double altitudeAccuracy;
49        double heading;
50        double speed;
51
52        bool canProvideAltitude;
53        bool canProvideAltitudeAccuracy;
54        bool canProvideHeading;
55        bool canProvideSpeed;
56    };
57
58    static PassRefPtr<WebGeolocationPosition> create(double timestamp, double latitude, double longitude, double accuracy, bool providesAltitude, double altitude, bool providesAltitudeAccuracy, double altitudeAccuracy, bool providesHeading, double heading, bool providesSpeed, double speed)
59    {
60        return adoptRef(new WebGeolocationPosition(timestamp, latitude, longitude, accuracy, providesAltitude, altitude, providesAltitudeAccuracy, altitudeAccuracy, providesHeading, heading, providesSpeed, speed));
61    }
62
63    virtual ~WebGeolocationPosition();
64
65    double timestamp() const { return m_data.timestamp; }
66    double latitude() const { return m_data.latitude; }
67    double longitude() const { return m_data.longitude; }
68    double accuracy() const { return m_data.accuracy; }
69
70    bool canProvideAltitude() const { return m_data.canProvideAltitude; }
71    double altitude() const { return m_data.altitude; }
72
73    bool canProvideAltitudeAccuracy() const { return m_data.canProvideAltitudeAccuracy; }
74    double altitudeAccuracy() const { return m_data.altitudeAccuracy; }
75
76    bool canProvideHeading() const { return m_data.canProvideHeading; }
77    double heading() const { return m_data.heading; }
78
79    bool canProvideSpeed() const { return m_data.canProvideSpeed; }
80    double speed() const { return m_data.speed; }
81
82    const Data& data() const { return m_data; }
83
84private:
85    WebGeolocationPosition(double timestamp, double latitude, double longitude, double accuracy, bool providesAltitude, double altitude, bool providesAltitudeAccuracy, double altitudeAccuracy, bool providesHeading, double heading, bool providesSpeed, double speed);
86
87    Data m_data;
88};
89
90} // namespace WebKit
91
92#endif // WebGeolocationPosition_h
93