diff --git a/chromeos/geolocation/simple_geolocation_provider.cc b/chromeos/geolocation/simple_geolocation_provider.cc index 4a57ac7919bfac..e083b3edb0460b 100644 --- a/chromeos/geolocation/simple_geolocation_provider.cc +++ b/chromeos/geolocation/simple_geolocation_provider.cc @@ -62,10 +62,13 @@ void SimpleGeolocationProvider::OnGeolocationResponse( callback.Run(geoposition, server_error, elapsed); - ScopedVector::iterator new_end = - std::remove(requests_.begin(), requests_.end(), request); - DCHECK_EQ(std::distance(new_end, requests_.end()), 1); - requests_.erase(new_end, requests_.end()); + ScopedVector::iterator position = + std::find(requests_.begin(), requests_.end(), request); + DCHECK(position != requests_.end()); + if (position != requests_.end()) { + std::swap(*position, *requests_.rbegin()); + requests_.resize(requests_.size() - 1); + } } } // namespace chromeos diff --git a/chromeos/timezone/timezone_provider.cc b/chromeos/timezone/timezone_provider.cc index c9646c681bfafa..08e10e5359820e 100644 --- a/chromeos/timezone/timezone_provider.cc +++ b/chromeos/timezone/timezone_provider.cc @@ -47,10 +47,13 @@ void TimeZoneProvider::OnTimezoneResponse( TimeZoneRequest::TimeZoneResponseCallback callback, scoped_ptr timezone, bool server_error) { - ScopedVector::iterator new_end = - std::remove(requests_.begin(), requests_.end(), request); - DCHECK_EQ(std::distance(new_end, requests_.end()), 1); - requests_.erase(new_end, requests_.end()); + ScopedVector::iterator position = + std::find(requests_.begin(), requests_.end(), request); + DCHECK(position != requests_.end()); + if (position != requests_.end()) { + std::swap(*position, *requests_.rbegin()); + requests_.resize(requests_.size() - 1); + } callback.Run(timezone.Pass(), server_error); }