blob: a05bb8261e0e224e4926161de9c1a353d824a629 [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.
#include "chromeos/geolocation/geoposition.h"
#include "base/stl_util.h"
#include "base/strings/stringprintf.h"
namespace {
// Sentinel values to mark invalid data.
const double kBadLatitudeLongitude = 200;
const int kBadAccuracy = -1; // Accuracy must be non-negative.
} // namespace
namespace chromeos {
Geoposition::Geoposition()
: latitude(kBadLatitudeLongitude),
longitude(kBadLatitudeLongitude),
accuracy(kBadAccuracy),
error_code(0),
status(STATUS_NONE) {
}
bool Geoposition::Valid() const {
return latitude >= -90. && latitude <= 90. && longitude >= -180. &&
longitude <= 180. && accuracy >= 0. && !timestamp.is_null() &&
status == STATUS_OK;
}
std::string Geoposition::ToString() const {
static const char* const status2string[] = {
"NONE",
"OK",
"SERVER_ERROR",
"NETWORK_ERROR",
"TIMEOUT"
};
return base::StringPrintf(
"latitude=%f, longitude=%f, accuracy=%f, error_code=%u, "
"error_message='%s', status=%u (%s)",
latitude, longitude, accuracy, error_code, error_message.c_str(),
(unsigned)status,
(status < base::size(status2string) ? status2string[status] : "unknown"));
}
} // namespace chromeos