10529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
20529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Use of this source code is governed by a BSD-style license that can be
30529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// found in the LICENSE file.
40529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
50529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#ifndef CHROME_BROWSER_CHROMEOS_GEOLOCATION_GEOPOSITION_H_
60529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#define CHROME_BROWSER_CHROMEOS_GEOLOCATION_GEOPOSITION_H_
70529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
80529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include <string>
90529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/time/time.h"
110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace chromeos {
130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// This structure represents Google Maps Geolocation response.
150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Based on content/public/common/geoposition.h .
160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochstruct Geoposition {
170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Geolocation API client status.
180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // (Server status is reported in "error_code" field.)
190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  enum Status {
200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STATUS_NONE,
210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STATUS_OK,             // Response successful.
220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STATUS_SERVER_ERROR,   // Received error object.
230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STATUS_NETWORK_ERROR,  // Received bad or no response.
240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STATUS_TIMEOUT,        // Request stopped because of timeout.
250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    STATUS_LAST = STATUS_TIMEOUT
260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  };
270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // All fields are initialized to sentinel values marking them as invalid. The
290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // status is set to STATUS_NONE.
300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  Geoposition();
310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // A valid fix has a valid latitude, longitude, accuracy and timestamp.
330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  bool Valid() const;
340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Serialize to string.
360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  std::string ToString() const;
370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Latitude in decimal degrees north.
390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  double latitude;
400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Longitude in decimal degrees west.
420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  double longitude;
430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Accuracy of horizontal position in meters.
450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  double accuracy;
460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Error object data:
480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Value of "error.code".
490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  int error_code;
500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Human-readable error message.
520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  std::string error_message;
530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Absolute time, when this position was acquired. This is
550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // taken from the host computer's system clock (i.e. from Time::Now(), not the
560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // source device's clock).
570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  base::Time timestamp;
580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // See enum above.
600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  Status status;
610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch};
620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}  // namespace chromeos
640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#endif  // CHROME_BROWSER_CHROMEOS_GEOLOCATION_GEOPOSITION_H_
66