15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/geoposition.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Sentinel values to mark invalid data. (WebKit carries companion is_valid
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// bools for this purpose; we may eventually follow that approach, but
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// sentinels worked OK in the Gears code this is based on.)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const double kBadLatitudeLongitude = 200;
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Lowest point on land is at approximately -400 meters.
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kBadAltitude = -10000;
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kBadAccuracy = -1;  // Accuracy must be non-negative.
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kBadHeading = -1;  // Heading must be non-negative.
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kBadSpeed = -1;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Geoposition::Geoposition()
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : latitude(kBadLatitudeLongitude),
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      longitude(kBadLatitudeLongitude),
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      altitude(kBadAltitude),
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      accuracy(kBadAccuracy),
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      altitude_accuracy(kBadAccuracy),
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      heading(kBadHeading),
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      speed(kBadSpeed),
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      error_code(ERROR_CODE_NONE) {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool Geoposition::Validate() const {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return latitude >= -90. && latitude <= 90. &&
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         longitude >= -180. && longitude <= 180. &&
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         accuracy >= 0. &&
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         !timestamp.is_null();
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
40