Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(97)

Side by Side Diff: content/browser/geolocation/location_arbitrator.cc

Issue 10316007: Make the Geoposition helper class public (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fix forward-declaration of struct as class. Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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.h" 5 #include "content/browser/geolocation/location_arbitrator.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"
11 #include "content/browser/geolocation/arbitrator_dependency_factory.h" 11 #include "content/browser/geolocation/arbitrator_dependency_factory.h"
12 #include "content/public/browser/access_token_store.h" 12 #include "content/public/browser/access_token_store.h"
13 #include "googleurl/src/gurl.h" 13 #include "googleurl/src/gurl.h"
14 14
15 using content::AccessTokenStore; 15 using content::AccessTokenStore;
16 using content::Geoposition;
16 17
17 namespace { 18 namespace {
18 19
19 const char* kDefaultNetworkProviderUrl = "https://maps.googleapis.com/maps/api/b rowserlocation/json"; 20 const char* kDefaultNetworkProviderUrl = "https://maps.googleapis.com/maps/api/b rowserlocation/json";
20 GeolocationArbitratorDependencyFactory* g_dependency_factory_for_test = NULL; 21 GeolocationArbitratorDependencyFactory* g_dependency_factory_for_test = NULL;
21 22
22 } // namespace 23 } // namespace
23 24
24 // To avoid oscillations, set this to twice the expected update interval of a 25 // 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. 26 // a GPS-type location provider (in case it misses a beat) plus a little.
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 if (is_permission_granted_) 118 if (is_permission_granted_)
118 provider->OnPermissionGranted(); 119 provider->OnPermissionGranted();
119 providers_->push_back(provider); 120 providers_->push_back(provider);
120 } 121 }
121 122
122 void GeolocationArbitrator::LocationUpdateAvailable( 123 void GeolocationArbitrator::LocationUpdateAvailable(
123 LocationProviderBase* provider) { 124 LocationProviderBase* provider) {
124 DCHECK(provider); 125 DCHECK(provider);
125 Geoposition new_position; 126 Geoposition new_position;
126 provider->GetPosition(&new_position); 127 provider->GetPosition(&new_position);
127 DCHECK(new_position.IsInitialized()); 128 DCHECK(new_position.Validate() ||
129 new_position.error_code != content::Geoposition::ERROR_CODE_NONE);
128 if (!IsNewPositionBetter(position_, new_position, 130 if (!IsNewPositionBetter(position_, new_position,
129 provider == position_provider_)) 131 provider == position_provider_))
130 return; 132 return;
131 position_provider_ = provider; 133 position_provider_ = provider;
132 position_ = new_position; 134 position_ = new_position;
133 observer_->OnLocationUpdate(position_); 135 observer_->OnLocationUpdate(position_);
134 } 136 }
135 137
136 bool GeolocationArbitrator::IsNewPositionBetter( 138 bool GeolocationArbitrator::IsNewPositionBetter(
137 const Geoposition& old_position, const Geoposition& new_position, 139 const Geoposition& old_position, const Geoposition& new_position,
138 bool from_same_provider) const { 140 bool from_same_provider) const {
139 // Updates location_info if it's better than what we currently have, 141 // Updates location_info if it's better than what we currently have,
140 // or if it's a newer update from the same provider. 142 // or if it's a newer update from the same provider.
141 if (!old_position.IsValidFix()) { 143 if (!old_position.Validate()) {
142 // Older location wasn't locked. 144 // Older location wasn't locked.
143 return true; 145 return true;
144 } 146 }
145 if (new_position.IsValidFix()) { 147 if (new_position.Validate()) {
146 // New location is locked, let's check if it's any better. 148 // New location is locked, let's check if it's any better.
147 if (old_position.accuracy >= new_position.accuracy) { 149 if (old_position.accuracy >= new_position.accuracy) {
148 // Accuracy is better. 150 // Accuracy is better.
149 return true; 151 return true;
150 } else if (from_same_provider) { 152 } else if (from_same_provider) {
151 // Same provider, fresher location. 153 // Same provider, fresher location.
152 return true; 154 return true;
153 } else if ((get_time_now_() - old_position.timestamp).InMilliseconds() > 155 } else if ((get_time_now_() - old_position.timestamp).InMilliseconds() >
154 kFixStaleTimeoutMilliseconds) { 156 kFixStaleTimeoutMilliseconds) {
155 // Existing fix is stale. 157 // Existing fix is stale.
156 return true; 158 return true;
157 } 159 }
158 } 160 }
159 return false; 161 return false;
160 } 162 }
161 163
162 bool GeolocationArbitrator::HasPermissionBeenGranted() const { 164 bool GeolocationArbitrator::HasPermissionBeenGranted() const {
163 return is_permission_granted_; 165 return is_permission_granted_;
164 } 166 }
165 167
166 void GeolocationArbitrator::SetDependencyFactoryForTest( 168 void GeolocationArbitrator::SetDependencyFactoryForTest(
167 GeolocationArbitratorDependencyFactory* dependency_factory) { 169 GeolocationArbitratorDependencyFactory* dependency_factory) {
168 g_dependency_factory_for_test = dependency_factory; 170 g_dependency_factory_for_test = dependency_factory;
169 } 171 }
OLDNEW
« no previous file with comments | « content/browser/geolocation/location_arbitrator.h ('k') | content/browser/geolocation/location_arbitrator_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698