| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "device/geolocation/geolocation_service_impl.h" | 5 #include "device/geolocation/geolocation_service_impl.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/metrics/histogram_macros.h" | 10 #include "base/metrics/histogram_macros.h" |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 111 | 111 |
| 112 if (position_override_.Validate()) { | 112 if (position_override_.Validate()) { |
| 113 OnLocationUpdate(position_override_); | 113 OnLocationUpdate(position_override_); |
| 114 return; | 114 return; |
| 115 } | 115 } |
| 116 | 116 |
| 117 StartListeningForUpdates(); | 117 StartListeningForUpdates(); |
| 118 } | 118 } |
| 119 | 119 |
| 120 void GeolocationServiceImpl::QueryNextPosition( | 120 void GeolocationServiceImpl::QueryNextPosition( |
| 121 const QueryNextPositionCallback& callback) { | 121 QueryNextPositionCallback callback) { |
| 122 if (!position_callback_.is_null()) { | 122 if (!position_callback_.is_null()) { |
| 123 DVLOG(1) << "Overlapped call to QueryNextPosition!"; | 123 DVLOG(1) << "Overlapped call to QueryNextPosition!"; |
| 124 OnConnectionError(); // Simulate a connection error. | 124 OnConnectionError(); // Simulate a connection error. |
| 125 return; | 125 return; |
| 126 } | 126 } |
| 127 | 127 |
| 128 position_callback_ = callback; | 128 position_callback_ = std::move(callback); |
| 129 | 129 |
| 130 if (has_position_to_report_) | 130 if (has_position_to_report_) |
| 131 ReportCurrentPosition(); | 131 ReportCurrentPosition(); |
| 132 } | 132 } |
| 133 | 133 |
| 134 void GeolocationServiceImpl::SetOverride(const Geoposition& position) { | 134 void GeolocationServiceImpl::SetOverride(const Geoposition& position) { |
| 135 position_override_ = position; | 135 position_override_ = position; |
| 136 if (!position_override_.Validate()) { | 136 if (!position_override_.Validate()) { |
| 137 ResumeUpdates(); | 137 ResumeUpdates(); |
| 138 } | 138 } |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 mojom::Geoposition::ErrorCode(position.error_code); | 171 mojom::Geoposition::ErrorCode(position.error_code); |
| 172 current_position_.error_message = position.error_message; | 172 current_position_.error_message = position.error_message; |
| 173 | 173 |
| 174 has_position_to_report_ = true; | 174 has_position_to_report_ = true; |
| 175 | 175 |
| 176 if (!position_callback_.is_null()) | 176 if (!position_callback_.is_null()) |
| 177 ReportCurrentPosition(); | 177 ReportCurrentPosition(); |
| 178 } | 178 } |
| 179 | 179 |
| 180 void GeolocationServiceImpl::ReportCurrentPosition() { | 180 void GeolocationServiceImpl::ReportCurrentPosition() { |
| 181 position_callback_.Run(current_position_.Clone()); | 181 std::move(position_callback_).Run(current_position_.Clone()); |
| 182 position_callback_.Reset(); | |
| 183 has_position_to_report_ = false; | 182 has_position_to_report_ = false; |
| 184 } | 183 } |
| 185 | 184 |
| 186 } // namespace device | 185 } // namespace device |
| OLD | NEW |