| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/geolocation/location_arbitrator_impl.h" | 5 #include "content/browser/geolocation/location_arbitrator_impl.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 "https://www.googleapis.com/geolocation/v1/geolocate"; | 21 "https://www.googleapis.com/geolocation/v1/geolocate"; |
| 22 } // namespace | 22 } // namespace |
| 23 | 23 |
| 24 // To avoid oscillations, set this to twice the expected update interval of a | 24 // To avoid oscillations, set this to twice the expected update interval of a |
| 25 // a GPS-type location provider (in case it misses a beat) plus a little. | 25 // a GPS-type location provider (in case it misses a beat) plus a little. |
| 26 const int64 LocationArbitratorImpl::kFixStaleTimeoutMilliseconds = | 26 const int64 LocationArbitratorImpl::kFixStaleTimeoutMilliseconds = |
| 27 11 * base::Time::kMillisecondsPerSecond; | 27 11 * base::Time::kMillisecondsPerSecond; |
| 28 | 28 |
| 29 LocationArbitratorImpl::LocationArbitratorImpl( | 29 LocationArbitratorImpl::LocationArbitratorImpl( |
| 30 const LocationUpdateCallback& callback) | 30 const LocationUpdateCallback& callback) |
| 31 : callback_(callback), | 31 : arbitrator_update_callback_(callback), |
| 32 provider_callback_( | 32 provider_update_callback_( |
| 33 base::Bind(&LocationArbitratorImpl::LocationUpdateAvailable, | 33 base::Bind(&LocationArbitratorImpl::OnLocationUpdate, |
| 34 base::Unretained(this))), | 34 base::Unretained(this))), |
| 35 position_provider_(NULL), | 35 position_provider_(NULL), |
| 36 is_permission_granted_(false), | 36 is_permission_granted_(false), |
| 37 is_running_(false) { | 37 is_running_(false) { |
| 38 } | 38 } |
| 39 | 39 |
| 40 LocationArbitratorImpl::~LocationArbitratorImpl() { | 40 LocationArbitratorImpl::~LocationArbitratorImpl() { |
| 41 } | 41 } |
| 42 | 42 |
| 43 GURL LocationArbitratorImpl::DefaultNetworkProviderURL() { | 43 GURL LocationArbitratorImpl::DefaultNetworkProviderURL() { |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 109 if (!provider) | 109 if (!provider) |
| 110 provider = NewSystemLocationProvider(); | 110 provider = NewSystemLocationProvider(); |
| 111 RegisterProvider(provider); | 111 RegisterProvider(provider); |
| 112 DoStartProviders(); | 112 DoStartProviders(); |
| 113 } | 113 } |
| 114 | 114 |
| 115 void LocationArbitratorImpl::RegisterProvider( | 115 void LocationArbitratorImpl::RegisterProvider( |
| 116 LocationProvider* provider) { | 116 LocationProvider* provider) { |
| 117 if (!provider) | 117 if (!provider) |
| 118 return; | 118 return; |
| 119 provider->SetUpdateCallback(provider_callback_); | 119 provider->SetUpdateCallback(provider_update_callback_); |
| 120 if (is_permission_granted_) | 120 if (is_permission_granted_) |
| 121 provider->OnPermissionGranted(); | 121 provider->OnPermissionGranted(); |
| 122 providers_.push_back(provider); | 122 providers_.push_back(provider); |
| 123 } | 123 } |
| 124 | 124 |
| 125 void LocationArbitratorImpl::LocationUpdateAvailable( | 125 void LocationArbitratorImpl::OnLocationUpdate(const LocationProvider* provider, |
| 126 const LocationProvider* provider, | 126 const Geoposition& new_position) { |
| 127 const Geoposition& new_position) { | |
| 128 DCHECK(new_position.Validate() || | 127 DCHECK(new_position.Validate() || |
| 129 new_position.error_code != Geoposition::ERROR_CODE_NONE); | 128 new_position.error_code != Geoposition::ERROR_CODE_NONE); |
| 130 if (!IsNewPositionBetter(position_, new_position, | 129 if (!IsNewPositionBetter(position_, new_position, |
| 131 provider == position_provider_)) | 130 provider == position_provider_)) |
| 132 return; | 131 return; |
| 133 position_provider_ = provider; | 132 position_provider_ = provider; |
| 134 position_ = new_position; | 133 position_ = new_position; |
| 135 callback_.Run(position_); | 134 arbitrator_update_callback_.Run(position_); |
| 136 } | 135 } |
| 137 | 136 |
| 138 AccessTokenStore* LocationArbitratorImpl::NewAccessTokenStore() { | 137 AccessTokenStore* LocationArbitratorImpl::NewAccessTokenStore() { |
| 139 return GetContentClient()->browser()->CreateAccessTokenStore(); | 138 return GetContentClient()->browser()->CreateAccessTokenStore(); |
| 140 } | 139 } |
| 141 | 140 |
| 142 AccessTokenStore* LocationArbitratorImpl::GetAccessTokenStore() { | 141 AccessTokenStore* LocationArbitratorImpl::GetAccessTokenStore() { |
| 143 if (!access_token_store_.get()) | 142 if (!access_token_store_.get()) |
| 144 access_token_store_ = NewAccessTokenStore(); | 143 access_token_store_ = NewAccessTokenStore(); |
| 145 return access_token_store_.get(); | 144 return access_token_store_.get(); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 195 } | 194 } |
| 196 } | 195 } |
| 197 return false; | 196 return false; |
| 198 } | 197 } |
| 199 | 198 |
| 200 bool LocationArbitratorImpl::HasPermissionBeenGranted() const { | 199 bool LocationArbitratorImpl::HasPermissionBeenGranted() const { |
| 201 return is_permission_granted_; | 200 return is_permission_granted_; |
| 202 } | 201 } |
| 203 | 202 |
| 204 } // namespace content | 203 } // namespace content |
| OLD | NEW |