| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "device/usb/mojo/device_manager_impl.h" | 5 #include "device/usb/mojo/device_manager_impl.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <utility> | 10 #include <utility> |
| 11 | 11 |
| 12 #include "base/bind.h" | 12 #include "base/bind.h" |
| 13 #include "device/core/device_client.h" | 13 #include "device/core/device_client.h" |
| 14 #include "device/usb/mojo/device_impl.h" | 14 #include "device/usb/mojo/device_impl.h" |
| 15 #include "device/usb/mojo/permission_provider.h" | 15 #include "device/usb/mojo/permission_provider.h" |
| 16 #include "device/usb/mojo/type_converters.h" | 16 #include "device/usb/mojo/type_converters.h" |
| 17 #include "device/usb/public/interfaces/device.mojom.h" | 17 #include "device/usb/public/interfaces/device.mojom.h" |
| 18 #include "device/usb/usb_device.h" | 18 #include "device/usb/usb_device.h" |
| 19 #include "device/usb/usb_device_filter.h" | 19 #include "device/usb/usb_device_filter.h" |
| 20 #include "device/usb/usb_service.h" | 20 #include "device/usb/usb_service.h" |
| 21 #include "mojo/common/common_type_converters.h" | 21 #include "mojo/common/common_type_converters.h" |
| 22 #include "mojo/public/cpp/bindings/array.h" | 22 #include "mojo/public/cpp/bindings/array.h" |
| 23 #include "mojo/public/cpp/bindings/interface_request.h" | 23 #include "mojo/public/cpp/bindings/interface_request.h" |
| 24 #include "mojo/public/cpp/bindings/strong_binding.h" |
| 24 | 25 |
| 25 namespace device { | 26 namespace device { |
| 26 namespace usb { | 27 namespace usb { |
| 27 | 28 |
| 28 // static | 29 // static |
| 29 void DeviceManagerImpl::Create( | 30 void DeviceManagerImpl::Create( |
| 30 base::WeakPtr<PermissionProvider> permission_provider, | 31 base::WeakPtr<PermissionProvider> permission_provider, |
| 31 mojo::InterfaceRequest<DeviceManager> request) { | 32 mojo::InterfaceRequest<DeviceManager> request) { |
| 32 DCHECK(DeviceClient::Get()); | 33 DCHECK(DeviceClient::Get()); |
| 33 UsbService* usb_service = DeviceClient::Get()->GetUsbService(); | 34 UsbService* usb_service = DeviceClient::Get()->GetUsbService(); |
| 34 if (usb_service) { | 35 if (usb_service) { |
| 35 new DeviceManagerImpl(permission_provider, usb_service, std::move(request)); | 36 mojo::MakeStrongBinding( |
| 37 base::MakeUnique<DeviceManagerImpl>(permission_provider, usb_service), |
| 38 std::move(request)); |
| 36 } | 39 } |
| 37 } | 40 } |
| 38 | 41 |
| 39 DeviceManagerImpl::DeviceManagerImpl( | 42 DeviceManagerImpl::DeviceManagerImpl( |
| 40 base::WeakPtr<PermissionProvider> permission_provider, | 43 base::WeakPtr<PermissionProvider> permission_provider, |
| 41 UsbService* usb_service, | 44 UsbService* usb_service) |
| 42 mojo::InterfaceRequest<DeviceManager> request) | |
| 43 : permission_provider_(permission_provider), | 45 : permission_provider_(permission_provider), |
| 44 usb_service_(usb_service), | 46 usb_service_(usb_service), |
| 45 observer_(this), | 47 observer_(this), |
| 46 binding_(this, std::move(request)), | |
| 47 weak_factory_(this) { | 48 weak_factory_(this) { |
| 48 // This object owns itself and will be destroyed if the message pipe it is | 49 // This object owns itself and will be destroyed if the message pipe it is |
| 49 // bound to is closed, the message loop is destructed, or the UsbService is | 50 // bound to is closed, the message loop is destructed, or the UsbService is |
| 50 // shut down. | 51 // shut down. |
| 51 observer_.Add(usb_service_); | 52 observer_.Add(usb_service_); |
| 52 } | 53 } |
| 53 | 54 |
| 54 DeviceManagerImpl::~DeviceManagerImpl() { | 55 DeviceManagerImpl::~DeviceManagerImpl() { |
| 55 if (!connection_error_handler_.is_null()) | 56 if (!connection_error_handler_.is_null()) |
| 56 connection_error_handler_.Run(); | 57 connection_error_handler_.Run(); |
| 57 } | 58 } |
| 58 | 59 |
| 59 void DeviceManagerImpl::GetDevices(EnumerationOptionsPtr options, | 60 void DeviceManagerImpl::GetDevices(EnumerationOptionsPtr options, |
| 60 const GetDevicesCallback& callback) { | 61 const GetDevicesCallback& callback) { |
| 61 usb_service_->GetDevices(base::Bind(&DeviceManagerImpl::OnGetDevices, | 62 usb_service_->GetDevices(base::Bind(&DeviceManagerImpl::OnGetDevices, |
| 62 weak_factory_.GetWeakPtr(), | 63 weak_factory_.GetWeakPtr(), |
| 63 base::Passed(&options), callback)); | 64 base::Passed(&options), callback)); |
| 64 } | 65 } |
| 65 | 66 |
| 66 void DeviceManagerImpl::GetDevice( | 67 void DeviceManagerImpl::GetDevice( |
| 67 const std::string& guid, | 68 const std::string& guid, |
| 68 mojo::InterfaceRequest<Device> device_request) { | 69 mojo::InterfaceRequest<Device> device_request) { |
| 69 scoped_refptr<UsbDevice> device = usb_service_->GetDevice(guid); | 70 scoped_refptr<UsbDevice> device = usb_service_->GetDevice(guid); |
| 70 if (!device) | 71 if (!device) |
| 71 return; | 72 return; |
| 72 | 73 |
| 73 if (permission_provider_ && | 74 if (permission_provider_ && |
| 74 permission_provider_->HasDevicePermission(device)) { | 75 permission_provider_->HasDevicePermission(device)) { |
| 76 // Owns itself. |
| 75 new DeviceImpl(device, DeviceInfo::From(*device), permission_provider_, | 77 new DeviceImpl(device, DeviceInfo::From(*device), permission_provider_, |
| 76 std::move(device_request)); | 78 std::move(device_request)); |
| 77 } | 79 } |
| 78 } | 80 } |
| 79 | 81 |
| 80 void DeviceManagerImpl::SetClient(DeviceManagerClientPtr client) { | 82 void DeviceManagerImpl::SetClient(DeviceManagerClientPtr client) { |
| 81 client_ = std::move(client); | 83 client_ = std::move(client); |
| 82 } | 84 } |
| 83 | 85 |
| 84 void DeviceManagerImpl::OnGetDevices( | 86 void DeviceManagerImpl::OnGetDevices( |
| (...skipping 28 matching lines...) Expand all Loading... |
| 113 permission_provider_->HasDevicePermission(device)) | 115 permission_provider_->HasDevicePermission(device)) |
| 114 client_->OnDeviceRemoved(DeviceInfo::From(*device)); | 116 client_->OnDeviceRemoved(DeviceInfo::From(*device)); |
| 115 } | 117 } |
| 116 | 118 |
| 117 void DeviceManagerImpl::WillDestroyUsbService() { | 119 void DeviceManagerImpl::WillDestroyUsbService() { |
| 118 delete this; | 120 delete this; |
| 119 } | 121 } |
| 120 | 122 |
| 121 } // namespace usb | 123 } // namespace usb |
| 122 } // namespace device | 124 } // namespace device |
| OLD | NEW |