| # USB |
| |
| `device/usb` abstracts [Universal Serial Bus](https://en.wikipedia.org/wiki/USB) |
| concepts across multiple platforms. |
| |
| Clients should use the [public Mojo interface](/device/usb/public/mojom). |
| |
| |
| ## USB ID Repository |
| |
| `/third_party/usb_ids/usb.ids` is imported regularly to provide human-readable |
| descriptions of USB devices. |
| |
| |
| ## Ongoing Work transitioning away from `libusb` |
| |
| `UsbService` is implemented by `UsbServiceImpl` based on `third_party/libusb`. |
| |
| Work is ongoing to implement each platform directly, without using `libusb`. |
| |
| * `UsbServiceAndroid` done. |
| * `UsbServiceLinux` done. |
| * macOS not started. |
| * `UsbServiceWin` in progress. Enable via `chrome://flags/#new-usb-backend` |
| |
| |
| ## Testing |
| |
| ### Unit Tests |
| |
| Standard use of `*_unittest.cc` files for must code coverage. |
| |
| |
| ### Fuzzers |
| |
| [libFuzzer] tests are in `*_fuzzer.cc` files. They test for bad input from |
| devices, e.g. when parsing device descriptors during device enumeration. |
| |
| [libFuzzer]: /testing/libfuzzer/README.md |
| |
| |
| ### Gadget Tests |
| |
| [USB/HID API Testing with Gadgets] describes a framework for testing the Chrome |
| USB, HID and serial device APIs with real devices on generally accessible |
| hardware. |
| |
| [USB/HID API Testing with Gadgets]: https://docs.google.com/document/d/1O9jTlOAyeCwZX_XRbmQmNFidcJo8QZQSaodP-wmyess |
| |
| Unit tests using the gadget can be run manually with a hardware "gadget". These |
| unit tests all call [UsbTestGadget::Claim]. |
| |
| [UsbTestGadget::Claim]: https://cs.chromium.org/search/?q=UsbTestGadget::Claim&type=cs |