| Index: device/generic_sensor/sensor_provider_impl.cc
|
| diff --git a/device/generic_sensor/sensor_provider_impl.cc b/device/generic_sensor/sensor_provider_impl.cc
|
| index 2cdb1c5a32d5b32ac3c3b97070d0a3a2f0983d33..930083a20ce4c479eab59e88f77f44bb71b690a6 100644
|
| --- a/device/generic_sensor/sensor_provider_impl.cc
|
| +++ b/device/generic_sensor/sensor_provider_impl.cc
|
| @@ -20,6 +20,9 @@ uint64_t GetBufferOffset(mojom::SensorType type) {
|
| mojom::SensorInitParams::kReadBufferSize;
|
| }
|
|
|
| +using CreateSensorCallback =
|
| + base::Callback<void(scoped_refptr<PlatformSensor>)>;
|
| +
|
| } // namespace
|
|
|
| // static
|
| @@ -32,7 +35,7 @@ void SensorProviderImpl::Create(mojom::SensorProviderRequest request) {
|
| }
|
|
|
| SensorProviderImpl::SensorProviderImpl(PlatformSensorProvider* provider)
|
| - : provider_(provider) {
|
| + : provider_(provider), weak_ptr_factory_(this) {
|
| DCHECK(provider_);
|
| }
|
|
|
| @@ -49,10 +52,25 @@ void SensorProviderImpl::GetSensor(mojom::SensorType type,
|
|
|
| scoped_refptr<PlatformSensor> sensor = provider_->GetSensor(type);
|
| if (!sensor) {
|
| - sensor = provider_->CreateSensor(
|
| - type, mojom::SensorInitParams::kReadBufferSize, GetBufferOffset(type));
|
| + CreateSensorCallback cb = base::Bind(
|
| + &SensorProviderImpl::SensorCreated, weak_ptr_factory_.GetWeakPtr(),
|
| + type, base::Passed(&cloned_handle), base::Passed(&sensor_request),
|
| + callback);
|
| + provider_->CreateSensor(type, mojom::SensorInitParams::kReadBufferSize,
|
| + GetBufferOffset(type), cb);
|
| + return;
|
| }
|
|
|
| + SensorCreated(type, std::move(cloned_handle), std::move(sensor_request),
|
| + callback, std::move(sensor));
|
| +}
|
| +
|
| +void SensorProviderImpl::SensorCreated(
|
| + mojom::SensorType type,
|
| + mojo::ScopedSharedBufferHandle cloned_handle,
|
| + mojom::SensorRequest sensor_request,
|
| + const GetSensorCallback& callback,
|
| + scoped_refptr<PlatformSensor> sensor) {
|
| if (!sensor) {
|
| callback.Run(nullptr, nullptr);
|
| return;
|
|
|