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

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

Issue 1916283003: [K6] Replace bind() + GCed pointers with retainedRef() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@Kuroneko_5c
Patch Set: Rebase Created 4 years, 7 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"
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 ScriptPromise USBDevice::open(ScriptState* scriptState) 142 ScriptPromise USBDevice::open(ScriptState* scriptState)
143 { 143 {
144 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 144 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
145 ScriptPromise promise = resolver->promise(); 145 ScriptPromise promise = resolver->promise();
146 if (ensureNoDeviceOrInterfaceChangeInProgress(resolver)) { 146 if (ensureNoDeviceOrInterfaceChangeInProgress(resolver)) {
147 if (m_opened) { 147 if (m_opened) {
148 resolver->resolve(); 148 resolver->resolve();
149 } else { 149 } else {
150 m_deviceStateChangeInProgress = true; 150 m_deviceStateChangeInProgress = true;
151 m_deviceRequests.add(resolver); 151 m_deviceRequests.add(resolver);
152 m_device->Open(createBaseCallback(bind<usb::OpenDeviceError>(&USBDev ice::asyncOpen, this, resolver))); 152 m_device->Open(createBaseCallback(bind<usb::OpenDeviceError>(&USBDev ice::asyncOpen, retainedRef(this), retainedRef(resolver))));
153 } 153 }
154 } 154 }
155 return promise; 155 return promise;
156 } 156 }
157 157
158 ScriptPromise USBDevice::close(ScriptState* scriptState) 158 ScriptPromise USBDevice::close(ScriptState* scriptState)
159 { 159 {
160 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 160 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
161 ScriptPromise promise = resolver->promise(); 161 ScriptPromise promise = resolver->promise();
162 if (ensureNoDeviceOrInterfaceChangeInProgress(resolver)) { 162 if (ensureNoDeviceOrInterfaceChangeInProgress(resolver)) {
163 if (!m_opened) { 163 if (!m_opened) {
164 resolver->resolve(); 164 resolver->resolve();
165 } else { 165 } else {
166 m_deviceStateChangeInProgress = true; 166 m_deviceStateChangeInProgress = true;
167 m_deviceRequests.add(resolver); 167 m_deviceRequests.add(resolver);
168 m_device->Close(createBaseCallback(bind(&USBDevice::asyncClose, this , resolver))); 168 m_device->Close(createBaseCallback(bind(&USBDevice::asyncClose, reta inedRef(this), retainedRef(resolver))));
169 } 169 }
170 } 170 }
171 return promise; 171 return promise;
172 } 172 }
173 173
174 ScriptPromise USBDevice::selectConfiguration(ScriptState* scriptState, uint8_t c onfigurationValue) 174 ScriptPromise USBDevice::selectConfiguration(ScriptState* scriptState, uint8_t c onfigurationValue)
175 { 175 {
176 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 176 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
177 ScriptPromise promise = resolver->promise(); 177 ScriptPromise promise = resolver->promise();
178 if (ensureNoDeviceOrInterfaceChangeInProgress(resolver)) { 178 if (ensureNoDeviceOrInterfaceChangeInProgress(resolver)) {
179 if (!m_opened) { 179 if (!m_opened) {
180 resolver->reject(DOMException::create(InvalidStateError, kOpenRequir ed)); 180 resolver->reject(DOMException::create(InvalidStateError, kOpenRequir ed));
181 } else { 181 } else {
182 int configurationIndex = findConfigurationIndex(configurationValue); 182 int configurationIndex = findConfigurationIndex(configurationValue);
183 if (configurationIndex == -1) { 183 if (configurationIndex == -1) {
184 resolver->reject(DOMException::create(NotFoundError, "The config uration value provided is not supported by the device.")); 184 resolver->reject(DOMException::create(NotFoundError, "The config uration value provided is not supported by the device."));
185 } else if (m_configurationIndex == configurationIndex) { 185 } else if (m_configurationIndex == configurationIndex) {
186 resolver->resolve(); 186 resolver->resolve();
187 } else { 187 } else {
188 m_deviceStateChangeInProgress = true; 188 m_deviceStateChangeInProgress = true;
189 m_deviceRequests.add(resolver); 189 m_deviceRequests.add(resolver);
190 m_device->SetConfiguration(configurationValue, createBaseCallbac k(bind<bool>(&USBDevice::asyncSelectConfiguration, this, configurationIndex, res olver))); 190 m_device->SetConfiguration(configurationValue, createBaseCallbac k(bind<bool>(&USBDevice::asyncSelectConfiguration, retainedRef(this), configurat ionIndex, retainedRef(resolver))));
191 } 191 }
192 } 192 }
193 } 193 }
194 return promise; 194 return promise;
195 } 195 }
196 196
197 ScriptPromise USBDevice::claimInterface(ScriptState* scriptState, uint8_t interf aceNumber) 197 ScriptPromise USBDevice::claimInterface(ScriptState* scriptState, uint8_t interf aceNumber)
198 { 198 {
199 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 199 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
200 ScriptPromise promise = resolver->promise(); 200 ScriptPromise promise = resolver->promise();
201 if (ensureDeviceConfigured(resolver)) { 201 if (ensureDeviceConfigured(resolver)) {
202 int interfaceIndex = findInterfaceIndex(interfaceNumber); 202 int interfaceIndex = findInterfaceIndex(interfaceNumber);
203 if (interfaceIndex == -1) { 203 if (interfaceIndex == -1) {
204 resolver->reject(DOMException::create(NotFoundError, kInterfaceNotFo und)); 204 resolver->reject(DOMException::create(NotFoundError, kInterfaceNotFo und));
205 } else if (m_interfaceStateChangeInProgress.get(interfaceIndex)) { 205 } else if (m_interfaceStateChangeInProgress.get(interfaceIndex)) {
206 resolver->reject(DOMException::create(InvalidStateError, kInterfaceS tateChangeInProgress)); 206 resolver->reject(DOMException::create(InvalidStateError, kInterfaceS tateChangeInProgress));
207 } else if (m_claimedInterfaces.get(interfaceIndex)) { 207 } else if (m_claimedInterfaces.get(interfaceIndex)) {
208 resolver->resolve(); 208 resolver->resolve();
209 } else { 209 } else {
210 m_interfaceStateChangeInProgress.set(interfaceIndex); 210 m_interfaceStateChangeInProgress.set(interfaceIndex);
211 m_deviceRequests.add(resolver); 211 m_deviceRequests.add(resolver);
212 m_device->ClaimInterface(interfaceNumber, createBaseCallback(bind<bo ol>(&USBDevice::asyncClaimInterface, this, interfaceIndex, resolver))); 212 m_device->ClaimInterface(interfaceNumber, createBaseCallback(bind<bo ol>(&USBDevice::asyncClaimInterface, retainedRef(this), interfaceIndex, retained Ref(resolver))));
213 } 213 }
214 } 214 }
215 return promise; 215 return promise;
216 } 216 }
217 217
218 ScriptPromise USBDevice::releaseInterface(ScriptState* scriptState, uint8_t inte rfaceNumber) 218 ScriptPromise USBDevice::releaseInterface(ScriptState* scriptState, uint8_t inte rfaceNumber)
219 { 219 {
220 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 220 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
221 ScriptPromise promise = resolver->promise(); 221 ScriptPromise promise = resolver->promise();
222 if (ensureDeviceConfigured(resolver)) { 222 if (ensureDeviceConfigured(resolver)) {
223 int interfaceIndex = findInterfaceIndex(interfaceNumber); 223 int interfaceIndex = findInterfaceIndex(interfaceNumber);
224 if (interfaceIndex == -1) { 224 if (interfaceIndex == -1) {
225 resolver->reject(DOMException::create(NotFoundError, "The interface number provided is not supported by the device in its current configuration.")); 225 resolver->reject(DOMException::create(NotFoundError, "The interface number provided is not supported by the device in its current configuration."));
226 } else if (m_interfaceStateChangeInProgress.get(interfaceIndex)) { 226 } else if (m_interfaceStateChangeInProgress.get(interfaceIndex)) {
227 resolver->reject(DOMException::create(InvalidStateError, kInterfaceS tateChangeInProgress)); 227 resolver->reject(DOMException::create(InvalidStateError, kInterfaceS tateChangeInProgress));
228 } else if (!m_claimedInterfaces.get(interfaceIndex)) { 228 } else if (!m_claimedInterfaces.get(interfaceIndex)) {
229 resolver->resolve(); 229 resolver->resolve();
230 } else { 230 } else {
231 // Mark this interface's endpoints unavailable while its state is 231 // Mark this interface's endpoints unavailable while its state is
232 // changing. 232 // changing.
233 setEndpointsForInterface(interfaceIndex, false); 233 setEndpointsForInterface(interfaceIndex, false);
234 m_interfaceStateChangeInProgress.set(interfaceIndex); 234 m_interfaceStateChangeInProgress.set(interfaceIndex);
235 m_deviceRequests.add(resolver); 235 m_deviceRequests.add(resolver);
236 m_device->ReleaseInterface(interfaceNumber, createBaseCallback(bind< bool>(&USBDevice::asyncReleaseInterface, this, interfaceIndex, resolver))); 236 m_device->ReleaseInterface(interfaceNumber, createBaseCallback(bind< bool>(&USBDevice::asyncReleaseInterface, retainedRef(this), interfaceIndex, reta inedRef(resolver))));
237 } 237 }
238 } 238 }
239 return promise; 239 return promise;
240 } 240 }
241 241
242 ScriptPromise USBDevice::selectAlternateInterface(ScriptState* scriptState, uint 8_t interfaceNumber, uint8_t alternateSetting) 242 ScriptPromise USBDevice::selectAlternateInterface(ScriptState* scriptState, uint 8_t interfaceNumber, uint8_t alternateSetting)
243 { 243 {
244 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 244 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
245 ScriptPromise promise = resolver->promise(); 245 ScriptPromise promise = resolver->promise();
246 if (ensureInterfaceClaimed(interfaceNumber, resolver)) { 246 if (ensureInterfaceClaimed(interfaceNumber, resolver)) {
247 // TODO(reillyg): This is duplicated work. 247 // TODO(reillyg): This is duplicated work.
248 int interfaceIndex = findInterfaceIndex(interfaceNumber); 248 int interfaceIndex = findInterfaceIndex(interfaceNumber);
249 ASSERT(interfaceIndex != -1); 249 ASSERT(interfaceIndex != -1);
250 int alternateIndex = findAlternateIndex(interfaceIndex, alternateSetting ); 250 int alternateIndex = findAlternateIndex(interfaceIndex, alternateSetting );
251 if (alternateIndex == -1) { 251 if (alternateIndex == -1) {
252 resolver->reject(DOMException::create(NotFoundError, "The alternate setting provided is not supported by the device in its current configuration.")) ; 252 resolver->reject(DOMException::create(NotFoundError, "The alternate setting provided is not supported by the device in its current configuration.")) ;
253 } else { 253 } else {
254 // Mark this old alternate interface's endpoints unavailable while 254 // Mark this old alternate interface's endpoints unavailable while
255 // the change is in progress. 255 // the change is in progress.
256 setEndpointsForInterface(interfaceIndex, false); 256 setEndpointsForInterface(interfaceIndex, false);
257 m_interfaceStateChangeInProgress.set(interfaceIndex); 257 m_interfaceStateChangeInProgress.set(interfaceIndex);
258 m_deviceRequests.add(resolver); 258 m_deviceRequests.add(resolver);
259 m_device->SetInterfaceAlternateSetting(interfaceNumber, alternateSet ting, createBaseCallback(bind<bool>(&USBDevice::asyncSelectAlternateInterface, t his, interfaceNumber, alternateSetting, resolver))); 259 m_device->SetInterfaceAlternateSetting(interfaceNumber, alternateSet ting, createBaseCallback(bind<bool>(&USBDevice::asyncSelectAlternateInterface, r etainedRef(this), interfaceNumber, alternateSetting, retainedRef(resolver))));
260 } 260 }
261 } 261 }
262 return promise; 262 return promise;
263 } 263 }
264 264
265 ScriptPromise USBDevice::controlTransferIn(ScriptState* scriptState, const USBCo ntrolTransferParameters& setup, unsigned length) 265 ScriptPromise USBDevice::controlTransferIn(ScriptState* scriptState, const USBCo ntrolTransferParameters& setup, unsigned length)
266 { 266 {
267 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 267 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
268 ScriptPromise promise = resolver->promise(); 268 ScriptPromise promise = resolver->promise();
269 if (ensureDeviceConfigured(resolver)) { 269 if (ensureDeviceConfigured(resolver)) {
270 auto parameters = convertControlTransferParameters(setup, resolver); 270 auto parameters = convertControlTransferParameters(setup, resolver);
271 if (parameters) { 271 if (parameters) {
272 m_deviceRequests.add(resolver); 272 m_deviceRequests.add(resolver);
273 m_device->ControlTransferIn(std::move(parameters), length, 0, create BaseCallback(bind<usb::TransferStatus, mojo::WTFArray<uint8_t>>(&USBDevice::asyn cControlTransferIn, this, resolver))); 273 m_device->ControlTransferIn(std::move(parameters), length, 0, create BaseCallback(bind<usb::TransferStatus, mojo::WTFArray<uint8_t>>(&USBDevice::asyn cControlTransferIn, retainedRef(this), retainedRef(resolver))));
274 } 274 }
275 } 275 }
276 return promise; 276 return promise;
277 } 277 }
278 278
279 ScriptPromise USBDevice::controlTransferOut(ScriptState* scriptState, const USBC ontrolTransferParameters& setup) 279 ScriptPromise USBDevice::controlTransferOut(ScriptState* scriptState, const USBC ontrolTransferParameters& setup)
280 { 280 {
281 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 281 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
282 ScriptPromise promise = resolver->promise(); 282 ScriptPromise promise = resolver->promise();
283 if (ensureDeviceConfigured(resolver)) { 283 if (ensureDeviceConfigured(resolver)) {
284 auto parameters = convertControlTransferParameters(setup, resolver); 284 auto parameters = convertControlTransferParameters(setup, resolver);
285 if (parameters) { 285 if (parameters) {
286 m_deviceRequests.add(resolver); 286 m_deviceRequests.add(resolver);
287 m_device->ControlTransferOut(std::move(parameters), mojo::WTFArray<u int8_t>(), 0, createBaseCallback(bind<usb::TransferStatus>(&USBDevice::asyncCont rolTransferOut, this, 0, resolver))); 287 m_device->ControlTransferOut(std::move(parameters), mojo::WTFArray<u int8_t>(), 0, createBaseCallback(bind<usb::TransferStatus>(&USBDevice::asyncCont rolTransferOut, retainedRef(this), 0, retainedRef(resolver))));
288 } 288 }
289 } 289 }
290 return promise; 290 return promise;
291 } 291 }
292 292
293 ScriptPromise USBDevice::controlTransferOut(ScriptState* scriptState, const USBC ontrolTransferParameters& setup, const ArrayBufferOrArrayBufferView& data) 293 ScriptPromise USBDevice::controlTransferOut(ScriptState* scriptState, const USBC ontrolTransferParameters& setup, const ArrayBufferOrArrayBufferView& data)
294 { 294 {
295 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 295 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
296 ScriptPromise promise = resolver->promise(); 296 ScriptPromise promise = resolver->promise();
297 if (ensureDeviceConfigured(resolver)) { 297 if (ensureDeviceConfigured(resolver)) {
298 auto parameters = convertControlTransferParameters(setup, resolver); 298 auto parameters = convertControlTransferParameters(setup, resolver);
299 if (parameters) { 299 if (parameters) {
300 mojo::WTFArray<uint8_t> buffer = convertBufferSource(data); 300 mojo::WTFArray<uint8_t> buffer = convertBufferSource(data);
301 unsigned transferLength = buffer.size(); 301 unsigned transferLength = buffer.size();
302 m_deviceRequests.add(resolver); 302 m_deviceRequests.add(resolver);
303 m_device->ControlTransferOut(std::move(parameters), std::move(buffer ), 0, createBaseCallback(bind<usb::TransferStatus>(&USBDevice::asyncControlTrans ferOut, this, transferLength, resolver))); 303 m_device->ControlTransferOut(std::move(parameters), std::move(buffer ), 0, createBaseCallback(bind<usb::TransferStatus>(&USBDevice::asyncControlTrans ferOut, retainedRef(this), transferLength, retainedRef(resolver))));
304 } 304 }
305 } 305 }
306 return promise; 306 return promise;
307 } 307 }
308 308
309 ScriptPromise USBDevice::clearHalt(ScriptState* scriptState, String direction, u int8_t endpointNumber) 309 ScriptPromise USBDevice::clearHalt(ScriptState* scriptState, String direction, u int8_t endpointNumber)
310 { 310 {
311 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 311 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
312 ScriptPromise promise = resolver->promise(); 312 ScriptPromise promise = resolver->promise();
313 if (ensureEndpointAvailable(direction == "in", endpointNumber, resolver)) { 313 if (ensureEndpointAvailable(direction == "in", endpointNumber, resolver)) {
314 m_deviceRequests.add(resolver); 314 m_deviceRequests.add(resolver);
315 m_device->ClearHalt(endpointNumber, createBaseCallback(bind<bool>(&USBDe vice::asyncClearHalt, this, resolver))); 315 m_device->ClearHalt(endpointNumber, createBaseCallback(bind<bool>(&USBDe vice::asyncClearHalt, retainedRef(this), retainedRef(resolver))));
316 } 316 }
317 return promise; 317 return promise;
318 } 318 }
319 319
320 ScriptPromise USBDevice::transferIn(ScriptState* scriptState, uint8_t endpointNu mber, unsigned length) 320 ScriptPromise USBDevice::transferIn(ScriptState* scriptState, uint8_t endpointNu mber, unsigned length)
321 { 321 {
322 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 322 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
323 ScriptPromise promise = resolver->promise(); 323 ScriptPromise promise = resolver->promise();
324 if (ensureEndpointAvailable(true /* in */, endpointNumber, resolver)) { 324 if (ensureEndpointAvailable(true /* in */, endpointNumber, resolver)) {
325 m_deviceRequests.add(resolver); 325 m_deviceRequests.add(resolver);
326 m_device->GenericTransferIn(endpointNumber, length, 0, createBaseCallbac k(bind<usb::TransferStatus, mojo::WTFArray<uint8_t>>(&USBDevice::asyncTransferIn , this, resolver))); 326 m_device->GenericTransferIn(endpointNumber, length, 0, createBaseCallbac k(bind<usb::TransferStatus, mojo::WTFArray<uint8_t>>(&USBDevice::asyncTransferIn , retainedRef(this), retainedRef(resolver))));
327 } 327 }
328 return promise; 328 return promise;
329 } 329 }
330 330
331 ScriptPromise USBDevice::transferOut(ScriptState* scriptState, uint8_t endpointN umber, const ArrayBufferOrArrayBufferView& data) 331 ScriptPromise USBDevice::transferOut(ScriptState* scriptState, uint8_t endpointN umber, const ArrayBufferOrArrayBufferView& data)
332 { 332 {
333 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 333 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
334 ScriptPromise promise = resolver->promise(); 334 ScriptPromise promise = resolver->promise();
335 if (ensureEndpointAvailable(false /* out */, endpointNumber, resolver)) { 335 if (ensureEndpointAvailable(false /* out */, endpointNumber, resolver)) {
336 mojo::WTFArray<uint8_t> buffer = convertBufferSource(data); 336 mojo::WTFArray<uint8_t> buffer = convertBufferSource(data);
337 unsigned transferLength = buffer.size(); 337 unsigned transferLength = buffer.size();
338 m_deviceRequests.add(resolver); 338 m_deviceRequests.add(resolver);
339 m_device->GenericTransferOut(endpointNumber, std::move(buffer), 0, creat eBaseCallback(bind<usb::TransferStatus>(&USBDevice::asyncTransferOut, this, tran sferLength, resolver))); 339 m_device->GenericTransferOut(endpointNumber, std::move(buffer), 0, creat eBaseCallback(bind<usb::TransferStatus>(&USBDevice::asyncTransferOut, retainedRe f(this), transferLength, retainedRef(resolver))));
340 } 340 }
341 return promise; 341 return promise;
342 } 342 }
343 343
344 ScriptPromise USBDevice::isochronousTransferIn(ScriptState* scriptState, uint8_t endpointNumber, Vector<unsigned> packetLengths) 344 ScriptPromise USBDevice::isochronousTransferIn(ScriptState* scriptState, uint8_t endpointNumber, Vector<unsigned> packetLengths)
345 { 345 {
346 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 346 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
347 ScriptPromise promise = resolver->promise(); 347 ScriptPromise promise = resolver->promise();
348 if (ensureEndpointAvailable(true /* in */, endpointNumber, resolver)) { 348 if (ensureEndpointAvailable(true /* in */, endpointNumber, resolver)) {
349 m_deviceRequests.add(resolver); 349 m_deviceRequests.add(resolver);
350 m_device->IsochronousTransferIn(endpointNumber, mojo::WTFArray<uint32_t> (std::move(packetLengths)), 0, createBaseCallback(bind<mojo::WTFArray<uint8_t>, mojo::WTFArray<usb::IsochronousPacketPtr>>(&USBDevice::asyncIsochronousTransferI n, this, resolver))); 350 m_device->IsochronousTransferIn(endpointNumber, mojo::WTFArray<uint32_t> (std::move(packetLengths)), 0, createBaseCallback(bind<mojo::WTFArray<uint8_t>, mojo::WTFArray<usb::IsochronousPacketPtr>>(&USBDevice::asyncIsochronousTransferI n, retainedRef(this), retainedRef(resolver))));
351 } 351 }
352 return promise; 352 return promise;
353 } 353 }
354 354
355 ScriptPromise USBDevice::isochronousTransferOut(ScriptState* scriptState, uint8_ t endpointNumber, const ArrayBufferOrArrayBufferView& data, Vector<unsigned> pac ketLengths) 355 ScriptPromise USBDevice::isochronousTransferOut(ScriptState* scriptState, uint8_ t endpointNumber, const ArrayBufferOrArrayBufferView& data, Vector<unsigned> pac ketLengths)
356 { 356 {
357 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 357 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
358 ScriptPromise promise = resolver->promise(); 358 ScriptPromise promise = resolver->promise();
359 if (ensureEndpointAvailable(false /* out */, endpointNumber, resolver)) { 359 if (ensureEndpointAvailable(false /* out */, endpointNumber, resolver)) {
360 m_deviceRequests.add(resolver); 360 m_deviceRequests.add(resolver);
361 m_device->IsochronousTransferOut(endpointNumber, convertBufferSource(dat a), mojo::WTFArray<uint32_t>(std::move(packetLengths)), 0, createBaseCallback(bi nd<mojo::WTFArray<usb::IsochronousPacketPtr>>(&USBDevice::asyncIsochronousTransf erOut, this, resolver))); 361 m_device->IsochronousTransferOut(endpointNumber, convertBufferSource(dat a), mojo::WTFArray<uint32_t>(std::move(packetLengths)), 0, createBaseCallback(bi nd<mojo::WTFArray<usb::IsochronousPacketPtr>>(&USBDevice::asyncIsochronousTransf erOut, retainedRef(this), retainedRef(resolver))));
362 } 362 }
363 return promise; 363 return promise;
364 } 364 }
365 365
366 ScriptPromise USBDevice::reset(ScriptState* scriptState) 366 ScriptPromise USBDevice::reset(ScriptState* scriptState)
367 { 367 {
368 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 368 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
369 ScriptPromise promise = resolver->promise(); 369 ScriptPromise promise = resolver->promise();
370 if (ensureNoDeviceOrInterfaceChangeInProgress(resolver)) { 370 if (ensureNoDeviceOrInterfaceChangeInProgress(resolver)) {
371 if (!m_opened) { 371 if (!m_opened) {
372 resolver->reject(DOMException::create(InvalidStateError, kOpenRequir ed)); 372 resolver->reject(DOMException::create(InvalidStateError, kOpenRequir ed));
373 } else { 373 } else {
374 m_deviceRequests.add(resolver); 374 m_deviceRequests.add(resolver);
375 m_device->Reset(createBaseCallback(bind<bool>(&USBDevice::asyncReset , this, resolver))); 375 m_device->Reset(createBaseCallback(bind<bool>(&USBDevice::asyncReset , retainedRef(this), retainedRef(resolver))));
376 } 376 }
377 } 377 }
378 return promise; 378 return promise;
379 } 379 }
380 380
381 void USBDevice::contextDestroyed() 381 void USBDevice::contextDestroyed()
382 { 382 {
383 m_device.reset(); 383 m_device.reset();
384 m_deviceRequests.clear(); 384 m_deviceRequests.clear();
385 } 385 }
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after
795 m_device.reset(); 795 m_device.reset();
796 m_opened = false; 796 m_opened = false;
797 for (ScriptPromiseResolver* resolver : m_deviceRequests) { 797 for (ScriptPromiseResolver* resolver : m_deviceRequests) {
798 if (isActive(resolver)) 798 if (isActive(resolver))
799 resolver->reject(DOMException::create(NotFoundError, kDeviceUnavaila ble)); 799 resolver->reject(DOMException::create(NotFoundError, kDeviceUnavaila ble));
800 } 800 }
801 m_deviceRequests.clear(); 801 m_deviceRequests.clear();
802 } 802 }
803 803
804 } // namespace blink 804 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/modules/webusb/USB.cpp ('k') | third_party/WebKit/Source/modules/worklet/Worklet.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698