Intent to Implement & Ship: WebUSB exclusionFilters option in requestDevice()

94 views
Skip to first unread message

François Beaufort

unread,
Jun 21, 2023, 2:32:55 AM6/21/23
to blink-dev

Contact emails

fbea...@google.com

rei...@google.com


Explainer

https://github.com/WICG/webusb/pull/233#issue-1760530134


Specification

https://wicg.github.io/webusb/#dom-usbdevicerequestoptions-exclusionfilters

https://github.com/WICG/webusb/pull/233


Summary

The "exclusionFilters" option in navigator.usb.requestDevice() allows web developers to exclude some devices from the browser picker. It can be used to exclude devices that match a broader filter but are unsupported.


Blink component

Blink>USB


Motivation

Allowing web developers, through the "exclusionFilters" option, to exclude from the browser picker some devices that are not supported by the site will improve user experience. Without it, web developers let users pick a device, then have to check using a custom JavaScript helper function and alert the user after they’ve already selected a device, resulting in a poor user experience.


// Request access to a device from vendor ID 0xABCD.

// The device with product ID 0x1234 has been reported as unsupported.

const device = await navigator.usb.requestDevice({

  filters: [{ vendorId: 0xABCD }],

  exclusionFilters: [{ vendorId: 0xABCD, productId: 0x1234 }],

});


This feature is similar to Web Bluetooth and WebHID "exclusionFilters" options. See https://chromestatus.com/features#exclusionFilters


TAG review

This small addition to the WebUSB API doesn’t seem to qualify for a TAG review. FYI We have filed one for Web Bluetooth "exclusionFilters" option recently which was marked as satisfied at https://github.com/w3ctag/design-reviews/issues/830


TAG review status

Not Applicable


Risks


Interoperability and Compatibility


Older browsers will ignore exclusionFilters and all devices matching the provided filter will be displayed (the current behavior).


Signals from other implementations (Gecko, WebKit): 


Gecko: No Signal [1]

WebKit: No Signal [1]

Web / Framework developers: Positive https://github.com/WICG/webusb/issues/232


[1] Both Gecko and WebKit are unlikely to object to this feature specifically, but object to the overall WebUSB API as a whole, hence it doesn't make sense to bug them with specific questions on this.


Activation:

This feature can't be polyfilled. It should be fairly trivial for developers to adopt this new feature.


Debuggability

No specific DevTools changes are required. This feature is treated like any other JS method.

Note that exposing DevTools debugging support for device-access APIs (WebUSB included) is discussed at https://bugs.chromium.org/p/chromium/issues/detail?id=1142566#c20.


Is this feature fully tested by web-platform-tests?

No, because browser picker implementation is implemented outside of Blink and so isn’t testable fully by web-platform-tests. 


Requires code in //chrome?

Yes, the browser picker implementation is part of the UI code in //chrome.


Tracking bug

https://bugs.chromium.org/p/chromium/issues/detail?id=1455392


Estimated milestones

117


Link to entry on the Chrome Platform Status

https://chromestatus.com/feature/5172269315260416



Mike Taylor

unread,
Jun 21, 2023, 10:42:47 AM6/21/23
to François Beaufort, blink-dev

LGTM1

--
You received this message because you are subscribed to the Google Groups "blink-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to blink-dev+...@chromium.org.
To view this discussion on the web visit https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAPpwU5%2BGr-iskzoo-kUhH2%2BFNJL6-OyG44m6jFW1jZXMw3%3DUHg%40mail.gmail.com.

Chris Harrelson

unread,
Jun 21, 2023, 10:44:55 AM6/21/23
to Mike Taylor, François Beaufort, blink-dev

Alex Russell

unread,
Jun 21, 2023, 11:27:45 AM6/21/23
to blink-dev, Chris Harrelson, fbea...@google.com, blink-dev, Mike Taylor
LGTM3, but please send this as an FYI to the TAG. There's no such thing as a "small feature" in terms of consistency and potential for architectural impact.

To unsubscribe from this group and stop receiving emails from it, send an email to blink-dev+unsubscribe@chromium.org.

--
You received this message because you are subscribed to the Google Groups "blink-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to blink-dev+unsubscribe@chromium.org.

François Beaufort

unread,
Jun 22, 2023, 4:27:23 AM6/22/23
to Alex Russell, blink-dev, Chris Harrelson, Mike Taylor
Thanks for the LGTMs folks!

As suggested, I've filed https://github.com/w3ctag/design-reviews/issues/865

To unsubscribe from this group and stop receiving emails from it, send an email to blink-dev+...@chromium.org.

--
You received this message because you are subscribed to the Google Groups "blink-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to blink-dev+...@chromium.org.
Reply all
Reply to author
Forward
0 new messages