summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/api/location/location_api.cc
diff options
context:
space:
mode:
authorrobliao@chromium.org <robliao@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-28 05:17:36 +0000
committerrobliao@chromium.org <robliao@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-28 05:17:36 +0000
commite5d16f19d3015e8c5e36c72b6012a611de08e404 (patch)
treef06dbbd224a98ea31dbdc80f4a508887f7ac2aaf /chrome/browser/extensions/api/location/location_api.cc
parent1ce88e878e0462082a24f60c3e4a8bc9c694eb49 (diff)
downloadchromium_src-e5d16f19d3015e8c5e36c72b6012a611de08e404.zip
chromium_src-e5d16f19d3015e8c5e36c72b6012a611de08e404.tar.gz
chromium_src-e5d16f19d3015e8c5e36c72b6012a611de08e404.tar.bz2
Implement chrome.location.watchLocation Request Info minDistanceInMeters and minTimeInMilliseconds
This change pipes down minDistanceInMeters and minTimeInMilliseconds from JS land to native code. Each property creates a policy that indicates if a location update should be sent to the client. BUG=230943 Review URL: https://chromiumcodereview.appspot.com/17467004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@209097 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/api/location/location_api.cc')
-rw-r--r--chrome/browser/extensions/api/location/location_api.cc34
1 files changed, 32 insertions, 2 deletions
diff --git a/chrome/browser/extensions/api/location/location_api.cc b/chrome/browser/extensions/api/location/location_api.cc
index d547879..41a9917 100644
--- a/chrome/browser/extensions/api/location/location_api.cc
+++ b/chrome/browser/extensions/api/location/location_api.cc
@@ -6,6 +6,7 @@
#include "chrome/browser/extensions/api/location/location_manager.h"
#include "chrome/common/extensions/api/location.h"
+#include "extensions/common/error_utils.h"
// TODO(vadimt): add tests.
@@ -15,14 +16,43 @@ namespace ClearWatch = location::ClearWatch;
namespace extensions {
+const char kMustBePositive[] = "'*' must be 0 or greater.";
+const char kMinDistanceInMeters[] = "minDistanceInMeters";
+const char kMinTimeInMilliseconds[] = "minTimeInMilliseconds";
+
+bool IsNegative(double* value) {
+ return value && *value < 0.0;
+}
+
bool LocationWatchLocationFunction::RunImpl() {
scoped_ptr<WatchLocation::Params> params(
WatchLocation::Params::Create(*args_));
EXTENSION_FUNCTION_VALIDATE(params.get());
- // TODO(vadimt): validate and use params->request_info.
+ double* min_distance_in_meters =
+ params->request_info.min_distance_in_meters.get();
+ if (IsNegative(min_distance_in_meters)) {
+ error_ = ErrorUtils::FormatErrorMessage(
+ kMustBePositive,
+ kMinDistanceInMeters);
+ return false;
+ }
+
+ double* min_time_in_milliseconds =
+ params->request_info.min_time_in_milliseconds.get();
+ if (IsNegative(min_time_in_milliseconds)) {
+ error_ = ErrorUtils::FormatErrorMessage(
+ kMustBePositive,
+ kMinTimeInMilliseconds);
+ return false;
+ }
+
+ // TODO(vadimt): validate and use params->request_info.maximumAge
LocationManager::Get(profile())->AddLocationRequest(
- extension_id(), params->name);
+ extension_id(),
+ params->name,
+ min_distance_in_meters,
+ min_time_in_milliseconds);
return true;
}