Chromium Code Reviews| Index: third_party/WebKit/LayoutTests/usb/resources/webusb-test.js |
| diff --git a/third_party/WebKit/LayoutTests/usb/resources/webusb-test.js b/third_party/WebKit/LayoutTests/usb/resources/webusb-test.js |
| index 44d9aecec0550bade238313dd512805a4061117e..b98110c384fef9aaca63c6028008ed240f79165c 100644 |
| --- a/third_party/WebKit/LayoutTests/usb/resources/webusb-test.js |
| +++ b/third_party/WebKit/LayoutTests/usb/resources/webusb-test.js |
| @@ -8,16 +8,19 @@ |
| // |
| // interface USBTest { |
| // attribute EventHandler ondeviceclose; |
| -// attribute DOMString? chosenDevice; |
| +// attribute FakeUSBDevice? chosenDevice; |
| // attribute FrozenArray<USBDeviceFilter>? lastFilters; |
| // |
| // Promise<void> initialize(); |
| // Promise<void> attachToWindow(Window window); |
| -// DOMString addFakeDevice(FakeUSBDeviceInit deviceInit); |
| -// void removeFakeDevice(DOMString); |
| +// FakeUSBDevice addFakeDevice(FakeUSBDeviceInit deviceInit); |
| // void reset(); |
| // }; |
| // |
| +// interface FakeUSBDevice { |
| +// void disconnect(); |
| +// }; |
| +// |
| // dictionary FakeUSBDeviceInit { |
| // octet usbVersionMajor; |
| // octet usbVersionMinor; |
| @@ -76,6 +79,7 @@ let g_initializePromise = null; |
| let g_chooserService = null; |
| let g_deviceManager = null; |
| let g_closeListener = null; |
| +let g_nextGuid = 0; |
| function fakeDeviceInitToDeviceInfo(guid, init) { |
| let deviceInfo = { |
| @@ -347,33 +351,40 @@ class FakeDeviceManager { |
| this.bindingSet_ = |
| new mojo.bindings.BindingSet(mojo.deviceManager.DeviceManager); |
| this.devices_ = new Map(); |
| + this.devicesByGuid_ = new Map(); |
| this.client_ = null; |
| + this.nextGuid_ = 0; |
| } |
| addBinding(handle) { |
| this.bindingSet_.addBinding(this, handle); |
| } |
| - addDevice(info) { |
| + addDevice(fakeDevice, info) { |
| let device = { |
| - guid: this.nextGuid_++ + "", |
| + fakeDevice: fakeDevice, |
| + guid: (this.nextGuid_++).toString(), |
| info: info, |
| bindingArray: [] |
| }; |
| - this.devices_.set(device.guid, device); |
| + this.devices_.set(fakeDevice, device); |
| + this.devicesByGuid_.set(device.guid, device); |
| if (this.client_) |
| this.client_.onDeviceAdded(fakeDeviceInitToDeviceInfo(device.guid, info)); |
| - return device.guid; |
| } |
| - removeDevice(guid) { |
| - let device = this.devices_.get(guid); |
| + removeDevice(fakeDevice) { |
| + let device = this.devices_.get(fakeDevice); |
| + if (!device) |
| + throw new Error('Cannot remove unknown device "' + guid + '"'); |
|
ortuno
2017/04/18 03:04:06
|guid| doesn't exist anymore.
Reilly Grant (use Gerrit)
2017/04/18 18:21:38
Done.
|
| + |
| for (var binding of device.bindingArray) |
| binding.close(); |
| - this.devices_.delete(guid); |
| + this.devices_.delete(device.fakeDevice); |
| + this.devicesByGuid_.delete(device.guid); |
| if (this.client_) { |
| this.client_.onDeviceRemoved( |
| - fakeDeviceInitToDeviceInfo(guid, device.info)); |
| + fakeDeviceInitToDeviceInfo(device.guid, device.info)); |
| } |
| } |
| @@ -385,6 +396,7 @@ class FakeDeviceManager { |
| fakeDeviceInitToDeviceInfo(device.guid, device.info)); |
| }); |
| this.devices_.clear(); |
| + this.devicesByGuid_.clear(); |
| } |
| getDevices(options) { |
| @@ -396,13 +408,13 @@ class FakeDeviceManager { |
| } |
| getDevice(guid, request) { |
| - let device = this.devices_.get(guid); |
| + let device = this.devicesByGuid_.get(guid); |
| if (device) { |
| let binding = new mojo.bindings.Binding( |
| mojo.device.Device, new FakeDevice(device.info), request); |
| binding.setConnectionErrorHandler(() => { |
| if (g_closeListener) |
| - g_closeListener(guid); |
| + g_closeListener(device.fakeDevice); |
| }); |
| device.bindingArray.push(binding); |
| } else { |
| @@ -427,13 +439,13 @@ class FakeChooserService { |
| this.bindingSet_.addBinding(this, handle); |
| } |
| - setChosenDevice(guid) { |
| - this.chosenDeviceGuid_ = guid; |
| + setChosenDevice(fakeDevice) { |
| + this.chosenDevice_ = fakeDevice; |
| } |
| getPermission(deviceFilters) { |
| this.lastFilters_ = convertMojoDeviceFilters(deviceFilters); |
| - let device = g_deviceManager.devices_.get(this.chosenDeviceGuid_); |
| + let device = g_deviceManager.devices_.get(this.chosenDevice_); |
| if (device) { |
| return Promise.resolve({ |
| result: fakeDeviceInitToDeviceInfo(device.guid, device.info) |
| @@ -522,25 +534,30 @@ class USBTest { |
| if (!g_deviceManager) |
| throw new Error('Call initialize() before addFakeDevice().'); |
| - return g_deviceManager.addDevice(deviceInit); |
| - } |
| + // |addDevice| and |removeDevice| are called in a setTimeout callback so |
| + // that tests do not rely on the device being immediately available which |
| + // may not be true for all implementations of this test API. |
| - removeFakeDevice(guid) { |
| - if (!g_deviceManager) |
| - throw new Error('Call initialize() before removeFakeDevice().'); |
| + class FakeUSBDevice { |
|
ortuno
2017/04/18 03:04:06
nit: The fact that we are redefining the class eve
Reilly Grant (use Gerrit)
2017/04/18 18:21:38
Done.
|
| + disconnect() { |
| + setTimeout(() => g_deviceManager.removeDevice(this), 0); |
| + } |
| + } |
| + let fakeDevice = new FakeUSBDevice(); |
| - return g_deviceManager.removeDevice(guid); |
| + setTimeout(() => g_deviceManager.addDevice(fakeDevice, deviceInit), 0); |
| + return fakeDevice; |
| } |
| set ondeviceclose(func) { |
| g_closeListener = func; |
| } |
| - set chosenDevice(guid) { |
| + set chosenDevice(fakeDevice) { |
| if (!g_chooserService) |
| throw new Error('Call initialize() before setting chosenDevice.'); |
| - g_chooserService.setChosenDevice(guid); |
| + g_chooserService.setChosenDevice(fakeDevice); |
| } |
| get lastFilters() { |