tree: a81624d52f0e6b73693cb34d5af284b0b3e9574b [path history] [tgz]
  1. BUILD.gn
  2. DEPS
  3. OWNERS
  4. README.md
  5. adapter.cc
  6. adapter.h
  7. adapter_factory.cc
  8. adapter_factory.h
  9. android/
  10. bluetooth_adapter.cc
  11. bluetooth_adapter.h
  12. bluetooth_adapter_android.cc
  13. bluetooth_adapter_android.h
  14. bluetooth_adapter_factory.cc
  15. bluetooth_adapter_factory.h
  16. bluetooth_adapter_factory_wrapper.cc
  17. bluetooth_adapter_factory_wrapper.h
  18. bluetooth_adapter_mac.h
  19. bluetooth_adapter_mac.mm
  20. bluetooth_adapter_mac_unittest.mm
  21. bluetooth_adapter_stub.cc
  22. bluetooth_adapter_unittest.cc
  23. bluetooth_adapter_win.cc
  24. bluetooth_adapter_win.h
  25. bluetooth_adapter_win_unittest.cc
  26. bluetooth_advertisement.cc
  27. bluetooth_advertisement.h
  28. bluetooth_advertisement_unittest.cc
  29. bluetooth_channel_mac.h
  30. bluetooth_channel_mac.mm
  31. bluetooth_classic_device_mac.h
  32. bluetooth_classic_device_mac.mm
  33. bluetooth_classic_win.cc
  34. bluetooth_classic_win.h
  35. bluetooth_classic_win_fake.cc
  36. bluetooth_classic_win_fake.h
  37. bluetooth_common.h
  38. bluetooth_device.cc
  39. bluetooth_device.h
  40. bluetooth_device_android.cc
  41. bluetooth_device_android.h
  42. bluetooth_device_mac.h
  43. bluetooth_device_mac.mm
  44. bluetooth_device_unittest.cc
  45. bluetooth_device_win.cc
  46. bluetooth_device_win.h
  47. bluetooth_device_win_unittest.cc
  48. bluetooth_discovery_filter.cc
  49. bluetooth_discovery_filter.h
  50. bluetooth_discovery_filter_unittest.cc
  51. bluetooth_discovery_manager_mac.h
  52. bluetooth_discovery_manager_mac.mm
  53. bluetooth_discovery_session.cc
  54. bluetooth_discovery_session.h
  55. bluetooth_discovery_session_outcome.h
  56. bluetooth_export.h
  57. bluetooth_gatt_characteristic.cc
  58. bluetooth_gatt_characteristic.h
  59. bluetooth_gatt_connection.cc
  60. bluetooth_gatt_connection.h
  61. bluetooth_gatt_descriptor.cc
  62. bluetooth_gatt_descriptor.h
  63. bluetooth_gatt_notify_session.cc
  64. bluetooth_gatt_notify_session.h
  65. bluetooth_gatt_service.cc
  66. bluetooth_gatt_service.h
  67. bluetooth_init_win.cc
  68. bluetooth_init_win.h
  69. bluetooth_l2cap_channel_mac.h
  70. bluetooth_l2cap_channel_mac.mm
  71. bluetooth_local_gatt_characteristic.cc
  72. bluetooth_local_gatt_characteristic.h
  73. bluetooth_local_gatt_characteristic_unittest.cc
  74. bluetooth_local_gatt_descriptor.cc
  75. bluetooth_local_gatt_descriptor.h
  76. bluetooth_local_gatt_descriptor_unittest.cc
  77. bluetooth_local_gatt_service.cc
  78. bluetooth_local_gatt_service.h
  79. bluetooth_local_gatt_service_unittest.cc
  80. bluetooth_low_energy_central_manager_delegate.h
  81. bluetooth_low_energy_central_manager_delegate.mm
  82. bluetooth_low_energy_defs_win.cc
  83. bluetooth_low_energy_defs_win.h
  84. bluetooth_low_energy_device_mac.h
  85. bluetooth_low_energy_device_mac.mm
  86. bluetooth_low_energy_discovery_manager_mac.h
  87. bluetooth_low_energy_discovery_manager_mac.mm
  88. bluetooth_low_energy_peripheral_delegate.h
  89. bluetooth_low_energy_peripheral_delegate.mm
  90. bluetooth_low_energy_win.cc
  91. bluetooth_low_energy_win.h
  92. bluetooth_low_energy_win_fake.cc
  93. bluetooth_low_energy_win_fake.h
  94. bluetooth_low_energy_win_unittest.cc
  95. bluetooth_remote_gatt_characteristic.cc
  96. bluetooth_remote_gatt_characteristic.h
  97. bluetooth_remote_gatt_characteristic_android.cc
  98. bluetooth_remote_gatt_characteristic_android.h
  99. bluetooth_remote_gatt_characteristic_mac.h
  100. bluetooth_remote_gatt_characteristic_mac.mm
  101. bluetooth_remote_gatt_characteristic_unittest.cc
  102. bluetooth_remote_gatt_characteristic_win.cc
  103. bluetooth_remote_gatt_characteristic_win.h
  104. bluetooth_remote_gatt_descriptor.cc
  105. bluetooth_remote_gatt_descriptor.h
  106. bluetooth_remote_gatt_descriptor_android.cc
  107. bluetooth_remote_gatt_descriptor_android.h
  108. bluetooth_remote_gatt_descriptor_unittest.cc
  109. bluetooth_remote_gatt_descriptor_win.cc
  110. bluetooth_remote_gatt_descriptor_win.h
  111. bluetooth_remote_gatt_service.cc
  112. bluetooth_remote_gatt_service.h
  113. bluetooth_remote_gatt_service_android.cc
  114. bluetooth_remote_gatt_service_android.h
  115. bluetooth_remote_gatt_service_mac.h
  116. bluetooth_remote_gatt_service_mac.mm
  117. bluetooth_remote_gatt_service_unittest.cc
  118. bluetooth_remote_gatt_service_win.cc
  119. bluetooth_remote_gatt_service_win.h
  120. bluetooth_rfcomm_channel_mac.h
  121. bluetooth_rfcomm_channel_mac.mm
  122. bluetooth_service_record_win.cc
  123. bluetooth_service_record_win.h
  124. bluetooth_service_record_win_unittest.cc
  125. bluetooth_socket.cc
  126. bluetooth_socket.h
  127. bluetooth_socket_mac.h
  128. bluetooth_socket_mac.mm
  129. bluetooth_socket_net.cc
  130. bluetooth_socket_net.h
  131. bluetooth_socket_thread.cc
  132. bluetooth_socket_thread.h
  133. bluetooth_socket_win.cc
  134. bluetooth_socket_win.h
  135. bluetooth_strings.grd
  136. bluetooth_task_manager_win.cc
  137. bluetooth_task_manager_win.h
  138. bluetooth_task_manager_win_unittest.cc
  139. bluetooth_uuid.cc
  140. bluetooth_uuid.h
  141. bluetooth_uuid_unittest.cc
  142. bluez/
  143. dbus/
  144. public/
  145. string_util_icu.cc
  146. string_util_icu.h
  147. string_util_icu_unittest.cc
  148. strings/
  149. test/
  150. uribeacon/
device/bluetooth/README.md

Bluetooth

device/bluetooth abstracts Bluetooth Classic and Low Energy features across multiple platforms.

Classic and Low Energy based profiles differ substantially. Platform implementations may support only one or the other, even though several classes have interfaces for both, e.g. BluetoothAdapter & BluetoothDevice.

ClassicLow Energy
Androidnoyes
ChromeOSyesyes
Linuxyesyes
Macyesyes
Windowssomenearly

ChromeOS and Linux are supported via BlueZ, see *_bluez files.

Maintainer History

Initial implementation OWNERS were youngki@chromium.org, keybuk@chromium.org, armansito@chromium.org, and rpaquay@chromium.org. They no longer contribute to chromium fulltime. They were responsible for support for ChromeOS Bluetooth features and the Chrome Apps APIs:

Active development in 2015 & 2016 is focused on enabling GATT features for:

Known future work is tracked in the Refactoring meta issue.

Testing

Implementation of the Bluetooth component is tested via unittests. Client code uses Mock Bluetooth objects:

Cross Platform Unit Tests

New feature development uses cross platform unit tests. This reduces test code redundancy and produces consistency across all implementations.

Unit tests operate at the public device/bluetooth API layer and the BluetoothTest fixture controls fake operating system behavior as close to the platfom as possible. The resulting test coverage spans the cross platform API, common implementation, and platform specific implementation as close to operating system APIs as possible.

test/bluetooth_test.h defines the cross platform test fixture BluetoothTestBase. Platform implementations provide subclasses, such as test/bluetooth_test_android.h and typedef to the name BluetoothTest.

More testing information

Legacy Platform Specific Unit Tests

Early code (Classic on most platforms, and Low Energy on BlueZ) was tested with platform specific unit tests, e.g. bluetooth_bluez_unittest.cc & bluetooth_adapter_win_unittest.cc. The BlueZ style has platform specific methods to create fake devices and the public API is used to interact with them.

Maintenance of these earlier implementation featuress should update tests in place. Long term these tests should be refactored into cross platform tests.

Mock Bluetooth Objects

test/mock_bluetooth_* files provide GoogleMock based fake objects for use in client code.

ChromeOS Blueooth Controller Tests

Bluetooth controller system tests generating radio signals are run and managed by the ChromeOS team. See: https://chromium.googlesource.com/chromiumos/third_party/autotest/+/master/server/site_tests/ https://chromium.googlesource.com/chromiumos/third_party/autotest/+/master/server/cros/bluetooth/ https://chromium.googlesource.com/chromiumos/third_party/autotest/+/master/client/cros/bluetooth/

Android

The android implementation requires crossing from C++ to Java using JNI.

Object ownership is rooted in the C++ classes, starting with the Adapter, which owns Devices, Services, etc. Java counter parts interface with the Android Bluetooth objects. E.g.

For testing, the Android objects are wrapped in: android/java/src/org/chromium/device/bluetooth/Wrappers.java.
and fakes implemented in: test/android/java/src/org/chromium/device/bluetooth/Fakes.java.

Thus:

  • bluetooth_adapter_android.h owns:
    • android/.../ChromeBluetoothAdapter.java uses:
      • android/.../Wrappers.java: BluetoothAdapterWrapper
        • Which under test is a FakeBluetoothAdapter
    • bluetooth_device_android.h owns:
      • android/.../ChromeBluetoothDevice.java uses:
        • android/.../Wrappers.java: BluetoothDeviceWrapper
          • Which under test is a FakeBluetoothDevice
      • bluetooth_gatt_service_android.h owns:
        • android/.../ChromeBluetoothService.java uses:
          • android/.../Wrappers.java: BluetoothServiceWrapper
            • Which under test is a FakeBluetoothService
        • ... and so on for characteristics and descriptors.

Fake objects are controlled by bluetooth_test_android.cc.

See also: Class Diagram of Web Bluetooth through Bluetooth Android

Design Documents

  • Bluetooth Notifications 2016-08-26
    • Web Bluetooth through Android implementation details, class diagram and call flow.