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

Side by Side Diff: third_party/WebKit/Source/modules/webusb/USBDevice.cpp

Issue 2272563003: Add an UMA histogram for WebUSB function calls. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased. Created 4 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 "modules/webusb/USBDevice.h" 5 #include "modules/webusb/USBDevice.h"
6 6
7 #include "bindings/core/v8/ScriptPromise.h" 7 #include "bindings/core/v8/ScriptPromise.h"
8 #include "bindings/core/v8/ScriptPromiseResolver.h" 8 #include "bindings/core/v8/ScriptPromiseResolver.h"
9 #include "bindings/core/v8/ToV8.h" 9 #include "bindings/core/v8/ToV8.h"
10 #include "core/dom/DOMArrayBuffer.h" 10 #include "core/dom/DOMArrayBuffer.h"
11 #include "core/dom/DOMArrayBufferView.h" 11 #include "core/dom/DOMArrayBufferView.h"
12 #include "core/dom/DOMException.h" 12 #include "core/dom/DOMException.h"
13 #include "core/dom/ExceptionCode.h" 13 #include "core/dom/ExceptionCode.h"
14 #include "core/frame/UseCounter.h"
14 #include "modules/webusb/USBConfiguration.h" 15 #include "modules/webusb/USBConfiguration.h"
15 #include "modules/webusb/USBControlTransferParameters.h" 16 #include "modules/webusb/USBControlTransferParameters.h"
16 #include "modules/webusb/USBInTransferResult.h" 17 #include "modules/webusb/USBInTransferResult.h"
17 #include "modules/webusb/USBIsochronousInTransferResult.h" 18 #include "modules/webusb/USBIsochronousInTransferResult.h"
18 #include "modules/webusb/USBIsochronousOutTransferResult.h" 19 #include "modules/webusb/USBIsochronousOutTransferResult.h"
19 #include "modules/webusb/USBOutTransferResult.h" 20 #include "modules/webusb/USBOutTransferResult.h"
20 #include "platform/mojo/MojoHelper.h" 21 #include "platform/mojo/MojoHelper.h"
21 #include "wtf/Assertions.h" 22 #include "wtf/Assertions.h"
22 23
23 namespace usb = device::usb::blink; 24 namespace usb = device::usb::blink;
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 { 129 {
129 size_t numConfigurations = info().configurations.size(); 130 size_t numConfigurations = info().configurations.size();
130 HeapVector<Member<USBConfiguration>> configurations(numConfigurations); 131 HeapVector<Member<USBConfiguration>> configurations(numConfigurations);
131 for (size_t i = 0; i < numConfigurations; ++i) 132 for (size_t i = 0; i < numConfigurations; ++i)
132 configurations[i] = USBConfiguration::create(this, i); 133 configurations[i] = USBConfiguration::create(this, i);
133 return configurations; 134 return configurations;
134 } 135 }
135 136
136 ScriptPromise USBDevice::open(ScriptState* scriptState) 137 ScriptPromise USBDevice::open(ScriptState* scriptState)
137 { 138 {
139 UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceO pen);
140
138 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 141 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
139 ScriptPromise promise = resolver->promise(); 142 ScriptPromise promise = resolver->promise();
140 if (ensureNoDeviceOrInterfaceChangeInProgress(resolver)) { 143 if (ensureNoDeviceOrInterfaceChangeInProgress(resolver)) {
141 if (m_opened) { 144 if (m_opened) {
142 resolver->resolve(); 145 resolver->resolve();
143 } else { 146 } else {
144 m_deviceStateChangeInProgress = true; 147 m_deviceStateChangeInProgress = true;
145 m_deviceRequests.add(resolver); 148 m_deviceRequests.add(resolver);
146 m_device->Open(convertToBaseCallback(WTF::bind(&USBDevice::asyncOpen , wrapPersistent(this), wrapPersistent(resolver)))); 149 m_device->Open(convertToBaseCallback(WTF::bind(&USBDevice::asyncOpen , wrapPersistent(this), wrapPersistent(resolver))));
147 } 150 }
148 } 151 }
149 return promise; 152 return promise;
150 } 153 }
151 154
152 ScriptPromise USBDevice::close(ScriptState* scriptState) 155 ScriptPromise USBDevice::close(ScriptState* scriptState)
153 { 156 {
157 UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceC lose);
158
154 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 159 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
155 ScriptPromise promise = resolver->promise(); 160 ScriptPromise promise = resolver->promise();
156 if (ensureNoDeviceOrInterfaceChangeInProgress(resolver)) { 161 if (ensureNoDeviceOrInterfaceChangeInProgress(resolver)) {
157 if (!m_opened) { 162 if (!m_opened) {
158 resolver->resolve(); 163 resolver->resolve();
159 } else { 164 } else {
160 m_deviceStateChangeInProgress = true; 165 m_deviceStateChangeInProgress = true;
161 m_deviceRequests.add(resolver); 166 m_deviceRequests.add(resolver);
162 m_device->Close(convertToBaseCallback(WTF::bind(&USBDevice::asyncClo se, wrapPersistent(this), wrapPersistent(resolver)))); 167 m_device->Close(convertToBaseCallback(WTF::bind(&USBDevice::asyncClo se, wrapPersistent(this), wrapPersistent(resolver))));
163 } 168 }
164 } 169 }
165 return promise; 170 return promise;
166 } 171 }
167 172
168 ScriptPromise USBDevice::selectConfiguration(ScriptState* scriptState, uint8_t c onfigurationValue) 173 ScriptPromise USBDevice::selectConfiguration(ScriptState* scriptState, uint8_t c onfigurationValue)
169 { 174 {
175 UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceS electConfiguration);
176
170 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 177 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
171 ScriptPromise promise = resolver->promise(); 178 ScriptPromise promise = resolver->promise();
172 if (ensureNoDeviceOrInterfaceChangeInProgress(resolver)) { 179 if (ensureNoDeviceOrInterfaceChangeInProgress(resolver)) {
173 if (!m_opened) { 180 if (!m_opened) {
174 resolver->reject(DOMException::create(InvalidStateError, kOpenRequir ed)); 181 resolver->reject(DOMException::create(InvalidStateError, kOpenRequir ed));
175 } else { 182 } else {
176 int configurationIndex = findConfigurationIndex(configurationValue); 183 int configurationIndex = findConfigurationIndex(configurationValue);
177 if (configurationIndex == -1) { 184 if (configurationIndex == -1) {
178 resolver->reject(DOMException::create(NotFoundError, "The config uration value provided is not supported by the device.")); 185 resolver->reject(DOMException::create(NotFoundError, "The config uration value provided is not supported by the device."));
179 } else if (m_configurationIndex == configurationIndex) { 186 } else if (m_configurationIndex == configurationIndex) {
180 resolver->resolve(); 187 resolver->resolve();
181 } else { 188 } else {
182 m_deviceStateChangeInProgress = true; 189 m_deviceStateChangeInProgress = true;
183 m_deviceRequests.add(resolver); 190 m_deviceRequests.add(resolver);
184 m_device->SetConfiguration(configurationValue, convertToBaseCall back(WTF::bind(&USBDevice::asyncSelectConfiguration, wrapPersistent(this), confi gurationIndex, wrapPersistent(resolver)))); 191 m_device->SetConfiguration(configurationValue, convertToBaseCall back(WTF::bind(&USBDevice::asyncSelectConfiguration, wrapPersistent(this), confi gurationIndex, wrapPersistent(resolver))));
185 } 192 }
186 } 193 }
187 } 194 }
188 return promise; 195 return promise;
189 } 196 }
190 197
191 ScriptPromise USBDevice::claimInterface(ScriptState* scriptState, uint8_t interf aceNumber) 198 ScriptPromise USBDevice::claimInterface(ScriptState* scriptState, uint8_t interf aceNumber)
192 { 199 {
200 UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceC laimInterface);
201
193 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 202 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
194 ScriptPromise promise = resolver->promise(); 203 ScriptPromise promise = resolver->promise();
195 if (ensureDeviceConfigured(resolver)) { 204 if (ensureDeviceConfigured(resolver)) {
196 int interfaceIndex = findInterfaceIndex(interfaceNumber); 205 int interfaceIndex = findInterfaceIndex(interfaceNumber);
197 if (interfaceIndex == -1) { 206 if (interfaceIndex == -1) {
198 resolver->reject(DOMException::create(NotFoundError, kInterfaceNotFo und)); 207 resolver->reject(DOMException::create(NotFoundError, kInterfaceNotFo und));
199 } else if (m_interfaceStateChangeInProgress.get(interfaceIndex)) { 208 } else if (m_interfaceStateChangeInProgress.get(interfaceIndex)) {
200 resolver->reject(DOMException::create(InvalidStateError, kInterfaceS tateChangeInProgress)); 209 resolver->reject(DOMException::create(InvalidStateError, kInterfaceS tateChangeInProgress));
201 } else if (m_claimedInterfaces.get(interfaceIndex)) { 210 } else if (m_claimedInterfaces.get(interfaceIndex)) {
202 resolver->resolve(); 211 resolver->resolve();
203 } else { 212 } else {
204 m_interfaceStateChangeInProgress.set(interfaceIndex); 213 m_interfaceStateChangeInProgress.set(interfaceIndex);
205 m_deviceRequests.add(resolver); 214 m_deviceRequests.add(resolver);
206 m_device->ClaimInterface(interfaceNumber, convertToBaseCallback(WTF: :bind(&USBDevice::asyncClaimInterface, wrapPersistent(this), interfaceIndex, wra pPersistent(resolver)))); 215 m_device->ClaimInterface(interfaceNumber, convertToBaseCallback(WTF: :bind(&USBDevice::asyncClaimInterface, wrapPersistent(this), interfaceIndex, wra pPersistent(resolver))));
207 } 216 }
208 } 217 }
209 return promise; 218 return promise;
210 } 219 }
211 220
212 ScriptPromise USBDevice::releaseInterface(ScriptState* scriptState, uint8_t inte rfaceNumber) 221 ScriptPromise USBDevice::releaseInterface(ScriptState* scriptState, uint8_t inte rfaceNumber)
213 { 222 {
223 UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceR eleaseInterface);
224
214 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 225 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
215 ScriptPromise promise = resolver->promise(); 226 ScriptPromise promise = resolver->promise();
216 if (ensureDeviceConfigured(resolver)) { 227 if (ensureDeviceConfigured(resolver)) {
217 int interfaceIndex = findInterfaceIndex(interfaceNumber); 228 int interfaceIndex = findInterfaceIndex(interfaceNumber);
218 if (interfaceIndex == -1) { 229 if (interfaceIndex == -1) {
219 resolver->reject(DOMException::create(NotFoundError, "The interface number provided is not supported by the device in its current configuration.")); 230 resolver->reject(DOMException::create(NotFoundError, "The interface number provided is not supported by the device in its current configuration."));
220 } else if (m_interfaceStateChangeInProgress.get(interfaceIndex)) { 231 } else if (m_interfaceStateChangeInProgress.get(interfaceIndex)) {
221 resolver->reject(DOMException::create(InvalidStateError, kInterfaceS tateChangeInProgress)); 232 resolver->reject(DOMException::create(InvalidStateError, kInterfaceS tateChangeInProgress));
222 } else if (!m_claimedInterfaces.get(interfaceIndex)) { 233 } else if (!m_claimedInterfaces.get(interfaceIndex)) {
223 resolver->resolve(); 234 resolver->resolve();
224 } else { 235 } else {
225 // Mark this interface's endpoints unavailable while its state is 236 // Mark this interface's endpoints unavailable while its state is
226 // changing. 237 // changing.
227 setEndpointsForInterface(interfaceIndex, false); 238 setEndpointsForInterface(interfaceIndex, false);
228 m_interfaceStateChangeInProgress.set(interfaceIndex); 239 m_interfaceStateChangeInProgress.set(interfaceIndex);
229 m_deviceRequests.add(resolver); 240 m_deviceRequests.add(resolver);
230 m_device->ReleaseInterface(interfaceNumber, convertToBaseCallback(WT F::bind(&USBDevice::asyncReleaseInterface, wrapPersistent(this), interfaceIndex, wrapPersistent(resolver)))); 241 m_device->ReleaseInterface(interfaceNumber, convertToBaseCallback(WT F::bind(&USBDevice::asyncReleaseInterface, wrapPersistent(this), interfaceIndex, wrapPersistent(resolver))));
231 } 242 }
232 } 243 }
233 return promise; 244 return promise;
234 } 245 }
235 246
236 ScriptPromise USBDevice::selectAlternateInterface(ScriptState* scriptState, uint 8_t interfaceNumber, uint8_t alternateSetting) 247 ScriptPromise USBDevice::selectAlternateInterface(ScriptState* scriptState, uint 8_t interfaceNumber, uint8_t alternateSetting)
237 { 248 {
249 UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceS electAlternateInterface);
250
238 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 251 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
239 ScriptPromise promise = resolver->promise(); 252 ScriptPromise promise = resolver->promise();
240 if (ensureInterfaceClaimed(interfaceNumber, resolver)) { 253 if (ensureInterfaceClaimed(interfaceNumber, resolver)) {
241 // TODO(reillyg): This is duplicated work. 254 // TODO(reillyg): This is duplicated work.
242 int interfaceIndex = findInterfaceIndex(interfaceNumber); 255 int interfaceIndex = findInterfaceIndex(interfaceNumber);
243 ASSERT(interfaceIndex != -1); 256 ASSERT(interfaceIndex != -1);
244 int alternateIndex = findAlternateIndex(interfaceIndex, alternateSetting ); 257 int alternateIndex = findAlternateIndex(interfaceIndex, alternateSetting );
245 if (alternateIndex == -1) { 258 if (alternateIndex == -1) {
246 resolver->reject(DOMException::create(NotFoundError, "The alternate setting provided is not supported by the device in its current configuration.")) ; 259 resolver->reject(DOMException::create(NotFoundError, "The alternate setting provided is not supported by the device in its current configuration.")) ;
247 } else { 260 } else {
248 // Mark this old alternate interface's endpoints unavailable while 261 // Mark this old alternate interface's endpoints unavailable while
249 // the change is in progress. 262 // the change is in progress.
250 setEndpointsForInterface(interfaceIndex, false); 263 setEndpointsForInterface(interfaceIndex, false);
251 m_interfaceStateChangeInProgress.set(interfaceIndex); 264 m_interfaceStateChangeInProgress.set(interfaceIndex);
252 m_deviceRequests.add(resolver); 265 m_deviceRequests.add(resolver);
253 m_device->SetInterfaceAlternateSetting(interfaceNumber, alternateSet ting, convertToBaseCallback(WTF::bind(&USBDevice::asyncSelectAlternateInterface, wrapPersistent(this), interfaceNumber, alternateSetting, wrapPersistent(resolve r)))); 266 m_device->SetInterfaceAlternateSetting(interfaceNumber, alternateSet ting, convertToBaseCallback(WTF::bind(&USBDevice::asyncSelectAlternateInterface, wrapPersistent(this), interfaceNumber, alternateSetting, wrapPersistent(resolve r))));
254 } 267 }
255 } 268 }
256 return promise; 269 return promise;
257 } 270 }
258 271
259 ScriptPromise USBDevice::controlTransferIn(ScriptState* scriptState, const USBCo ntrolTransferParameters& setup, unsigned length) 272 ScriptPromise USBDevice::controlTransferIn(ScriptState* scriptState, const USBCo ntrolTransferParameters& setup, unsigned length)
260 { 273 {
274 UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceC ontrolTransferIn);
275
261 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 276 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
262 ScriptPromise promise = resolver->promise(); 277 ScriptPromise promise = resolver->promise();
263 if (ensureDeviceConfigured(resolver)) { 278 if (ensureDeviceConfigured(resolver)) {
264 auto parameters = convertControlTransferParameters(setup, resolver); 279 auto parameters = convertControlTransferParameters(setup, resolver);
265 if (parameters) { 280 if (parameters) {
266 m_deviceRequests.add(resolver); 281 m_deviceRequests.add(resolver);
267 m_device->ControlTransferIn(std::move(parameters), length, 0, conver tToBaseCallback(WTF::bind(&USBDevice::asyncControlTransferIn, wrapPersistent(thi s), wrapPersistent(resolver)))); 282 m_device->ControlTransferIn(std::move(parameters), length, 0, conver tToBaseCallback(WTF::bind(&USBDevice::asyncControlTransferIn, wrapPersistent(thi s), wrapPersistent(resolver))));
268 } 283 }
269 } 284 }
270 return promise; 285 return promise;
271 } 286 }
272 287
273 ScriptPromise USBDevice::controlTransferOut(ScriptState* scriptState, const USBC ontrolTransferParameters& setup) 288 ScriptPromise USBDevice::controlTransferOut(ScriptState* scriptState, const USBC ontrolTransferParameters& setup)
274 { 289 {
290 UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceC ontrolTransferOut);
291
275 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 292 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
276 ScriptPromise promise = resolver->promise(); 293 ScriptPromise promise = resolver->promise();
277 if (ensureDeviceConfigured(resolver)) { 294 if (ensureDeviceConfigured(resolver)) {
278 auto parameters = convertControlTransferParameters(setup, resolver); 295 auto parameters = convertControlTransferParameters(setup, resolver);
279 if (parameters) { 296 if (parameters) {
280 m_deviceRequests.add(resolver); 297 m_deviceRequests.add(resolver);
281 m_device->ControlTransferOut(std::move(parameters), Vector<uint8_t>( ), 0, convertToBaseCallback(WTF::bind(&USBDevice::asyncControlTransferOut, wrapP ersistent(this), 0, wrapPersistent(resolver)))); 298 m_device->ControlTransferOut(std::move(parameters), Vector<uint8_t>( ), 0, convertToBaseCallback(WTF::bind(&USBDevice::asyncControlTransferOut, wrapP ersistent(this), 0, wrapPersistent(resolver))));
282 } 299 }
283 } 300 }
284 return promise; 301 return promise;
285 } 302 }
286 303
287 ScriptPromise USBDevice::controlTransferOut(ScriptState* scriptState, const USBC ontrolTransferParameters& setup, const ArrayBufferOrArrayBufferView& data) 304 ScriptPromise USBDevice::controlTransferOut(ScriptState* scriptState, const USBC ontrolTransferParameters& setup, const ArrayBufferOrArrayBufferView& data)
288 { 305 {
306 UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceC ontrolTransferOut);
307
289 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 308 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
290 ScriptPromise promise = resolver->promise(); 309 ScriptPromise promise = resolver->promise();
291 if (ensureDeviceConfigured(resolver)) { 310 if (ensureDeviceConfigured(resolver)) {
292 auto parameters = convertControlTransferParameters(setup, resolver); 311 auto parameters = convertControlTransferParameters(setup, resolver);
293 if (parameters) { 312 if (parameters) {
294 Vector<uint8_t> buffer = convertBufferSource(data); 313 Vector<uint8_t> buffer = convertBufferSource(data);
295 unsigned transferLength = buffer.size(); 314 unsigned transferLength = buffer.size();
296 m_deviceRequests.add(resolver); 315 m_deviceRequests.add(resolver);
297 m_device->ControlTransferOut(std::move(parameters), buffer, 0, conve rtToBaseCallback(WTF::bind(&USBDevice::asyncControlTransferOut, wrapPersistent(t his), transferLength, wrapPersistent(resolver)))); 316 m_device->ControlTransferOut(std::move(parameters), buffer, 0, conve rtToBaseCallback(WTF::bind(&USBDevice::asyncControlTransferOut, wrapPersistent(t his), transferLength, wrapPersistent(resolver))));
298 } 317 }
299 } 318 }
300 return promise; 319 return promise;
301 } 320 }
302 321
303 ScriptPromise USBDevice::clearHalt(ScriptState* scriptState, String direction, u int8_t endpointNumber) 322 ScriptPromise USBDevice::clearHalt(ScriptState* scriptState, String direction, u int8_t endpointNumber)
304 { 323 {
324 UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceC learHalt);
325
305 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 326 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
306 ScriptPromise promise = resolver->promise(); 327 ScriptPromise promise = resolver->promise();
307 if (ensureEndpointAvailable(direction == "in", endpointNumber, resolver)) { 328 if (ensureEndpointAvailable(direction == "in", endpointNumber, resolver)) {
308 m_deviceRequests.add(resolver); 329 m_deviceRequests.add(resolver);
309 m_device->ClearHalt(endpointNumber, convertToBaseCallback(WTF::bind(&USB Device::asyncClearHalt, wrapPersistent(this), wrapPersistent(resolver)))); 330 m_device->ClearHalt(endpointNumber, convertToBaseCallback(WTF::bind(&USB Device::asyncClearHalt, wrapPersistent(this), wrapPersistent(resolver))));
310 } 331 }
311 return promise; 332 return promise;
312 } 333 }
313 334
314 ScriptPromise USBDevice::transferIn(ScriptState* scriptState, uint8_t endpointNu mber, unsigned length) 335 ScriptPromise USBDevice::transferIn(ScriptState* scriptState, uint8_t endpointNu mber, unsigned length)
315 { 336 {
337 UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceT ransferIn);
338
316 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 339 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
317 ScriptPromise promise = resolver->promise(); 340 ScriptPromise promise = resolver->promise();
318 if (ensureEndpointAvailable(true /* in */, endpointNumber, resolver)) { 341 if (ensureEndpointAvailable(true /* in */, endpointNumber, resolver)) {
319 m_deviceRequests.add(resolver); 342 m_deviceRequests.add(resolver);
320 m_device->GenericTransferIn(endpointNumber, length, 0, convertToBaseCall back(WTF::bind(&USBDevice::asyncTransferIn, wrapPersistent(this), wrapPersistent (resolver)))); 343 m_device->GenericTransferIn(endpointNumber, length, 0, convertToBaseCall back(WTF::bind(&USBDevice::asyncTransferIn, wrapPersistent(this), wrapPersistent (resolver))));
321 } 344 }
322 return promise; 345 return promise;
323 } 346 }
324 347
325 ScriptPromise USBDevice::transferOut(ScriptState* scriptState, uint8_t endpointN umber, const ArrayBufferOrArrayBufferView& data) 348 ScriptPromise USBDevice::transferOut(ScriptState* scriptState, uint8_t endpointN umber, const ArrayBufferOrArrayBufferView& data)
326 { 349 {
350 UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceT ransferOut);
351
327 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 352 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
328 ScriptPromise promise = resolver->promise(); 353 ScriptPromise promise = resolver->promise();
329 if (ensureEndpointAvailable(false /* out */, endpointNumber, resolver)) { 354 if (ensureEndpointAvailable(false /* out */, endpointNumber, resolver)) {
330 Vector<uint8_t> buffer = convertBufferSource(data); 355 Vector<uint8_t> buffer = convertBufferSource(data);
331 unsigned transferLength = buffer.size(); 356 unsigned transferLength = buffer.size();
332 m_deviceRequests.add(resolver); 357 m_deviceRequests.add(resolver);
333 m_device->GenericTransferOut(endpointNumber, buffer, 0, convertToBaseCal lback(WTF::bind(&USBDevice::asyncTransferOut, wrapPersistent(this), transferLeng th, wrapPersistent(resolver)))); 358 m_device->GenericTransferOut(endpointNumber, buffer, 0, convertToBaseCal lback(WTF::bind(&USBDevice::asyncTransferOut, wrapPersistent(this), transferLeng th, wrapPersistent(resolver))));
334 } 359 }
335 return promise; 360 return promise;
336 } 361 }
337 362
338 ScriptPromise USBDevice::isochronousTransferIn(ScriptState* scriptState, uint8_t endpointNumber, Vector<unsigned> packetLengths) 363 ScriptPromise USBDevice::isochronousTransferIn(ScriptState* scriptState, uint8_t endpointNumber, Vector<unsigned> packetLengths)
339 { 364 {
365 UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceI sochronousTransferIn);
366
340 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 367 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
341 ScriptPromise promise = resolver->promise(); 368 ScriptPromise promise = resolver->promise();
342 if (ensureEndpointAvailable(true /* in */, endpointNumber, resolver)) { 369 if (ensureEndpointAvailable(true /* in */, endpointNumber, resolver)) {
343 m_deviceRequests.add(resolver); 370 m_deviceRequests.add(resolver);
344 m_device->IsochronousTransferIn(endpointNumber, packetLengths, 0, conver tToBaseCallback(WTF::bind(&USBDevice::asyncIsochronousTransferIn, wrapPersistent (this), wrapPersistent(resolver)))); 371 m_device->IsochronousTransferIn(endpointNumber, packetLengths, 0, conver tToBaseCallback(WTF::bind(&USBDevice::asyncIsochronousTransferIn, wrapPersistent (this), wrapPersistent(resolver))));
345 } 372 }
346 return promise; 373 return promise;
347 } 374 }
348 375
349 ScriptPromise USBDevice::isochronousTransferOut(ScriptState* scriptState, uint8_ t endpointNumber, const ArrayBufferOrArrayBufferView& data, Vector<unsigned> pac ketLengths) 376 ScriptPromise USBDevice::isochronousTransferOut(ScriptState* scriptState, uint8_ t endpointNumber, const ArrayBufferOrArrayBufferView& data, Vector<unsigned> pac ketLengths)
350 { 377 {
378 UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceI sochronousTransferOut);
379
351 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 380 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
352 ScriptPromise promise = resolver->promise(); 381 ScriptPromise promise = resolver->promise();
353 if (ensureEndpointAvailable(false /* out */, endpointNumber, resolver)) { 382 if (ensureEndpointAvailable(false /* out */, endpointNumber, resolver)) {
354 m_deviceRequests.add(resolver); 383 m_deviceRequests.add(resolver);
355 m_device->IsochronousTransferOut(endpointNumber, convertBufferSource(dat a), packetLengths, 0, convertToBaseCallback(WTF::bind(&USBDevice::asyncIsochrono usTransferOut, wrapPersistent(this), wrapPersistent(resolver)))); 384 m_device->IsochronousTransferOut(endpointNumber, convertBufferSource(dat a), packetLengths, 0, convertToBaseCallback(WTF::bind(&USBDevice::asyncIsochrono usTransferOut, wrapPersistent(this), wrapPersistent(resolver))));
356 } 385 }
357 return promise; 386 return promise;
358 } 387 }
359 388
360 ScriptPromise USBDevice::reset(ScriptState* scriptState) 389 ScriptPromise USBDevice::reset(ScriptState* scriptState)
361 { 390 {
391 UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceR eset);
392
362 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 393 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
363 ScriptPromise promise = resolver->promise(); 394 ScriptPromise promise = resolver->promise();
364 if (ensureNoDeviceOrInterfaceChangeInProgress(resolver)) { 395 if (ensureNoDeviceOrInterfaceChangeInProgress(resolver)) {
365 if (!m_opened) { 396 if (!m_opened) {
366 resolver->reject(DOMException::create(InvalidStateError, kOpenRequir ed)); 397 resolver->reject(DOMException::create(InvalidStateError, kOpenRequir ed));
367 } else { 398 } else {
368 m_deviceRequests.add(resolver); 399 m_deviceRequests.add(resolver);
369 m_device->Reset(convertToBaseCallback(WTF::bind(&USBDevice::asyncRes et, wrapPersistent(this), wrapPersistent(resolver)))); 400 m_device->Reset(convertToBaseCallback(WTF::bind(&USBDevice::asyncRes et, wrapPersistent(this), wrapPersistent(resolver))));
370 } 401 }
371 } 402 }
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after
782 bool USBDevice::markRequestComplete(ScriptPromiseResolver* resolver) 813 bool USBDevice::markRequestComplete(ScriptPromiseResolver* resolver)
783 { 814 {
784 auto requestEntry = m_deviceRequests.find(resolver); 815 auto requestEntry = m_deviceRequests.find(resolver);
785 if (requestEntry == m_deviceRequests.end()) 816 if (requestEntry == m_deviceRequests.end())
786 return false; 817 return false;
787 m_deviceRequests.remove(requestEntry); 818 m_deviceRequests.remove(requestEntry);
788 return true; 819 return true;
789 } 820 }
790 821
791 } // namespace blink 822 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/modules/webusb/USB.cpp ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698