diff options
Diffstat (limited to 'chrome/browser/geolocation/geoposition.cc')
-rw-r--r-- | chrome/browser/geolocation/geoposition.cc | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/chrome/browser/geolocation/geoposition.cc b/chrome/browser/geolocation/geoposition.cc new file mode 100644 index 0000000..8618431 --- /dev/null +++ b/chrome/browser/geolocation/geoposition.cc @@ -0,0 +1,55 @@ +// Copyright (c) 2010 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. + +#include "chrome/browser/geolocation/geoposition.h" + +namespace { +// Sentinel values to mark invalid data. (WebKit carries companion is_valid +// bools for this purpose; we may eventually follow that approach, but +// sentinels worked OK in the gears code this is based on.) +const double kBadLatLng = 200; +// Lowest point on land is at approximately -400 metres. +const int kBadAltitude = -1000; +const int kBadAccuracy = -1; // Accuracy must be non-negative. +const int64 kBadTimestamp = kint64min; +} + +Position::Position() + : latitude(kBadLatLng), + longitude(kBadLatLng), + altitude(kBadAltitude), + accuracy(kBadAccuracy), + altitude_accuracy(kBadAccuracy), + timestamp(kBadTimestamp), + error_code(ERROR_CODE_NONE) { +} + +bool Position::is_valid_latlong() const { + return latitude >= -90.0 && latitude <= 90.0 && + longitude >= -180.0 && longitude <= 180.0; +} + +bool Position::is_valid_altitude() const { + return altitude > kBadAltitude; +} + +bool Position::is_valid_accuracy() const { + return accuracy >= 0.0; +} + +bool Position::is_valid_altitude_accuracy() const { + return altitude_accuracy >= 0.0; +} + +bool Position::is_valid_timestamp() const { + return timestamp != kBadTimestamp; +} + +bool Position::IsValidFix() const { + return is_valid_latlong() && is_valid_accuracy() && is_valid_timestamp(); +} + +bool Position::IsInitialized() const { + return error_code != ERROR_CODE_NONE || IsValidFix(); +} |