Index: blimp/engine/feature/geolocation/engine_geolocation_feature.cc |
diff --git a/blimp/engine/feature/geolocation/engine_geolocation_feature.cc b/blimp/engine/feature/geolocation/engine_geolocation_feature.cc |
index 4cce48905ee5dd38c999ad81fc49f970beb7e981..3e8551db1b6b5b51e3e56513db08cc8ea7af1d8f 100644 |
--- a/blimp/engine/feature/geolocation/engine_geolocation_feature.cc |
+++ b/blimp/engine/feature/geolocation/engine_geolocation_feature.cc |
@@ -9,6 +9,7 @@ |
#include "base/memory/ptr_util.h" |
#include "base/memory/weak_ptr.h" |
+#include "base/threading/thread_task_runner_handle.h" |
#include "blimp/common/create_blimp_message.h" |
#include "blimp/common/proto/blimp_message.pb.h" |
#include "blimp/common/proto/geolocation.pb.h" |
@@ -20,6 +21,7 @@ |
namespace blimp { |
namespace engine { |
namespace { |
+ |
class BlimpGeolocationDelegate : public device::GeolocationDelegate { |
public: |
explicit BlimpGeolocationDelegate( |
@@ -120,7 +122,8 @@ void EngineGeolocationFeature::ProcessMessage( |
void EngineGeolocationFeature::NotifyCallback( |
const device::Geoposition& position) { |
- geoposition_received_callback_.Run(position); |
+ callback_task_runner_->PostTask( |
+ FROM_HERE, base::Bind(geoposition_received_callback_, position)); |
} |
void EngineGeolocationFeature::RequestAccuracy( |
@@ -151,6 +154,9 @@ void EngineGeolocationFeature::OnPermissionGranted() { |
void EngineGeolocationFeature::SetUpdateCallback( |
const GeopositionReceivedCallback& callback) { |
geoposition_received_callback_ = callback; |
+ |
+ // Set |callback_task_runner_| to run on the current thread. |
+ callback_task_runner_ = base::ThreadTaskRunnerHandle::Get(); |
} |
} // namespace engine |