diff options
author | robliao@chromium.org <robliao@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-28 05:17:36 +0000 |
---|---|---|
committer | robliao@chromium.org <robliao@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-28 05:17:36 +0000 |
commit | e5d16f19d3015e8c5e36c72b6012a611de08e404 (patch) | |
tree | f06dbbd224a98ea31dbdc80f4a508887f7ac2aaf /chrome/browser/extensions/api/location/location_api.cc | |
parent | 1ce88e878e0462082a24f60c3e4a8bc9c694eb49 (diff) | |
download | chromium_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.cc | 34 |
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; } |