diff options
Diffstat (limited to 'chromium/device/geolocation/location_arbitrator.cc')
-rw-r--r-- | chromium/device/geolocation/location_arbitrator.cc | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/chromium/device/geolocation/location_arbitrator.cc b/chromium/device/geolocation/location_arbitrator.cc index 2e10c303e63..a83983bf3a8 100644 --- a/chromium/device/geolocation/location_arbitrator.cc +++ b/chromium/device/geolocation/location_arbitrator.cc @@ -130,12 +130,15 @@ void LocationArbitrator::OnLocationUpdate(const LocationProvider* provider, const Geoposition& new_position) { DCHECK(new_position.Validate() || new_position.error_code != Geoposition::ERROR_CODE_NONE); - if (!IsNewPositionBetter(position_, new_position, - provider == position_provider_)) - return; - position_provider_ = provider; - position_ = new_position; - arbitrator_update_callback_.Run(this, position_); + providers_polled_.insert(provider); + if (IsNewPositionBetter(position_, new_position, + provider == position_provider_)) { + position_provider_ = provider; + position_ = new_position; + } + // Don't fail until all providers had their say. + if (position_.Validate() || (providers_polled_.size() == providers_.size())) + arbitrator_update_callback_.Run(this, position_); } const Geoposition& LocationArbitrator::GetPosition() { |