Chromium Code Reviews| 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..51ad6cac2a1a81b731a485a4a96febef08fc65a5 100644 |
| --- a/device/generic_sensor/sensor_provider_impl.cc |
| +++ b/device/generic_sensor/sensor_provider_impl.cc |
| @@ -32,7 +32,7 @@ void SensorProviderImpl::Create(mojom::SensorProviderRequest request) { |
| } |
| SensorProviderImpl::SensorProviderImpl(PlatformSensorProvider* provider) |
| - : provider_(provider) { |
| + : provider_(provider), weak_ptr_factory_(this) { |
| DCHECK(provider_); |
| } |
| @@ -49,10 +49,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)); |
| + PlatformSensorProviderBase::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); |
|
timvolodine
2016/09/30 18:50:48
you mentioned this is 'synchronous' on android/mac
maksims (do not use this acc)
2016/10/03 12:58:11
It's technically possible, but it would be conside
timvolodine
2016/10/03 17:44:12
I think this should be addressed to some extent to
maksims (do not use this acc)
2016/10/04 07:21:34
Sure. As per discussion with shalamov@, we had the
|
| + 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; |