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 CHROME_BROWSER_CHROMEOS_GEOLOCATION_GEOPOSITION_H_
6#define CHROME_BROWSER_CHROMEOS_GEOLOCATION_GEOPOSITION_H_
7
8#include <string>
9
10#include "base/time/time.h"
11
12namespace chromeos {
13
14// This structure represents Google Maps Geolocation response.
15// Based on content/public/common/geoposition.h .
16struct Geoposition {
17  // Geolocation API client status.
18  // (Server status is reported in "error_code" field.)
19  enum Status {
20    STATUS_NONE,
21    STATUS_OK,             // Response successful.
22    STATUS_SERVER_ERROR,   // Received error object.
23    STATUS_NETWORK_ERROR,  // Received bad or no response.
24    STATUS_TIMEOUT,        // Request stopped because of timeout.
25    STATUS_LAST = STATUS_TIMEOUT
26  };
27
28  // All fields are initialized to sentinel values marking them as invalid. The
29  // status is set to STATUS_NONE.
30  Geoposition();
31
32  // A valid fix has a valid latitude, longitude, accuracy and timestamp.
33  bool Valid() const;
34
35  // Serialize to string.
36  std::string ToString() const;
37
38  // Latitude in decimal degrees north.
39  double latitude;
40
41  // Longitude in decimal degrees west.
42  double longitude;
43
44  // Accuracy of horizontal position in meters.
45  double accuracy;
46
47  // Error object data:
48  // Value of "error.code".
49  int error_code;
50
51  // Human-readable error message.
52  std::string error_message;
53
54  // Absolute time, when this position was acquired. 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  // See enum above.
60  Status status;
61};
62
63}  // namespace chromeos
64
65#endif  // CHROME_BROWSER_CHROMEOS_GEOLOCATION_GEOPOSITION_H_
66