1// Copyright (c) 2012 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// This file declares the Geoposition structure, used to represent a position
6// fix. It was originally derived from:
7// http://gears.googlecode.com/svn/trunk/gears/geolocation/geolocation.h
8
9#ifndef CONTENT_PUBLIC_COMMON_GEOPOSITION_H_
10#define CONTENT_PUBLIC_COMMON_GEOPOSITION_H_
11
12#include <string>
13
14#include "base/time/time.h"
15#include "content/common/content_export.h"
16
17namespace content {
18
19struct CONTENT_EXPORT Geoposition {
20 public:
21  // These values follow the W3C geolocation specification and can be returned
22  // to JavaScript without the need for a conversion.
23  enum ErrorCode {
24    ERROR_CODE_NONE = 0,  // Chrome addition.
25    ERROR_CODE_PERMISSION_DENIED = 1,
26    ERROR_CODE_POSITION_UNAVAILABLE = 2,
27    ERROR_CODE_TIMEOUT = 3,
28    ERROR_CODE_LAST = ERROR_CODE_TIMEOUT
29  };
30
31  // All fields are initialized to sentinel values marking them as invalid. The
32  // error code is set to ERROR_CODE_NONE.
33  Geoposition();
34
35  // A valid fix has a valid latitude, longitude, accuracy and timestamp.
36  bool Validate() const;
37
38  // These properties correspond to those of the JavaScript Position object
39  // although their types may differ.
40  // Latitude in decimal degrees north (WGS84 coordinate frame).
41  double latitude;
42  // Longitude in decimal degrees west (WGS84 coordinate frame).
43  double longitude;
44  // Altitude in meters (above WGS84 datum).
45  double altitude;
46  // Accuracy of horizontal position in meters.
47  double accuracy;
48  // Accuracy of altitude in meters.
49  double altitude_accuracy;
50  // Heading in decimal degrees clockwise from true north.
51  double heading;
52  // Horizontal component of device velocity in meters per second.
53  double speed;
54  // Time of position measurement in milisecons since Epoch in UTC time. This is
55  // taken from the host computer's system clock (i.e. from Time::Now(), not the
56  // source device's clock).
57  base::Time timestamp;
58
59  // Error code, see enum above.
60  ErrorCode error_code;
61  // Human-readable error message.
62  std::string error_message;
63};
64
65}  // namespace content
66
67#endif  // CONTENT_COMMON_GEOPOSITION_H_
68