| 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 "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" |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 | 87 |
| 88 USBDevice::USBDevice(usb::DeviceInfoPtr deviceInfo, usb::DevicePtr device, Execu
tionContext* context) | 88 USBDevice::USBDevice(usb::DeviceInfoPtr deviceInfo, usb::DevicePtr device, Execu
tionContext* context) |
| 89 : ContextLifecycleObserver(context) | 89 : ContextLifecycleObserver(context) |
| 90 , m_deviceInfo(std::move(deviceInfo)) | 90 , m_deviceInfo(std::move(deviceInfo)) |
| 91 , m_device(std::move(device)) | 91 , m_device(std::move(device)) |
| 92 , m_opened(false) | 92 , m_opened(false) |
| 93 , m_deviceStateChangeInProgress(false) | 93 , m_deviceStateChangeInProgress(false) |
| 94 , m_configurationIndex(-1) | 94 , m_configurationIndex(-1) |
| 95 { | 95 { |
| 96 if (m_device) | 96 if (m_device) |
| 97 m_device.set_connection_error_handler(createBaseCallback(bind(&USBDevice
::onConnectionError, wrapWeakPersistent(this)))); | 97 m_device.set_connection_error_handler(createBaseCallback(WTF::bind(&USBD
evice::onConnectionError, wrapWeakPersistent(this)))); |
| 98 int configurationIndex = findConfigurationIndex(info().active_configuration)
; | 98 int configurationIndex = findConfigurationIndex(info().active_configuration)
; |
| 99 if (configurationIndex != -1) | 99 if (configurationIndex != -1) |
| 100 onConfigurationSelected(true /* success */, configurationIndex); | 100 onConfigurationSelected(true /* success */, configurationIndex); |
| 101 } | 101 } |
| 102 | 102 |
| 103 USBDevice::~USBDevice() | 103 USBDevice::~USBDevice() |
| 104 { | 104 { |
| 105 // |m_device| may still be valid but there should be no more outstanding | 105 // |m_device| may still be valid but there should be no more outstanding |
| 106 // requests because each holds a persistent handle to this object. | 106 // requests because each holds a persistent handle to this object. |
| 107 DCHECK(m_deviceRequests.isEmpty()); | 107 DCHECK(m_deviceRequests.isEmpty()); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 136 ScriptPromise USBDevice::open(ScriptState* scriptState) | 136 ScriptPromise USBDevice::open(ScriptState* scriptState) |
| 137 { | 137 { |
| 138 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; | 138 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; |
| 139 ScriptPromise promise = resolver->promise(); | 139 ScriptPromise promise = resolver->promise(); |
| 140 if (ensureNoDeviceOrInterfaceChangeInProgress(resolver)) { | 140 if (ensureNoDeviceOrInterfaceChangeInProgress(resolver)) { |
| 141 if (m_opened) { | 141 if (m_opened) { |
| 142 resolver->resolve(); | 142 resolver->resolve(); |
| 143 } else { | 143 } else { |
| 144 m_deviceStateChangeInProgress = true; | 144 m_deviceStateChangeInProgress = true; |
| 145 m_deviceRequests.add(resolver); | 145 m_deviceRequests.add(resolver); |
| 146 m_device->Open(createBaseCallback(bind(&USBDevice::asyncOpen, wrapPe
rsistent(this), wrapPersistent(resolver)))); | 146 m_device->Open(createBaseCallback(WTF::bind(&USBDevice::asyncOpen, w
rapPersistent(this), wrapPersistent(resolver)))); |
| 147 } | 147 } |
| 148 } | 148 } |
| 149 return promise; | 149 return promise; |
| 150 } | 150 } |
| 151 | 151 |
| 152 ScriptPromise USBDevice::close(ScriptState* scriptState) | 152 ScriptPromise USBDevice::close(ScriptState* scriptState) |
| 153 { | 153 { |
| 154 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; | 154 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; |
| 155 ScriptPromise promise = resolver->promise(); | 155 ScriptPromise promise = resolver->promise(); |
| 156 if (ensureNoDeviceOrInterfaceChangeInProgress(resolver)) { | 156 if (ensureNoDeviceOrInterfaceChangeInProgress(resolver)) { |
| 157 if (!m_opened) { | 157 if (!m_opened) { |
| 158 resolver->resolve(); | 158 resolver->resolve(); |
| 159 } else { | 159 } else { |
| 160 m_deviceStateChangeInProgress = true; | 160 m_deviceStateChangeInProgress = true; |
| 161 m_deviceRequests.add(resolver); | 161 m_deviceRequests.add(resolver); |
| 162 m_device->Close(createBaseCallback(bind(&USBDevice::asyncClose, wrap
Persistent(this), wrapPersistent(resolver)))); | 162 m_device->Close(createBaseCallback(WTF::bind(&USBDevice::asyncClose,
wrapPersistent(this), wrapPersistent(resolver)))); |
| 163 } | 163 } |
| 164 } | 164 } |
| 165 return promise; | 165 return promise; |
| 166 } | 166 } |
| 167 | 167 |
| 168 ScriptPromise USBDevice::selectConfiguration(ScriptState* scriptState, uint8_t c
onfigurationValue) | 168 ScriptPromise USBDevice::selectConfiguration(ScriptState* scriptState, uint8_t c
onfigurationValue) |
| 169 { | 169 { |
| 170 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; | 170 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; |
| 171 ScriptPromise promise = resolver->promise(); | 171 ScriptPromise promise = resolver->promise(); |
| 172 if (ensureNoDeviceOrInterfaceChangeInProgress(resolver)) { | 172 if (ensureNoDeviceOrInterfaceChangeInProgress(resolver)) { |
| 173 if (!m_opened) { | 173 if (!m_opened) { |
| 174 resolver->reject(DOMException::create(InvalidStateError, kOpenRequir
ed)); | 174 resolver->reject(DOMException::create(InvalidStateError, kOpenRequir
ed)); |
| 175 } else { | 175 } else { |
| 176 int configurationIndex = findConfigurationIndex(configurationValue); | 176 int configurationIndex = findConfigurationIndex(configurationValue); |
| 177 if (configurationIndex == -1) { | 177 if (configurationIndex == -1) { |
| 178 resolver->reject(DOMException::create(NotFoundError, "The config
uration value provided is not supported by the device.")); | 178 resolver->reject(DOMException::create(NotFoundError, "The config
uration value provided is not supported by the device.")); |
| 179 } else if (m_configurationIndex == configurationIndex) { | 179 } else if (m_configurationIndex == configurationIndex) { |
| 180 resolver->resolve(); | 180 resolver->resolve(); |
| 181 } else { | 181 } else { |
| 182 m_deviceStateChangeInProgress = true; | 182 m_deviceStateChangeInProgress = true; |
| 183 m_deviceRequests.add(resolver); | 183 m_deviceRequests.add(resolver); |
| 184 m_device->SetConfiguration(configurationValue, createBaseCallbac
k(bind(&USBDevice::asyncSelectConfiguration, wrapPersistent(this), configuration
Index, wrapPersistent(resolver)))); | 184 m_device->SetConfiguration(configurationValue, createBaseCallbac
k(WTF::bind(&USBDevice::asyncSelectConfiguration, wrapPersistent(this), configur
ationIndex, wrapPersistent(resolver)))); |
| 185 } | 185 } |
| 186 } | 186 } |
| 187 } | 187 } |
| 188 return promise; | 188 return promise; |
| 189 } | 189 } |
| 190 | 190 |
| 191 ScriptPromise USBDevice::claimInterface(ScriptState* scriptState, uint8_t interf
aceNumber) | 191 ScriptPromise USBDevice::claimInterface(ScriptState* scriptState, uint8_t interf
aceNumber) |
| 192 { | 192 { |
| 193 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; | 193 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; |
| 194 ScriptPromise promise = resolver->promise(); | 194 ScriptPromise promise = resolver->promise(); |
| 195 if (ensureDeviceConfigured(resolver)) { | 195 if (ensureDeviceConfigured(resolver)) { |
| 196 int interfaceIndex = findInterfaceIndex(interfaceNumber); | 196 int interfaceIndex = findInterfaceIndex(interfaceNumber); |
| 197 if (interfaceIndex == -1) { | 197 if (interfaceIndex == -1) { |
| 198 resolver->reject(DOMException::create(NotFoundError, kInterfaceNotFo
und)); | 198 resolver->reject(DOMException::create(NotFoundError, kInterfaceNotFo
und)); |
| 199 } else if (m_interfaceStateChangeInProgress.get(interfaceIndex)) { | 199 } else if (m_interfaceStateChangeInProgress.get(interfaceIndex)) { |
| 200 resolver->reject(DOMException::create(InvalidStateError, kInterfaceS
tateChangeInProgress)); | 200 resolver->reject(DOMException::create(InvalidStateError, kInterfaceS
tateChangeInProgress)); |
| 201 } else if (m_claimedInterfaces.get(interfaceIndex)) { | 201 } else if (m_claimedInterfaces.get(interfaceIndex)) { |
| 202 resolver->resolve(); | 202 resolver->resolve(); |
| 203 } else { | 203 } else { |
| 204 m_interfaceStateChangeInProgress.set(interfaceIndex); | 204 m_interfaceStateChangeInProgress.set(interfaceIndex); |
| 205 m_deviceRequests.add(resolver); | 205 m_deviceRequests.add(resolver); |
| 206 m_device->ClaimInterface(interfaceNumber, createBaseCallback(bind(&U
SBDevice::asyncClaimInterface, wrapPersistent(this), interfaceIndex, wrapPersist
ent(resolver)))); | 206 m_device->ClaimInterface(interfaceNumber, createBaseCallback(WTF::bi
nd(&USBDevice::asyncClaimInterface, wrapPersistent(this), interfaceIndex, wrapPe
rsistent(resolver)))); |
| 207 } | 207 } |
| 208 } | 208 } |
| 209 return promise; | 209 return promise; |
| 210 } | 210 } |
| 211 | 211 |
| 212 ScriptPromise USBDevice::releaseInterface(ScriptState* scriptState, uint8_t inte
rfaceNumber) | 212 ScriptPromise USBDevice::releaseInterface(ScriptState* scriptState, uint8_t inte
rfaceNumber) |
| 213 { | 213 { |
| 214 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; | 214 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; |
| 215 ScriptPromise promise = resolver->promise(); | 215 ScriptPromise promise = resolver->promise(); |
| 216 if (ensureDeviceConfigured(resolver)) { | 216 if (ensureDeviceConfigured(resolver)) { |
| 217 int interfaceIndex = findInterfaceIndex(interfaceNumber); | 217 int interfaceIndex = findInterfaceIndex(interfaceNumber); |
| 218 if (interfaceIndex == -1) { | 218 if (interfaceIndex == -1) { |
| 219 resolver->reject(DOMException::create(NotFoundError, "The interface
number provided is not supported by the device in its current configuration.")); | 219 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)) { | 220 } else if (m_interfaceStateChangeInProgress.get(interfaceIndex)) { |
| 221 resolver->reject(DOMException::create(InvalidStateError, kInterfaceS
tateChangeInProgress)); | 221 resolver->reject(DOMException::create(InvalidStateError, kInterfaceS
tateChangeInProgress)); |
| 222 } else if (!m_claimedInterfaces.get(interfaceIndex)) { | 222 } else if (!m_claimedInterfaces.get(interfaceIndex)) { |
| 223 resolver->resolve(); | 223 resolver->resolve(); |
| 224 } else { | 224 } else { |
| 225 // Mark this interface's endpoints unavailable while its state is | 225 // Mark this interface's endpoints unavailable while its state is |
| 226 // changing. | 226 // changing. |
| 227 setEndpointsForInterface(interfaceIndex, false); | 227 setEndpointsForInterface(interfaceIndex, false); |
| 228 m_interfaceStateChangeInProgress.set(interfaceIndex); | 228 m_interfaceStateChangeInProgress.set(interfaceIndex); |
| 229 m_deviceRequests.add(resolver); | 229 m_deviceRequests.add(resolver); |
| 230 m_device->ReleaseInterface(interfaceNumber, createBaseCallback(bind(
&USBDevice::asyncReleaseInterface, wrapPersistent(this), interfaceIndex, wrapPer
sistent(resolver)))); | 230 m_device->ReleaseInterface(interfaceNumber, createBaseCallback(WTF::
bind(&USBDevice::asyncReleaseInterface, wrapPersistent(this), interfaceIndex, wr
apPersistent(resolver)))); |
| 231 } | 231 } |
| 232 } | 232 } |
| 233 return promise; | 233 return promise; |
| 234 } | 234 } |
| 235 | 235 |
| 236 ScriptPromise USBDevice::selectAlternateInterface(ScriptState* scriptState, uint
8_t interfaceNumber, uint8_t alternateSetting) | 236 ScriptPromise USBDevice::selectAlternateInterface(ScriptState* scriptState, uint
8_t interfaceNumber, uint8_t alternateSetting) |
| 237 { | 237 { |
| 238 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; | 238 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; |
| 239 ScriptPromise promise = resolver->promise(); | 239 ScriptPromise promise = resolver->promise(); |
| 240 if (ensureInterfaceClaimed(interfaceNumber, resolver)) { | 240 if (ensureInterfaceClaimed(interfaceNumber, resolver)) { |
| 241 // TODO(reillyg): This is duplicated work. | 241 // TODO(reillyg): This is duplicated work. |
| 242 int interfaceIndex = findInterfaceIndex(interfaceNumber); | 242 int interfaceIndex = findInterfaceIndex(interfaceNumber); |
| 243 ASSERT(interfaceIndex != -1); | 243 ASSERT(interfaceIndex != -1); |
| 244 int alternateIndex = findAlternateIndex(interfaceIndex, alternateSetting
); | 244 int alternateIndex = findAlternateIndex(interfaceIndex, alternateSetting
); |
| 245 if (alternateIndex == -1) { | 245 if (alternateIndex == -1) { |
| 246 resolver->reject(DOMException::create(NotFoundError, "The alternate
setting provided is not supported by the device in its current configuration."))
; | 246 resolver->reject(DOMException::create(NotFoundError, "The alternate
setting provided is not supported by the device in its current configuration."))
; |
| 247 } else { | 247 } else { |
| 248 // Mark this old alternate interface's endpoints unavailable while | 248 // Mark this old alternate interface's endpoints unavailable while |
| 249 // the change is in progress. | 249 // the change is in progress. |
| 250 setEndpointsForInterface(interfaceIndex, false); | 250 setEndpointsForInterface(interfaceIndex, false); |
| 251 m_interfaceStateChangeInProgress.set(interfaceIndex); | 251 m_interfaceStateChangeInProgress.set(interfaceIndex); |
| 252 m_deviceRequests.add(resolver); | 252 m_deviceRequests.add(resolver); |
| 253 m_device->SetInterfaceAlternateSetting(interfaceNumber, alternateSet
ting, createBaseCallback(bind(&USBDevice::asyncSelectAlternateInterface, wrapPer
sistent(this), interfaceNumber, alternateSetting, wrapPersistent(resolver)))); | 253 m_device->SetInterfaceAlternateSetting(interfaceNumber, alternateSet
ting, createBaseCallback(WTF::bind(&USBDevice::asyncSelectAlternateInterface, wr
apPersistent(this), interfaceNumber, alternateSetting, wrapPersistent(resolver))
)); |
| 254 } | 254 } |
| 255 } | 255 } |
| 256 return promise; | 256 return promise; |
| 257 } | 257 } |
| 258 | 258 |
| 259 ScriptPromise USBDevice::controlTransferIn(ScriptState* scriptState, const USBCo
ntrolTransferParameters& setup, unsigned length) | 259 ScriptPromise USBDevice::controlTransferIn(ScriptState* scriptState, const USBCo
ntrolTransferParameters& setup, unsigned length) |
| 260 { | 260 { |
| 261 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; | 261 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; |
| 262 ScriptPromise promise = resolver->promise(); | 262 ScriptPromise promise = resolver->promise(); |
| 263 if (ensureDeviceConfigured(resolver)) { | 263 if (ensureDeviceConfigured(resolver)) { |
| 264 auto parameters = convertControlTransferParameters(setup, resolver); | 264 auto parameters = convertControlTransferParameters(setup, resolver); |
| 265 if (parameters) { | 265 if (parameters) { |
| 266 m_deviceRequests.add(resolver); | 266 m_deviceRequests.add(resolver); |
| 267 m_device->ControlTransferIn(std::move(parameters), length, 0, create
BaseCallback(bind(&USBDevice::asyncControlTransferIn, wrapPersistent(this), wrap
Persistent(resolver)))); | 267 m_device->ControlTransferIn(std::move(parameters), length, 0, create
BaseCallback(WTF::bind(&USBDevice::asyncControlTransferIn, wrapPersistent(this),
wrapPersistent(resolver)))); |
| 268 } | 268 } |
| 269 } | 269 } |
| 270 return promise; | 270 return promise; |
| 271 } | 271 } |
| 272 | 272 |
| 273 ScriptPromise USBDevice::controlTransferOut(ScriptState* scriptState, const USBC
ontrolTransferParameters& setup) | 273 ScriptPromise USBDevice::controlTransferOut(ScriptState* scriptState, const USBC
ontrolTransferParameters& setup) |
| 274 { | 274 { |
| 275 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; | 275 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; |
| 276 ScriptPromise promise = resolver->promise(); | 276 ScriptPromise promise = resolver->promise(); |
| 277 if (ensureDeviceConfigured(resolver)) { | 277 if (ensureDeviceConfigured(resolver)) { |
| 278 auto parameters = convertControlTransferParameters(setup, resolver); | 278 auto parameters = convertControlTransferParameters(setup, resolver); |
| 279 if (parameters) { | 279 if (parameters) { |
| 280 m_deviceRequests.add(resolver); | 280 m_deviceRequests.add(resolver); |
| 281 m_device->ControlTransferOut(std::move(parameters), mojo::WTFArray<u
int8_t>(), 0, createBaseCallback(bind(&USBDevice::asyncControlTransferOut, wrapP
ersistent(this), 0, wrapPersistent(resolver)))); | 281 m_device->ControlTransferOut(std::move(parameters), mojo::WTFArray<u
int8_t>(), 0, createBaseCallback(WTF::bind(&USBDevice::asyncControlTransferOut,
wrapPersistent(this), 0, wrapPersistent(resolver)))); |
| 282 } | 282 } |
| 283 } | 283 } |
| 284 return promise; | 284 return promise; |
| 285 } | 285 } |
| 286 | 286 |
| 287 ScriptPromise USBDevice::controlTransferOut(ScriptState* scriptState, const USBC
ontrolTransferParameters& setup, const ArrayBufferOrArrayBufferView& data) | 287 ScriptPromise USBDevice::controlTransferOut(ScriptState* scriptState, const USBC
ontrolTransferParameters& setup, const ArrayBufferOrArrayBufferView& data) |
| 288 { | 288 { |
| 289 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; | 289 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; |
| 290 ScriptPromise promise = resolver->promise(); | 290 ScriptPromise promise = resolver->promise(); |
| 291 if (ensureDeviceConfigured(resolver)) { | 291 if (ensureDeviceConfigured(resolver)) { |
| 292 auto parameters = convertControlTransferParameters(setup, resolver); | 292 auto parameters = convertControlTransferParameters(setup, resolver); |
| 293 if (parameters) { | 293 if (parameters) { |
| 294 mojo::WTFArray<uint8_t> buffer = convertBufferSource(data); | 294 mojo::WTFArray<uint8_t> buffer = convertBufferSource(data); |
| 295 unsigned transferLength = buffer.size(); | 295 unsigned transferLength = buffer.size(); |
| 296 m_deviceRequests.add(resolver); | 296 m_deviceRequests.add(resolver); |
| 297 m_device->ControlTransferOut(std::move(parameters), std::move(buffer
), 0, createBaseCallback(bind(&USBDevice::asyncControlTransferOut, wrapPersisten
t(this), transferLength, wrapPersistent(resolver)))); | 297 m_device->ControlTransferOut(std::move(parameters), std::move(buffer
), 0, createBaseCallback(WTF::bind(&USBDevice::asyncControlTransferOut, wrapPers
istent(this), transferLength, wrapPersistent(resolver)))); |
| 298 } | 298 } |
| 299 } | 299 } |
| 300 return promise; | 300 return promise; |
| 301 } | 301 } |
| 302 | 302 |
| 303 ScriptPromise USBDevice::clearHalt(ScriptState* scriptState, String direction, u
int8_t endpointNumber) | 303 ScriptPromise USBDevice::clearHalt(ScriptState* scriptState, String direction, u
int8_t endpointNumber) |
| 304 { | 304 { |
| 305 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; | 305 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; |
| 306 ScriptPromise promise = resolver->promise(); | 306 ScriptPromise promise = resolver->promise(); |
| 307 if (ensureEndpointAvailable(direction == "in", endpointNumber, resolver)) { | 307 if (ensureEndpointAvailable(direction == "in", endpointNumber, resolver)) { |
| 308 m_deviceRequests.add(resolver); | 308 m_deviceRequests.add(resolver); |
| 309 m_device->ClearHalt(endpointNumber, createBaseCallback(bind(&USBDevice::
asyncClearHalt, wrapPersistent(this), wrapPersistent(resolver)))); | 309 m_device->ClearHalt(endpointNumber, createBaseCallback(WTF::bind(&USBDev
ice::asyncClearHalt, wrapPersistent(this), wrapPersistent(resolver)))); |
| 310 } | 310 } |
| 311 return promise; | 311 return promise; |
| 312 } | 312 } |
| 313 | 313 |
| 314 ScriptPromise USBDevice::transferIn(ScriptState* scriptState, uint8_t endpointNu
mber, unsigned length) | 314 ScriptPromise USBDevice::transferIn(ScriptState* scriptState, uint8_t endpointNu
mber, unsigned length) |
| 315 { | 315 { |
| 316 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; | 316 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; |
| 317 ScriptPromise promise = resolver->promise(); | 317 ScriptPromise promise = resolver->promise(); |
| 318 if (ensureEndpointAvailable(true /* in */, endpointNumber, resolver)) { | 318 if (ensureEndpointAvailable(true /* in */, endpointNumber, resolver)) { |
| 319 m_deviceRequests.add(resolver); | 319 m_deviceRequests.add(resolver); |
| 320 m_device->GenericTransferIn(endpointNumber, length, 0, createBaseCallbac
k(bind(&USBDevice::asyncTransferIn, wrapPersistent(this), wrapPersistent(resolve
r)))); | 320 m_device->GenericTransferIn(endpointNumber, length, 0, createBaseCallbac
k(WTF::bind(&USBDevice::asyncTransferIn, wrapPersistent(this), wrapPersistent(re
solver)))); |
| 321 } | 321 } |
| 322 return promise; | 322 return promise; |
| 323 } | 323 } |
| 324 | 324 |
| 325 ScriptPromise USBDevice::transferOut(ScriptState* scriptState, uint8_t endpointN
umber, const ArrayBufferOrArrayBufferView& data) | 325 ScriptPromise USBDevice::transferOut(ScriptState* scriptState, uint8_t endpointN
umber, const ArrayBufferOrArrayBufferView& data) |
| 326 { | 326 { |
| 327 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; | 327 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; |
| 328 ScriptPromise promise = resolver->promise(); | 328 ScriptPromise promise = resolver->promise(); |
| 329 if (ensureEndpointAvailable(false /* out */, endpointNumber, resolver)) { | 329 if (ensureEndpointAvailable(false /* out */, endpointNumber, resolver)) { |
| 330 mojo::WTFArray<uint8_t> buffer = convertBufferSource(data); | 330 mojo::WTFArray<uint8_t> buffer = convertBufferSource(data); |
| 331 unsigned transferLength = buffer.size(); | 331 unsigned transferLength = buffer.size(); |
| 332 m_deviceRequests.add(resolver); | 332 m_deviceRequests.add(resolver); |
| 333 m_device->GenericTransferOut(endpointNumber, std::move(buffer), 0, creat
eBaseCallback(bind(&USBDevice::asyncTransferOut, wrapPersistent(this), transferL
ength, wrapPersistent(resolver)))); | 333 m_device->GenericTransferOut(endpointNumber, std::move(buffer), 0, creat
eBaseCallback(WTF::bind(&USBDevice::asyncTransferOut, wrapPersistent(this), tran
sferLength, wrapPersistent(resolver)))); |
| 334 } | 334 } |
| 335 return promise; | 335 return promise; |
| 336 } | 336 } |
| 337 | 337 |
| 338 ScriptPromise USBDevice::isochronousTransferIn(ScriptState* scriptState, uint8_t
endpointNumber, Vector<unsigned> packetLengths) | 338 ScriptPromise USBDevice::isochronousTransferIn(ScriptState* scriptState, uint8_t
endpointNumber, Vector<unsigned> packetLengths) |
| 339 { | 339 { |
| 340 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; | 340 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; |
| 341 ScriptPromise promise = resolver->promise(); | 341 ScriptPromise promise = resolver->promise(); |
| 342 if (ensureEndpointAvailable(true /* in */, endpointNumber, resolver)) { | 342 if (ensureEndpointAvailable(true /* in */, endpointNumber, resolver)) { |
| 343 m_deviceRequests.add(resolver); | 343 m_deviceRequests.add(resolver); |
| 344 m_device->IsochronousTransferIn(endpointNumber, mojo::WTFArray<uint32_t>
(std::move(packetLengths)), 0, createBaseCallback(bind(&USBDevice::asyncIsochron
ousTransferIn, wrapPersistent(this), wrapPersistent(resolver)))); | 344 m_device->IsochronousTransferIn(endpointNumber, mojo::WTFArray<uint32_t>
(std::move(packetLengths)), 0, createBaseCallback(WTF::bind(&USBDevice::asyncIso
chronousTransferIn, wrapPersistent(this), wrapPersistent(resolver)))); |
| 345 } | 345 } |
| 346 return promise; | 346 return promise; |
| 347 } | 347 } |
| 348 | 348 |
| 349 ScriptPromise USBDevice::isochronousTransferOut(ScriptState* scriptState, uint8_
t endpointNumber, const ArrayBufferOrArrayBufferView& data, Vector<unsigned> pac
ketLengths) | 349 ScriptPromise USBDevice::isochronousTransferOut(ScriptState* scriptState, uint8_
t endpointNumber, const ArrayBufferOrArrayBufferView& data, Vector<unsigned> pac
ketLengths) |
| 350 { | 350 { |
| 351 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; | 351 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; |
| 352 ScriptPromise promise = resolver->promise(); | 352 ScriptPromise promise = resolver->promise(); |
| 353 if (ensureEndpointAvailable(false /* out */, endpointNumber, resolver)) { | 353 if (ensureEndpointAvailable(false /* out */, endpointNumber, resolver)) { |
| 354 m_deviceRequests.add(resolver); | 354 m_deviceRequests.add(resolver); |
| 355 m_device->IsochronousTransferOut(endpointNumber, convertBufferSource(dat
a), mojo::WTFArray<uint32_t>(std::move(packetLengths)), 0, createBaseCallback(bi
nd(&USBDevice::asyncIsochronousTransferOut, wrapPersistent(this), wrapPersistent
(resolver)))); | 355 m_device->IsochronousTransferOut(endpointNumber, convertBufferSource(dat
a), mojo::WTFArray<uint32_t>(std::move(packetLengths)), 0, createBaseCallback(WT
F::bind(&USBDevice::asyncIsochronousTransferOut, wrapPersistent(this), wrapPersi
stent(resolver)))); |
| 356 } | 356 } |
| 357 return promise; | 357 return promise; |
| 358 } | 358 } |
| 359 | 359 |
| 360 ScriptPromise USBDevice::reset(ScriptState* scriptState) | 360 ScriptPromise USBDevice::reset(ScriptState* scriptState) |
| 361 { | 361 { |
| 362 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; | 362 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; |
| 363 ScriptPromise promise = resolver->promise(); | 363 ScriptPromise promise = resolver->promise(); |
| 364 if (ensureNoDeviceOrInterfaceChangeInProgress(resolver)) { | 364 if (ensureNoDeviceOrInterfaceChangeInProgress(resolver)) { |
| 365 if (!m_opened) { | 365 if (!m_opened) { |
| 366 resolver->reject(DOMException::create(InvalidStateError, kOpenRequir
ed)); | 366 resolver->reject(DOMException::create(InvalidStateError, kOpenRequir
ed)); |
| 367 } else { | 367 } else { |
| 368 m_deviceRequests.add(resolver); | 368 m_deviceRequests.add(resolver); |
| 369 m_device->Reset(createBaseCallback(bind(&USBDevice::asyncReset, wrap
Persistent(this), wrapPersistent(resolver)))); | 369 m_device->Reset(createBaseCallback(WTF::bind(&USBDevice::asyncReset,
wrapPersistent(this), wrapPersistent(resolver)))); |
| 370 } | 370 } |
| 371 } | 371 } |
| 372 return promise; | 372 return promise; |
| 373 } | 373 } |
| 374 | 374 |
| 375 void USBDevice::contextDestroyed() | 375 void USBDevice::contextDestroyed() |
| 376 { | 376 { |
| 377 m_device.reset(); | 377 m_device.reset(); |
| 378 m_deviceRequests.clear(); | 378 m_deviceRequests.clear(); |
| 379 } | 379 } |
| (...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 782 bool USBDevice::markRequestComplete(ScriptPromiseResolver* resolver) | 782 bool USBDevice::markRequestComplete(ScriptPromiseResolver* resolver) |
| 783 { | 783 { |
| 784 auto requestEntry = m_deviceRequests.find(resolver); | 784 auto requestEntry = m_deviceRequests.find(resolver); |
| 785 if (requestEntry == m_deviceRequests.end()) | 785 if (requestEntry == m_deviceRequests.end()) |
| 786 return false; | 786 return false; |
| 787 m_deviceRequests.remove(requestEntry); | 787 m_deviceRequests.remove(requestEntry); |
| 788 return true; | 788 return true; |
| 789 } | 789 } |
| 790 | 790 |
| 791 } // namespace blink | 791 } // namespace blink |
| OLD | NEW |