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

Side by Side Diff: third_party/WebKit/LayoutTests/usb/resources/webusb-test.js

Issue 2816663002: Ensure tests don't depend on fake devices being added synchronously (Closed)
Patch Set: Address ortuno@ comments Created 3 years, 8 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 'use strict'; 1 'use strict';
2 2
3 // This polyfil library implements the following WebIDL: 3 // This polyfil library implements the following WebIDL:
4 // 4 //
5 // partial interface USB { 5 // partial interface USB {
6 // [SameObject] readonly attribute USBTest test; 6 // [SameObject] readonly attribute USBTest test;
7 // } 7 // }
8 // 8 //
9 // interface USBTest { 9 // interface USBTest {
10 // attribute EventHandler ondeviceclose; 10 // attribute EventHandler ondeviceclose;
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 // The global mojo object contains the Mojo JS binding modules loaded during 69 // The global mojo object contains the Mojo JS binding modules loaded during
70 // initialization. 70 // initialization.
71 let mojo = null; 71 let mojo = null;
72 72
73 // These variables are logically members of the USBTest class but are defined 73 // These variables are logically members of the USBTest class but are defined
74 // here to hide them from being visible as fields of navigator.usb.test. 74 // here to hide them from being visible as fields of navigator.usb.test.
75 let g_initializePromise = null; 75 let g_initializePromise = null;
76 let g_chooserService = null; 76 let g_chooserService = null;
77 let g_deviceManager = null; 77 let g_deviceManager = null;
78 let g_closeListener = null; 78 let g_closeListener = null;
79 let g_nextGuid = 0;
79 80
80 function fakeDeviceInitToDeviceInfo(guid, init) { 81 function fakeDeviceInitToDeviceInfo(guid, init) {
81 let deviceInfo = { 82 let deviceInfo = {
82 guid: guid + "", 83 guid: guid + "",
83 usb_version_major: init.usbVersionMajor, 84 usb_version_major: init.usbVersionMajor,
84 usb_version_minor: init.usbVersionMinor, 85 usb_version_minor: init.usbVersionMinor,
85 usb_version_subminor: init.usbVersionSubminor, 86 usb_version_subminor: init.usbVersionSubminor,
86 class_code: init.deviceClass, 87 class_code: init.deviceClass,
87 subclass_code: init.deviceSubclass, 88 subclass_code: init.deviceSubclass,
88 protocol_code: init.deviceProtocol, 89 protocol_code: init.deviceProtocol,
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 this.bindingSet_ = 352 this.bindingSet_ =
352 new mojo.bindings.BindingSet(mojo.deviceManager.DeviceManager); 353 new mojo.bindings.BindingSet(mojo.deviceManager.DeviceManager);
353 this.devices_ = new Map(); 354 this.devices_ = new Map();
354 this.client_ = null; 355 this.client_ = null;
355 } 356 }
356 357
357 addBinding(handle) { 358 addBinding(handle) {
358 this.bindingSet_.addBinding(this, handle); 359 this.bindingSet_.addBinding(this, handle);
359 } 360 }
360 361
361 addDevice(info) { 362 addDevice(guid, info) {
362 let device = { 363 let device = {
363 guid: this.nextGuid_++ + "", 364 guid: guid,
364 info: info, 365 info: info,
365 bindingArray: [] 366 bindingArray: []
366 }; 367 };
367 this.devices_.set(device.guid, device); 368 this.devices_.set(device.guid, device);
368 if (this.client_) 369 if (this.client_)
369 this.client_.onDeviceAdded(fakeDeviceInitToDeviceInfo(device.guid, info)); 370 this.client_.onDeviceAdded(fakeDeviceInitToDeviceInfo(device.guid, info));
370 return device.guid;
371 } 371 }
372 372
373 removeDevice(guid) { 373 removeDevice(guid) {
374 let device = this.devices_.get(guid); 374 let device = this.devices_.get(guid);
375 if (!device)
376 throw new Error('Cannot remove unknown device "' + guid + '"');
377
375 for (var binding of device.bindingArray) 378 for (var binding of device.bindingArray)
376 binding.close(); 379 binding.close();
377 this.devices_.delete(guid); 380 this.devices_.delete(guid);
378 if (this.client_) { 381 if (this.client_) {
379 this.client_.onDeviceRemoved( 382 this.client_.onDeviceRemoved(
380 fakeDeviceInitToDeviceInfo(guid, device.info)); 383 fakeDeviceInitToDeviceInfo(guid, device.info));
381 } 384 }
382 } 385 }
383 386
384 removeAllDevices() { 387 removeAllDevices() {
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 handle => g_chooserService.addBinding(handle)); 522 handle => g_chooserService.addBinding(handle));
520 resolve(); 523 resolve();
521 }); 524 });
522 }); 525 });
523 } 526 }
524 527
525 addFakeDevice(deviceInit) { 528 addFakeDevice(deviceInit) {
526 if (!g_deviceManager) 529 if (!g_deviceManager)
527 throw new Error('Call initialize() before addFakeDevice().'); 530 throw new Error('Call initialize() before addFakeDevice().');
528 531
529 return g_deviceManager.addDevice(deviceInit); 532 // |addDevice| and |removeDevice| are called in a setTimeout callback so
533 // that tests do not rely on the device being immediately available which
534 // may not be true for all implementations of this test API.
535 let guid = (g_nextGuid++).toString();
536 setTimeout(() => g_deviceManager.addDevice(guid, deviceInit), 0);
537 return guid;
530 } 538 }
531 539
532 removeFakeDevice(guid) { 540 removeFakeDevice(guid) {
533 if (!g_deviceManager) 541 if (!g_deviceManager)
534 throw new Error('Call initialize() before removeFakeDevice().'); 542 throw new Error('Call initialize() before removeFakeDevice().');
535 543
536 return g_deviceManager.removeDevice(guid); 544 setTimeout(() => g_deviceManager.removeDevice(guid), 0);
537 } 545 }
538 546
539 set ondeviceclose(func) { 547 set ondeviceclose(func) {
540 g_closeListener = func; 548 g_closeListener = func;
541 } 549 }
542 550
543 set chosenDevice(guid) { 551 set chosenDevice(guid) {
544 if (!g_chooserService) 552 if (!g_chooserService)
545 throw new Error('Call initialize() before setting chosenDevice.'); 553 throw new Error('Call initialize() before setting chosenDevice.');
546 554
(...skipping 13 matching lines...) Expand all
560 568
561 g_deviceManager.removeAllDevices(); 569 g_deviceManager.removeAllDevices();
562 g_chooserService.setChosenDevice(null); 570 g_chooserService.setChosenDevice(null);
563 g_closeListener = null; 571 g_closeListener = null;
564 } 572 }
565 } 573 }
566 574
567 navigator.usb.test = new USBTest(); 575 navigator.usb.test = new USBTest();
568 576
569 })(); 577 })();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698