Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(925)

Side by Side Diff: device/devices_app/usb/device_manager_impl.cc

Issue 1352683006: Move device opening from DeviceManager to Device. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/devices_app/usb/device_manager_impl.h" 5 #include "device/devices_app/usb/device_manager_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/location.h" 8 #include "base/location.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 usb_service->GetDevices(base::Bind(&OnGetDevicesOnServiceThread, callback, 46 usb_service->GetDevices(base::Bind(&OnGetDevicesOnServiceThread, callback,
47 callback_task_runner)); 47 callback_task_runner));
48 } else { 48 } else {
49 callback_task_runner->PostTask(FROM_HERE, 49 callback_task_runner->PostTask(FROM_HERE,
50 base::Bind(callback, DeviceList())); 50 base::Bind(callback, DeviceList()));
51 } 51 }
52 } 52 }
53 53
54 void GetDeviceOnServiceThread( 54 void GetDeviceOnServiceThread(
55 const mojo::String& guid, 55 const mojo::String& guid,
56 const base::Callback<void(DeviceInfoPtr)>& callback, 56 const base::Callback<void(scoped_refptr<UsbDevice>)>& callback,
57 scoped_refptr<base::TaskRunner> callback_task_runner) {
58 DeviceInfoPtr device_info;
59 DCHECK(DeviceClient::Get());
60 UsbService* usb_service = DeviceClient::Get()->GetUsbService();
61 if (usb_service) {
62 scoped_refptr<UsbDevice> device = usb_service->GetDevice(guid);
63 if (device)
64 device_info = DeviceInfo::From(*device);
65 }
66
67 callback_task_runner->PostTask(
68 FROM_HERE, base::Bind(callback, base::Passed(&device_info)));
69 }
70
71 void RunOpenDeviceCallback(const DeviceManager::OpenDeviceCallback& callback,
72 OpenDeviceError error) {
73 callback.Run(error);
74 }
75
76 void OnOpenDeviceOnServiceThread(
77 mojo::InterfaceRequest<Device> device_request,
78 const DeviceManager::OpenDeviceCallback& callback,
79 scoped_refptr<base::TaskRunner> callback_task_runner,
80 scoped_refptr<UsbDeviceHandle> device_handle) {
81 if (!device_handle) {
82 callback_task_runner->PostTask(FROM_HERE,
83 base::Bind(&RunOpenDeviceCallback, callback,
84 OPEN_DEVICE_ERROR_ACCESS_DENIED));
85 return;
86 }
87
88 // Owned by its MessagePipe.
89 new DeviceImpl(device_handle, device_request.Pass());
90
91 callback_task_runner->PostTask(
92 FROM_HERE,
93 base::Bind(&RunOpenDeviceCallback, callback, OPEN_DEVICE_ERROR_OK));
94 }
95
96 void OpenDeviceOnServiceThread(
97 const std::string& guid,
98 mojo::InterfaceRequest<Device> device_request,
99 const DeviceManager::OpenDeviceCallback& callback,
100 scoped_refptr<base::TaskRunner> callback_task_runner) { 57 scoped_refptr<base::TaskRunner> callback_task_runner) {
101 DCHECK(DeviceClient::Get()); 58 DCHECK(DeviceClient::Get());
59 scoped_refptr<UsbDevice> device;
102 UsbService* usb_service = DeviceClient::Get()->GetUsbService(); 60 UsbService* usb_service = DeviceClient::Get()->GetUsbService();
103 if (!usb_service) { 61 if (usb_service)
104 callback_task_runner->PostTask(FROM_HERE, 62 device = usb_service->GetDevice(guid);
105 base::Bind(&RunOpenDeviceCallback, callback, 63 callback_task_runner->PostTask(FROM_HERE, base::Bind(callback, device));
106 OPEN_DEVICE_ERROR_NOT_FOUND));
107 return;
108 }
109 scoped_refptr<UsbDevice> device = usb_service->GetDevice(guid);
110 if (!device) {
111 callback_task_runner->PostTask(FROM_HERE,
112 base::Bind(&RunOpenDeviceCallback, callback,
113 OPEN_DEVICE_ERROR_NOT_FOUND));
114 return;
115 }
116 device->Open(base::Bind(&OnOpenDeviceOnServiceThread,
117 base::Passed(&device_request), callback,
118 callback_task_runner));
119 } 64 }
120 65
121 void FilterAndConvertDevicesAndThen( 66 void FilterAndConvertDevicesAndThen(
122 const DeviceMap& devices, 67 const DeviceMap& devices,
123 const DeviceManagerImpl::GetDevicesCallback& callback, 68 const DeviceManagerImpl::GetDevicesCallback& callback,
124 mojo::Array<mojo::String> allowed_guids) { 69 mojo::Array<mojo::String> allowed_guids) {
125 mojo::Array<DeviceInfoPtr> allowed_devices(allowed_guids.size()); 70 mojo::Array<DeviceInfoPtr> allowed_devices(allowed_guids.size());
126 for (size_t i = 0; i < allowed_guids.size(); ++i) { 71 for (size_t i = 0; i < allowed_guids.size(); ++i) {
127 const auto it = devices.find(allowed_guids[i]); 72 const auto it = devices.find(allowed_guids[i]);
128 DCHECK(it != devices.end()); 73 DCHECK(it != devices.end());
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 FROM_HERE, base::Bind(&GetDevicesOnServiceThread, get_devices_callback, 162 FROM_HERE, base::Bind(&GetDevicesOnServiceThread, get_devices_callback,
218 base::ThreadTaskRunnerHandle::Get())); 163 base::ThreadTaskRunnerHandle::Get()));
219 } 164 }
220 165
221 void DeviceManagerImpl::GetDeviceChanges( 166 void DeviceManagerImpl::GetDeviceChanges(
222 const GetDeviceChangesCallback& callback) { 167 const GetDeviceChangesCallback& callback) {
223 device_change_callbacks_.push(callback); 168 device_change_callbacks_.push(callback);
224 MaybeRunDeviceChangesCallback(); 169 MaybeRunDeviceChangesCallback();
225 } 170 }
226 171
227 void DeviceManagerImpl::OpenDevice( 172 void DeviceManagerImpl::GetDevice(
228 const mojo::String& guid, 173 const mojo::String& guid,
229 mojo::InterfaceRequest<Device> device_request, 174 mojo::InterfaceRequest<Device> device_request) {
230 const OpenDeviceCallback& callback) { 175 auto get_device_callback =
231 auto has_permission_callback = base::Bind( 176 base::Bind(&DeviceManagerImpl::OnGetDevice, weak_factory_.GetWeakPtr(),
232 &DeviceManagerImpl::OnGotDeviceInfoForOpen, weak_factory_.GetWeakPtr(), 177 base::Passed(&device_request));
233 base::Passed(&device_request), callback);
234 service_task_runner_->PostTask( 178 service_task_runner_->PostTask(
235 FROM_HERE, 179 FROM_HERE,
236 base::Bind(&GetDeviceOnServiceThread, guid, has_permission_callback, 180 base::Bind(&GetDeviceOnServiceThread, guid, get_device_callback,
237 base::ThreadTaskRunnerHandle::Get())); 181 base::ThreadTaskRunnerHandle::Get()));
238 } 182 }
239 183
240 void DeviceManagerImpl::OnGotDeviceInfoForOpen( 184 void DeviceManagerImpl::OnGetDevice(
241 mojo::InterfaceRequest<Device> device_request, 185 mojo::InterfaceRequest<Device> device_request,
242 const OpenDeviceCallback& callback, 186 scoped_refptr<UsbDevice> device) {
243 DeviceInfoPtr device_info) { 187 if (!device)
244 if (!device_info) {
245 callback.Run(OPEN_DEVICE_ERROR_NOT_FOUND);
246 return; 188 return;
247 }
248 189
249 mojo::Array<DeviceInfoPtr> requested_devices(1); 190 mojo::Array<DeviceInfoPtr> requested_devices(1);
250 requested_devices[0] = device_info.Pass(); 191 requested_devices[0] = DeviceInfo::From(*device);
251 permission_provider_->HasDevicePermission( 192 permission_provider_->HasDevicePermission(
252 requested_devices.Pass(), 193 requested_devices.Pass(),
253 base::Bind(&DeviceManagerImpl::OnOpenDevicePermissionCheckComplete, 194 base::Bind(&DeviceManagerImpl::OnGetDevicePermissionCheckComplete,
254 base::Unretained(this), base::Passed(&device_request), 195 base::Unretained(this), device,
255 callback)); 196 base::Passed(&device_request)));
256 } 197 }
257 198
258 void DeviceManagerImpl::OnOpenDevicePermissionCheckComplete( 199 void DeviceManagerImpl::OnGetDevicePermissionCheckComplete(
200 scoped_refptr<UsbDevice> device,
259 mojo::InterfaceRequest<Device> device_request, 201 mojo::InterfaceRequest<Device> device_request,
260 const OpenDeviceCallback& callback,
261 mojo::Array<mojo::String> allowed_guids) { 202 mojo::Array<mojo::String> allowed_guids) {
262 if (allowed_guids.size() == 0) { 203 if (allowed_guids.size() == 0)
263 callback.Run(OPEN_DEVICE_ERROR_ACCESS_DENIED);
264 return; 204 return;
265 }
266 205
267 DCHECK(allowed_guids.size() == 1); 206 DCHECK(allowed_guids.size() == 1);
268 service_task_runner_->PostTask( 207 new DeviceImpl(device, device_request.Pass());
269 FROM_HERE, base::Bind(&OpenDeviceOnServiceThread, allowed_guids[0],
270 base::Passed(&device_request), callback,
271 base::ThreadTaskRunnerHandle::Get()));
272 } 208 }
273 209
274 void DeviceManagerImpl::OnGetDevices(EnumerationOptionsPtr options, 210 void DeviceManagerImpl::OnGetDevices(EnumerationOptionsPtr options,
275 const GetDevicesCallback& callback, 211 const GetDevicesCallback& callback,
276 const DeviceList& devices) { 212 const DeviceList& devices) {
277 std::vector<UsbDeviceFilter> filters; 213 std::vector<UsbDeviceFilter> filters;
278 if (options) 214 if (options)
279 filters = options->filters.To<std::vector<UsbDeviceFilter>>(); 215 filters = options->filters.To<std::vector<UsbDeviceFilter>>();
280 216
281 std::map<std::string, scoped_refptr<UsbDevice>> device_map; 217 std::map<std::string, scoped_refptr<UsbDevice>> device_map;
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 callback.Run(notification.Pass()); 294 callback.Run(notification.Pass());
359 device_change_callbacks_.pop(); 295 device_change_callbacks_.pop();
360 } 296 }
361 297
362 if (devices_added_.size() > 0 || !devices_removed_.empty()) 298 if (devices_added_.size() > 0 || !devices_removed_.empty())
363 MaybeRunDeviceChangesCallback(); 299 MaybeRunDeviceChangesCallback();
364 } 300 }
365 301
366 } // namespace usb 302 } // namespace usb
367 } // namespace device 303 } // namespace device
OLDNEW
« no previous file with comments | « device/devices_app/usb/device_manager_impl.h ('k') | device/devices_app/usb/device_manager_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698