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..66dce7e918efc22100583e3207ca7ec35db470de 100644 |
| --- a/device/generic_sensor/sensor_provider_impl.cc |
| +++ b/device/generic_sensor/sensor_provider_impl.cc |
| @@ -20,6 +20,12 @@ uint64_t GetBufferOffset(mojom::SensorType type) { |
| mojom::SensorInitParams::kReadBufferSize; |
| } |
| +void RunCallback(mojom::SensorInitParamsPtr init_params, |
| + SensorImpl* sensor, |
| + const SensorProviderImpl::GetSensorCallback& callback) { |
| + callback.Run(std::move(init_params), sensor->GetClient()); |
| +} |
| + |
| } // namespace |
| // static |
| @@ -32,7 +38,7 @@ void SensorProviderImpl::Create(mojom::SensorProviderRequest request) { |
| } |
| SensorProviderImpl::SensorProviderImpl(PlatformSensorProvider* provider) |
| - : provider_(provider) { |
| + : provider_(provider), weak_ptr_factory_(this) { |
| DCHECK(provider_); |
| } |
| @@ -49,10 +55,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); |
| + 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); |
|
timvolodine
2016/10/04 18:39:15
and here?
|
| return; |
| @@ -66,7 +87,9 @@ void SensorProviderImpl::GetSensor(mojom::SensorType type, |
| init_params->mode = sensor->GetReportingMode(); |
| init_params->default_configuration = sensor->GetDefaultConfiguration(); |
| - callback.Run(std::move(init_params), sensor_impl->GetClient()); |
| + base::MessageLoop::current()->task_runner()->PostTask( |
|
timvolodine
2016/10/04 18:39:15
maybe use a helper function for this because in mu
|
| + FROM_HERE, base::Bind(RunCallback, base::Passed(&init_params), |
| + sensor_impl.get(), callback)); |
| mojo::MakeStrongBinding(std::move(sensor_impl), std::move(sensor_request)); |
| } |