blob: b2643c94bfe0620d04f75df83675d8f572f64183 [file] [log] [blame]
// Copyright 2014 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.
module device.mojom;
// A Geoposition represents a position fix. It was originally derived from:
// http://gears.googlecode.com/svn/trunk/gears/geolocation/geolocation.h
// TODO(blundell): Investigate killing content::Geoposition in favor of using
// this struct everywhere.
struct Geoposition {
// These values follow the W3C geolocation specification and can be returned
// to JavaScript without the need for a conversion.
enum ErrorCode {
NONE = 0, // Chrome addition.
PERMISSION_DENIED = 1,
POSITION_UNAVAILABLE = 2,
TIMEOUT = 3,
LAST = TIMEOUT
};
// Whether this geoposition is valid.
bool valid;
// 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;
// TODO(blundell): If I need to represent this differently to use this
// struct to replace content::Geolocation, I'll need to convert
// correctly into seconds-since-epoch when using this in
// GeolocationDispatcher::OnLocationUpdate().
// Time of position measurement in seconds 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).
double timestamp;
// Error code, see enum above.
ErrorCode error_code;
// Human-readable error message.
string error_message;
};
// The Geolocation service provides updates on the device's location. By
// default, it provides updates with low accuracy, but |SetHighAccuracy()| may
// be called to change this.
interface GeolocationService {
SetHighAccuracy(bool high_accuracy);
// Position is reported once it changes or immediately (to report the initial
// position) if this is the first call to QueryNextPosition on this instance.
// Position updates may be throttled by the service. Overlapping calls to
// this method are prohibited and will be treated as a connection error.
QueryNextPosition() => (Geoposition geoposition);
};