Quick answer: The usb directive controls whether a document or embedded frame may use the WebUSB API via navigator.usb to pair with and communicate with USB devices. Disallow it with the response header Permissions-Policy: usb=(). Allow only your own origin with Permissions-Policy: usb=(self). When blocked, navigator.usb calls reject and no device chooser appears.
consent-required

usb

The usb feature controls whether the current document is allowed to use the WebUSB API.

If disabled in a document, then calls to the getDevices() should return a promise which rejects with a SecurityError DOMException.

How to apply this policy

Send the following HTTP header to control the usb policy, and disallow it on all origins:

Feature-Policy: usb 'none'

Does it work?

Currently Firefox, and Chromium based browsers, such as Google Chrome, Samsung Internet, and Opera, are the only user-agents to support Feature Policy. The minimum version that correctly recognises the usb policy is:

Mozilla Firefox

Not supported

Google Chrome

60+

Microsoft Edge

Not supported

Apple Safari

Not supported

Discussion