1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/extensions/api/location/location_api.h" 6 7 #include "chrome/browser/extensions/api/location/location_manager.h" 8 #include "chrome/common/extensions/api/location.h" 9 #include "extensions/common/error_utils.h" 10 11 // TODO(vadimt): add tests. 12 13 namespace location = extensions::api::location; 14 namespace WatchLocation = location::WatchLocation; 15 namespace ClearWatch = location::ClearWatch; 16 17 namespace extensions { 18 19 const char kMustBePositive[] = "'*' must be 0 or greater."; 20 const char kMinDistanceInMeters[] = "minDistanceInMeters"; 21 const char kMinTimeInMilliseconds[] = "minTimeInMilliseconds"; 22 23 bool IsNegative(double* value) { 24 return value && *value < 0.0; 25 } 26 27 bool LocationWatchLocationFunction::RunSync() { 28 scoped_ptr<WatchLocation::Params> params( 29 WatchLocation::Params::Create(*args_)); 30 EXTENSION_FUNCTION_VALIDATE(params.get()); 31 32 double* min_distance_in_meters = 33 params->request_info.min_distance_in_meters.get(); 34 if (IsNegative(min_distance_in_meters)) { 35 error_ = ErrorUtils::FormatErrorMessage( 36 kMustBePositive, 37 kMinDistanceInMeters); 38 return false; 39 } 40 41 double* min_time_in_milliseconds = 42 params->request_info.min_time_in_milliseconds.get(); 43 if (IsNegative(min_time_in_milliseconds)) { 44 error_ = ErrorUtils::FormatErrorMessage( 45 kMustBePositive, 46 kMinTimeInMilliseconds); 47 return false; 48 } 49 50 // TODO(vadimt): validate and use params->request_info.maximumAge 51 LocationManager::Get(browser_context()) 52 ->AddLocationRequest(extension_id(), 53 params->name, 54 min_distance_in_meters, 55 min_time_in_milliseconds); 56 57 return true; 58 } 59 60 bool LocationClearWatchFunction::RunSync() { 61 scoped_ptr<ClearWatch::Params> params( 62 ClearWatch::Params::Create(*args_)); 63 EXTENSION_FUNCTION_VALIDATE(params.get()); 64 65 LocationManager::Get(browser_context()) 66 ->RemoveLocationRequest(extension_id(), params->name); 67 68 return true; 69 } 70 71 } // namespace extensions 72