# Web Bluetooth Service in Content This directory contains the implementation of the [Web Bluetooth specification] using the Bluetooth abstraction module implemented in `//device/bluetooth`. See the [Bluetooth Abstraction README] for more details on the cross-platform implementation of Bluetooth in Chromium. This service is exposed to the Web through the Blink Bluetooth module, which accesses the Web Bluetooth Service through Mojo IPC. For more details, see the [Web Bluetooth Blink Module README]. [Web Bluetooth specification]: https://webbluetoothcg.github.io/web-bluetooth/ [Bluetooth Abstraction README]: ../../../device/bluetooth/README.md [Web Bluetooth Blink Module README]: ../../../third_party/blink/renderer/modules/bluetooth/README.md ## Web Bluetooth Permissions The legacy permissions system is implemented by `bluetooth_allowed_devices.h`, which is created per origin. The new permissions system is implemented by providing an implementation for the `//content/public/browser/bluetooth_delegate.h` interface. In Chrome, the implementation of this interface is provided by `//chrome/browser/chrome_bluetooth_delegate.h` which forwards permission queries to `//chrome/browser/bluetooth/bluetooth_chooser_context.h`. This class uses `//components/permissions/chooser_context_base.h` as the base. This base class is also in use by other device APIs, like WebUSB. The new permission system enables Web Bluetooth permissions to be persistent and to be exposed in the settings UI for users to manage more easily. For more details on the new permissions system, see the [Web Bluetooth Persistent Permissions] design document. [Web Bluetooth Persistent Permissions]: https://docs.google.com/document/d/1h3uAVXJARHrNWaNACUPiQhLt7XI-fFFQoARSs1WgMDM/edit?usp=sharing ## Testing The Web Bluetooth Service is primarily tested using Blink Web Tests and Web Platform Tests. These tests are found in `//third_party/blink/web_tests/bluetooth` and `//third_party/blink/web_tests/external/wpt/bluetooth`. There is currently an ongoing effort to refactor the Web Bluetooth tests using the legacy [BluetoothFakeAdapter] test infrastructure to use the new [FakeBluetooth] Test API. For more details, see the [Web Bluetooth Web Tests README] and the [Web Bluetooth Web Platform Tests README]. TODO(https://crbug.com/509038): Update this document when the remaining tests have been submitted to W3C Web Platform Tests. The tests are run using `content_shell`, which fakes the Bluetooth related UI and the new permissions system. For more details, see the following files in `//content/shell/browser/web_test`: * [fake_bluetooth_chooser.h] * [fake_bluetooth_delegate.h] * [fake_bluetooth_scanning_prompt.h] * [web_test_bluetooth_adapter_provider.h][BluetoothFakeAdapter] * [web_test_first_device_bluetooth_chooser.h] [BluetoothFakeAdapter]: ../../shell/browser/web_test/web_test_bluetooth_adapter_provider.h [FakeBluetooth]: ../../../device/bluetooth/test/fake_bluetooth.h [Web Bluetooth Web Tests README]: ../../../third_party/blink/web_tests/bluetooth/README.md [Web Bluetooth Web Platform Tests README]: ../../../third_party/blink/web_tests/external/wpt/bluetooth/README.md [fake_bluetooth_chooser.h]: ../../shell/browser/web_test/fake_bluetooth_chooser.h [fake_bluetooth_delegate.h]: ../../shell/browser/web_test/fake_bluetooth_delegate.h [fake_bluetooth_scanning_prompt.h]: ../../shell/browser/web_test/fake_bluetooth_scanning_prompt.h [web_test_first_device_bluetooth_chooser.h]: ../../shell/browser/web_test/web_test_first_device_bluetooth_chooser.h # Resources and Documentation Mailing list: web-bluetooth@chromium.org Bug tracker: [Blink>Bluetooth] * [Web Bluetooth specification] * [Bluetooth Abstraction README] * [Web Bluetooth Blink Module README] * [BluetoothFakeAdapter] * [FakeBluetooth] [Blink>Bluetooth]: https://bugs.chromium.org/p/chromium/issues/list?q=component%3ABlink%3EBluetooth&can=2 ## Design Documents * [Class Diagram of Web Bluetooth through Bluetooth Android] * [Web Bluetooth Testing] * [Web Bluetooth Test Scanning] * [Web Bluetooth Persistent Permissions] [Class Diagram of Web Bluetooth through Bluetooth Android]: https://sites.google.com/a/chromium.org/dev/developers/design-documents/bluetooth-design-docs/web-bluetooth-through-bluetooth-android-class-diagram [Web Bluetooth Testing]: https://docs.google.com/document/d/1Nhv_oVDCodd1pEH_jj9k8gF4rPGb_84VYaZ9IG8M_WY/edit?usp=sharing [Web Bluetooth Test Scanning]: https://docs.google.com/document/d/1XFl_4ZAgO8ddM6U53A9AfUuZeWgJnlYD5wtbXqEpzeg/edit?usp=sharing