[blink-dev to BCC]
It is better to ask such questions on StackOverflow because it offers search tools to help find previously answered questions.
From your description the getDevices() and requestDevice() methods are working as expected. When removing the device after the site has been granted permission to access it do you get a 'disconnect' event? After disconnecting the device, if you click on the lock icon in the address bar do you still see the device permission listed? If not the reason is that the device does not have a serial number and so the permission granted by the user cannot be persisted. You should always get a 'disconnect' event after the user removes a device they have granted the site permission to access it but you will not get a 'connect' event because the permission is automatically revoked on disconnect. If the device has a serial number then the permission will not be revoked.
If this is not the behavior you observe please file a bug on
crbug.com with details about the platform and device and the contents of chrome://device-log (uncheck all the category boxes except for "USB").