| Index: device/usb/mojo/device_impl.cc
|
| diff --git a/device/usb/mojo/device_impl.cc b/device/usb/mojo/device_impl.cc
|
| index 8c6a2f06d7eaacb210ea58b56785674c55f9e811..68b8074e8971b3c884fe650057c79a2df7220dde 100644
|
| --- a/device/usb/mojo/device_impl.cc
|
| +++ b/device/usb/mojo/device_impl.cc
|
| @@ -172,12 +172,20 @@ bool DeviceImpl::HasControlTransferPermission(
|
| }
|
| }
|
|
|
| -void DeviceImpl::OnOpen(const OpenCallback& callback,
|
| +// static
|
| +void DeviceImpl::OnOpen(base::WeakPtr<DeviceImpl> self,
|
| + const OpenCallback& callback,
|
| scoped_refptr<UsbDeviceHandle> handle) {
|
| - device_handle_ = handle;
|
| - if (device_handle_ && permission_provider_)
|
| - permission_provider_->IncrementConnectionCount();
|
| - callback.Run(handle ? OpenDeviceError::OK : OpenDeviceError::ACCESS_DENIED);
|
| + if (!self) {
|
| + handle->Close();
|
| + return;
|
| + }
|
| +
|
| + self->device_handle_ = std::move(handle);
|
| + if (self->device_handle_ && self->permission_provider_)
|
| + self->permission_provider_->IncrementConnectionCount();
|
| + callback.Run(self->device_handle_ ? OpenDeviceError::OK
|
| + : OpenDeviceError::ACCESS_DENIED);
|
| }
|
|
|
| void DeviceImpl::OnPermissionGrantedForOpen(const OpenCallback& callback,
|
|
|