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

Side by Side Diff: extensions/browser/api/usb/usb_api.cc

Issue 497363004: Merge components/usb_service into device/usb. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Hide //device/usb on mobile platforms. Created 6 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "extensions/browser/api/usb/usb_api.h" 5 #include "extensions/browser/api/usb/usb_api.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
11 #include "base/message_loop/message_loop_proxy.h" 11 #include "base/message_loop/message_loop_proxy.h"
12 #include "components/usb_service/usb_device_handle.h"
13 #include "components/usb_service/usb_service.h"
14 #include "device/core/device_client.h" 12 #include "device/core/device_client.h"
13 #include "device/usb/usb_device_handle.h"
14 #include "device/usb/usb_service.h"
15 #include "extensions/browser/api/usb/usb_device_resource.h" 15 #include "extensions/browser/api/usb/usb_device_resource.h"
16 #include "extensions/browser/extension_system.h" 16 #include "extensions/browser/extension_system.h"
17 #include "extensions/common/api/usb.h" 17 #include "extensions/common/api/usb.h"
18 #include "extensions/common/permissions/permissions_data.h" 18 #include "extensions/common/permissions/permissions_data.h"
19 #include "extensions/common/permissions/usb_device_permission.h" 19 #include "extensions/common/permissions/usb_device_permission.h"
20 20
21 namespace usb = extensions::core_api::usb; 21 namespace usb = extensions::core_api::usb;
22 namespace BulkTransfer = usb::BulkTransfer; 22 namespace BulkTransfer = usb::BulkTransfer;
23 namespace ClaimInterface = usb::ClaimInterface; 23 namespace ClaimInterface = usb::ClaimInterface;
24 namespace CloseDevice = usb::CloseDevice; 24 namespace CloseDevice = usb::CloseDevice;
(...skipping 18 matching lines...) Expand all
43 using usb::Direction; 43 using usb::Direction;
44 using usb::EndpointDescriptor; 44 using usb::EndpointDescriptor;
45 using usb::GenericTransferInfo; 45 using usb::GenericTransferInfo;
46 using usb::InterfaceDescriptor; 46 using usb::InterfaceDescriptor;
47 using usb::IsochronousTransferInfo; 47 using usb::IsochronousTransferInfo;
48 using usb::Recipient; 48 using usb::Recipient;
49 using usb::RequestType; 49 using usb::RequestType;
50 using usb::SynchronizationType; 50 using usb::SynchronizationType;
51 using usb::TransferType; 51 using usb::TransferType;
52 using usb::UsageType; 52 using usb::UsageType;
53 using usb_service::UsbConfigDescriptor; 53 using device::UsbConfigDescriptor;
54 using usb_service::UsbDevice; 54 using device::UsbDevice;
55 using usb_service::UsbDeviceHandle; 55 using device::UsbDeviceHandle;
56 using usb_service::UsbEndpointDescriptor; 56 using device::UsbEndpointDescriptor;
57 using usb_service::UsbEndpointDirection; 57 using device::UsbEndpointDirection;
58 using usb_service::UsbInterfaceAltSettingDescriptor; 58 using device::UsbInterfaceAltSettingDescriptor;
59 using usb_service::UsbInterfaceDescriptor; 59 using device::UsbInterfaceDescriptor;
60 using usb_service::UsbService; 60 using device::UsbService;
61 using usb_service::UsbSynchronizationType; 61 using device::UsbSynchronizationType;
62 using usb_service::UsbTransferStatus; 62 using device::UsbTransferStatus;
63 using usb_service::UsbTransferType; 63 using device::UsbTransferType;
64 using usb_service::UsbUsageType; 64 using device::UsbUsageType;
65 65
66 typedef std::vector<scoped_refptr<UsbDevice> > DeviceVector; 66 typedef std::vector<scoped_refptr<UsbDevice> > DeviceVector;
67 typedef scoped_ptr<DeviceVector> ScopedDeviceVector; 67 typedef scoped_ptr<DeviceVector> ScopedDeviceVector;
68 68
69 namespace { 69 namespace {
70 70
71 const char kDataKey[] = "data"; 71 const char kDataKey[] = "data";
72 const char kResultCodeKey[] = "resultCode"; 72 const char kResultCodeKey[] = "resultCode";
73 73
74 const char kErrorInitService[] = "Failed to initialize USB service."; 74 const char kErrorInitService[] = "Failed to initialize USB service.";
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 const char kErrorResetDevice[] = 108 const char kErrorResetDevice[] =
109 "Error resetting the device. The device has been closed."; 109 "Error resetting the device. The device has been closed.";
110 110
111 const size_t kMaxTransferLength = 100 * 1024 * 1024; 111 const size_t kMaxTransferLength = 100 * 1024 * 1024;
112 const int kMaxPackets = 4 * 1024 * 1024; 112 const int kMaxPackets = 4 * 1024 * 1024;
113 const int kMaxPacketLength = 64 * 1024; 113 const int kMaxPacketLength = 64 * 1024;
114 114
115 bool ConvertDirectionToApi(const UsbEndpointDirection& input, 115 bool ConvertDirectionToApi(const UsbEndpointDirection& input,
116 Direction* output) { 116 Direction* output) {
117 switch (input) { 117 switch (input) {
118 case usb_service::USB_DIRECTION_INBOUND: 118 case device::USB_DIRECTION_INBOUND:
119 *output = usb::DIRECTION_IN; 119 *output = usb::DIRECTION_IN;
120 return true; 120 return true;
121 case usb_service::USB_DIRECTION_OUTBOUND: 121 case device::USB_DIRECTION_OUTBOUND:
122 *output = usb::DIRECTION_OUT; 122 *output = usb::DIRECTION_OUT;
123 return true; 123 return true;
124 default: 124 default:
125 NOTREACHED(); 125 NOTREACHED();
126 return false; 126 return false;
127 } 127 }
128 } 128 }
129 129
130 bool ConvertSynchronizationTypeToApi(const UsbSynchronizationType& input, 130 bool ConvertSynchronizationTypeToApi(const UsbSynchronizationType& input,
131 usb::SynchronizationType* output) { 131 usb::SynchronizationType* output) {
132 switch (input) { 132 switch (input) {
133 case usb_service::USB_SYNCHRONIZATION_NONE: 133 case device::USB_SYNCHRONIZATION_NONE:
134 *output = usb::SYNCHRONIZATION_TYPE_NONE; 134 *output = usb::SYNCHRONIZATION_TYPE_NONE;
135 return true; 135 return true;
136 case usb_service::USB_SYNCHRONIZATION_ASYNCHRONOUS: 136 case device::USB_SYNCHRONIZATION_ASYNCHRONOUS:
137 *output = usb::SYNCHRONIZATION_TYPE_ASYNCHRONOUS; 137 *output = usb::SYNCHRONIZATION_TYPE_ASYNCHRONOUS;
138 return true; 138 return true;
139 case usb_service::USB_SYNCHRONIZATION_ADAPTIVE: 139 case device::USB_SYNCHRONIZATION_ADAPTIVE:
140 *output = usb::SYNCHRONIZATION_TYPE_ADAPTIVE; 140 *output = usb::SYNCHRONIZATION_TYPE_ADAPTIVE;
141 return true; 141 return true;
142 case usb_service::USB_SYNCHRONIZATION_SYNCHRONOUS: 142 case device::USB_SYNCHRONIZATION_SYNCHRONOUS:
143 *output = usb::SYNCHRONIZATION_TYPE_SYNCHRONOUS; 143 *output = usb::SYNCHRONIZATION_TYPE_SYNCHRONOUS;
144 return true; 144 return true;
145 default: 145 default:
146 NOTREACHED(); 146 NOTREACHED();
147 return false; 147 return false;
148 } 148 }
149 } 149 }
150 150
151 bool ConvertTransferTypeToApi(const UsbTransferType& input, 151 bool ConvertTransferTypeToApi(const UsbTransferType& input,
152 usb::TransferType* output) { 152 usb::TransferType* output) {
153 switch (input) { 153 switch (input) {
154 case usb_service::USB_TRANSFER_CONTROL: 154 case device::USB_TRANSFER_CONTROL:
155 *output = usb::TRANSFER_TYPE_CONTROL; 155 *output = usb::TRANSFER_TYPE_CONTROL;
156 return true; 156 return true;
157 case usb_service::USB_TRANSFER_INTERRUPT: 157 case device::USB_TRANSFER_INTERRUPT:
158 *output = usb::TRANSFER_TYPE_INTERRUPT; 158 *output = usb::TRANSFER_TYPE_INTERRUPT;
159 return true; 159 return true;
160 case usb_service::USB_TRANSFER_ISOCHRONOUS: 160 case device::USB_TRANSFER_ISOCHRONOUS:
161 *output = usb::TRANSFER_TYPE_ISOCHRONOUS; 161 *output = usb::TRANSFER_TYPE_ISOCHRONOUS;
162 return true; 162 return true;
163 case usb_service::USB_TRANSFER_BULK: 163 case device::USB_TRANSFER_BULK:
164 *output = usb::TRANSFER_TYPE_BULK; 164 *output = usb::TRANSFER_TYPE_BULK;
165 return true; 165 return true;
166 default: 166 default:
167 NOTREACHED(); 167 NOTREACHED();
168 return false; 168 return false;
169 } 169 }
170 } 170 }
171 171
172 bool ConvertUsageTypeToApi(const UsbUsageType& input, usb::UsageType* output) { 172 bool ConvertUsageTypeToApi(const UsbUsageType& input, usb::UsageType* output) {
173 switch (input) { 173 switch (input) {
174 case usb_service::USB_USAGE_DATA: 174 case device::USB_USAGE_DATA:
175 *output = usb::USAGE_TYPE_DATA; 175 *output = usb::USAGE_TYPE_DATA;
176 return true; 176 return true;
177 case usb_service::USB_USAGE_FEEDBACK: 177 case device::USB_USAGE_FEEDBACK:
178 *output = usb::USAGE_TYPE_FEEDBACK; 178 *output = usb::USAGE_TYPE_FEEDBACK;
179 return true; 179 return true;
180 case usb_service::USB_USAGE_EXPLICIT_FEEDBACK: 180 case device::USB_USAGE_EXPLICIT_FEEDBACK:
181 *output = usb::USAGE_TYPE_EXPLICITFEEDBACK; 181 *output = usb::USAGE_TYPE_EXPLICITFEEDBACK;
182 return true; 182 return true;
183 default: 183 default:
184 NOTREACHED(); 184 NOTREACHED();
185 return false; 185 return false;
186 } 186 }
187 } 187 }
188 188
189 bool ConvertDirection(const Direction& input, UsbEndpointDirection* output) { 189 bool ConvertDirection(const Direction& input, UsbEndpointDirection* output) {
190 switch (input) { 190 switch (input) {
191 case usb::DIRECTION_IN: 191 case usb::DIRECTION_IN:
192 *output = usb_service::USB_DIRECTION_INBOUND; 192 *output = device::USB_DIRECTION_INBOUND;
193 return true; 193 return true;
194 case usb::DIRECTION_OUT: 194 case usb::DIRECTION_OUT:
195 *output = usb_service::USB_DIRECTION_OUTBOUND; 195 *output = device::USB_DIRECTION_OUTBOUND;
196 return true; 196 return true;
197 default: 197 default:
198 NOTREACHED(); 198 NOTREACHED();
199 return false; 199 return false;
200 } 200 }
201 } 201 }
202 202
203 bool ConvertRequestType(const RequestType& input, 203 bool ConvertRequestType(const RequestType& input,
204 UsbDeviceHandle::TransferRequestType* output) { 204 UsbDeviceHandle::TransferRequestType* output) {
205 switch (input) { 205 switch (input) {
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 size_t size) { 267 size_t size) {
268 if (size >= kMaxTransferLength) 268 if (size >= kMaxTransferLength)
269 return NULL; 269 return NULL;
270 270
271 // Allocate a |size|-bytes buffer, or a one-byte buffer if |size| is 0. This 271 // Allocate a |size|-bytes buffer, or a one-byte buffer if |size| is 0. This
272 // is due to an impedance mismatch between IOBuffer and URBs. An IOBuffer 272 // is due to an impedance mismatch between IOBuffer and URBs. An IOBuffer
273 // cannot represent a zero-length buffer, while an URB can. 273 // cannot represent a zero-length buffer, while an URB can.
274 scoped_refptr<net::IOBuffer> buffer = 274 scoped_refptr<net::IOBuffer> buffer =
275 new net::IOBuffer(std::max(static_cast<size_t>(1), size)); 275 new net::IOBuffer(std::max(static_cast<size_t>(1), size));
276 276
277 if (direction == usb_service::USB_DIRECTION_INBOUND) { 277 if (direction == device::USB_DIRECTION_INBOUND) {
278 return buffer; 278 return buffer;
279 } else if (direction == usb_service::USB_DIRECTION_OUTBOUND) { 279 } else if (direction == device::USB_DIRECTION_OUTBOUND) {
280 if (input.data.get() && size <= input.data->size()) { 280 if (input.data.get() && size <= input.data->size()) {
281 memcpy(buffer->data(), input.data->data(), size); 281 memcpy(buffer->data(), input.data->data(), size);
282 return buffer; 282 return buffer;
283 } 283 }
284 } 284 }
285 NOTREACHED(); 285 NOTREACHED();
286 return NULL; 286 return NULL;
287 } 287 }
288 288
289 const char* ConvertTransferStatusToErrorString(const UsbTransferStatus status) { 289 const char* ConvertTransferStatusToErrorString(const UsbTransferStatus status) {
290 switch (status) { 290 switch (status) {
291 case usb_service::USB_TRANSFER_COMPLETED: 291 case device::USB_TRANSFER_COMPLETED:
292 return ""; 292 return "";
293 case usb_service::USB_TRANSFER_ERROR: 293 case device::USB_TRANSFER_ERROR:
294 return kErrorGeneric; 294 return kErrorGeneric;
295 case usb_service::USB_TRANSFER_TIMEOUT: 295 case device::USB_TRANSFER_TIMEOUT:
296 return kErrorTimeout; 296 return kErrorTimeout;
297 case usb_service::USB_TRANSFER_CANCELLED: 297 case device::USB_TRANSFER_CANCELLED:
298 return kErrorCancelled; 298 return kErrorCancelled;
299 case usb_service::USB_TRANSFER_STALLED: 299 case device::USB_TRANSFER_STALLED:
300 return kErrorStalled; 300 return kErrorStalled;
301 case usb_service::USB_TRANSFER_DISCONNECT: 301 case device::USB_TRANSFER_DISCONNECT:
302 return kErrorDisconnect; 302 return kErrorDisconnect;
303 case usb_service::USB_TRANSFER_OVERFLOW: 303 case device::USB_TRANSFER_OVERFLOW:
304 return kErrorOverflow; 304 return kErrorOverflow;
305 case usb_service::USB_TRANSFER_LENGTH_SHORT: 305 case device::USB_TRANSFER_LENGTH_SHORT:
306 return kErrorTransferLength; 306 return kErrorTransferLength;
307 default: 307 default:
308 NOTREACHED(); 308 NOTREACHED();
309 return ""; 309 return "";
310 } 310 }
311 } 311 }
312 312
313 #if defined(OS_CHROMEOS) 313 #if defined(OS_CHROMEOS)
314 void RequestUsbDevicesAccessHelper( 314 void RequestUsbDevicesAccessHelper(
315 ScopedDeviceVector devices, 315 ScopedDeviceVector devices,
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 493
494 UsbAsyncApiTransferFunction::UsbAsyncApiTransferFunction() { 494 UsbAsyncApiTransferFunction::UsbAsyncApiTransferFunction() {
495 } 495 }
496 496
497 UsbAsyncApiTransferFunction::~UsbAsyncApiTransferFunction() { 497 UsbAsyncApiTransferFunction::~UsbAsyncApiTransferFunction() {
498 } 498 }
499 499
500 void UsbAsyncApiTransferFunction::OnCompleted(UsbTransferStatus status, 500 void UsbAsyncApiTransferFunction::OnCompleted(UsbTransferStatus status,
501 scoped_refptr<net::IOBuffer> data, 501 scoped_refptr<net::IOBuffer> data,
502 size_t length) { 502 size_t length) {
503 if (status != usb_service::USB_TRANSFER_COMPLETED) 503 if (status != device::USB_TRANSFER_COMPLETED)
504 SetError(ConvertTransferStatusToErrorString(status)); 504 SetError(ConvertTransferStatusToErrorString(status));
505 505
506 SetResult(CreateTransferInfo(status, data, length)); 506 SetResult(CreateTransferInfo(status, data, length));
507 AsyncWorkCompleted(); 507 AsyncWorkCompleted();
508 } 508 }
509 509
510 bool UsbAsyncApiTransferFunction::ConvertDirectionSafely( 510 bool UsbAsyncApiTransferFunction::ConvertDirectionSafely(
511 const Direction& input, 511 const Direction& input,
512 UsbEndpointDirection* output) { 512 UsbEndpointDirection* output) {
513 const bool converted = ConvertDirection(input, output); 513 const bool converted = ConvertDirection(input, output);
(...skipping 686 matching lines...) Expand 10 before | Expand all | Expand 10 after
1200 SetResult(new base::FundamentalValue(false)); 1200 SetResult(new base::FundamentalValue(false));
1201 CompleteWithError(kErrorResetDevice); 1201 CompleteWithError(kErrorResetDevice);
1202 return; 1202 return;
1203 } 1203 }
1204 1204
1205 SetResult(new base::FundamentalValue(true)); 1205 SetResult(new base::FundamentalValue(true));
1206 AsyncWorkCompleted(); 1206 AsyncWorkCompleted();
1207 } 1207 }
1208 1208
1209 } // namespace extensions 1209 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698