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 |