Home | History | Annotate | Download | only in location
      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