Source/modules/bluetooth
implements the renderer process details and bindings
for the Web Bluetooth specification. It uses the Web Bluetooth Service
mojom to communicate with the Web Bluetooth Service.
There isn't much support for GATT over BR/EDR from neither platforms nor devices so performing a Dual scan will find devices that the API is not able to interact with. To avoid wasting power and confusing users with devices they are not able to interact with, navigator.bluetooth.requestDevice performs an LE-only Scan.
Web Bluetooth implementation details are tested at several layers:
/device/bluetooth/*_unittest.cc
device_unittests --gtest_filter="*Bluetooth*"
- General bluetooth platform abstraction level down to the OS. See device/bluetooth/test for details.
/chrome/browser/*bluetooth*_browsertest.cc
out/Release/browser_tests --gtest_filter="*Bluetooth*"
- Browser policy level tests (crash recovery, blocklist, killswitch).
/content/*/bluetooth/*_unittest.cc
out/Release/content_unittests --gtest_filter="*Bluetooth*"
- Trusted Web Bluetooth code (browser process) tests (as opposed to untrusted renderer process).
web_tests/bluetooth/*/*.html
blink/tools/run_layout_tests.sh bluetooth
- Web tests in
web_tests/bluetooth/
rely on fake Bluetooth implementation classes constructed incontent/shell/browser/web_test/web_test_bluetooth_adapter_provider
. These tests span JavaScript binding to thedevice/bluetooth
platform abstraction layer.
testing/clusterfuzz
- Web Bluetooth Fuzzer runs on cluster fuzz infrastructure.
See: Class Diagram of Web Bluetooth through Bluetooth Android