summaryrefslogtreecommitdiffstats
path: root/content/public/common/geoposition.h
blob: 0494696397288a880716f4ab158a6c58c8144865 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This file declares the Geoposition structure, used to represent a position
// fix. It was originally derived from:
// http://gears.googlecode.com/svn/trunk/gears/geolocation/geolocation.h

#ifndef CONTENT_PUBLIC_COMMON_GEOPOSITION_H_
#define CONTENT_PUBLIC_COMMON_GEOPOSITION_H_

#include <string>

#include "base/time/time.h"
#include "content/common/content_export.h"

namespace content {

struct CONTENT_EXPORT Geoposition {
 public:
  // These values follow the W3C geolocation specification and can be returned
  // to JavaScript without the need for a conversion.
  enum ErrorCode {
    ERROR_CODE_NONE = 0,  // Chrome addition.
    ERROR_CODE_PERMISSION_DENIED = 1,
    ERROR_CODE_POSITION_UNAVAILABLE = 2,
    ERROR_CODE_TIMEOUT = 3,
    ERROR_CODE_LAST = ERROR_CODE_TIMEOUT
  };

  // All fields are initialized to sentinel values marking them as invalid. The
  // error code is set to ERROR_CODE_NONE.
  Geoposition();

  // A valid fix has a valid latitude, longitude, accuracy and timestamp.
  bool Validate() const;

  // These properties correspond to those of the JavaScript Position object
  // although their types may differ.
  // Latitude in decimal degrees north (WGS84 coordinate frame).
  double latitude;
  // Longitude in decimal degrees west (WGS84 coordinate frame).
  double longitude;
  // Altitude in meters (above WGS84 datum).
  double altitude;
  // Accuracy of horizontal position in meters.
  double accuracy;
  // Accuracy of altitude in meters.
  double altitude_accuracy;
  // Heading in decimal degrees clockwise from true north.
  double heading;
  // Horizontal component of device velocity in meters per second.
  double speed;
  // Time of position measurement in milisecons since Epoch in UTC time. This is
  // taken from the host computer's system clock (i.e. from Time::Now(), not the
  // source device's clock).
  base::Time timestamp;

  // Error code, see enum above.
  ErrorCode error_code;
  // Human-readable error message.
  std::string error_message;
};

}  // namespace content

#endif  // CONTENT_COMMON_GEOPOSITION_H_