| Index: components/arc/bluetooth/arc_bluetooth_bridge.h
|
| diff --git a/components/arc/bluetooth/arc_bluetooth_bridge.h b/components/arc/bluetooth/arc_bluetooth_bridge.h
|
| index c0ad8ffdb71f3ffdafd6350fc3e94b6afef2942b..de365c2e166e57b74a0cb422e41eb482f9a17333 100644
|
| --- a/components/arc/bluetooth/arc_bluetooth_bridge.h
|
| +++ b/components/arc/bluetooth/arc_bluetooth_bridge.h
|
| @@ -21,6 +21,7 @@
|
| #include "components/arc/instance_holder.h"
|
| #include "device/bluetooth/bluetooth_adapter.h"
|
| #include "device/bluetooth/bluetooth_adapter_factory.h"
|
| +#include "device/bluetooth/bluetooth_advertisement.h"
|
| #include "device/bluetooth/bluetooth_device.h"
|
| #include "device/bluetooth/bluetooth_discovery_session.h"
|
| #include "device/bluetooth/bluetooth_local_gatt_service.h"
|
| @@ -273,6 +274,17 @@ class ArcBluetoothBridge
|
| void RemoveSdpRecord(uint32_t service_handle,
|
| const RemoveSdpRecordCallback& callback) override;
|
|
|
| + // Set up or disable multiple advertising.
|
| + void ReserveAdvertisementHandle(
|
| + const ReserveAdvertisementHandleCallback& callback) override;
|
| + void BroadcastAdvertisement(
|
| + int32_t adv_handle,
|
| + std::unique_ptr<device::BluetoothAdvertisement::Data> advertisement,
|
| + const BroadcastAdvertisementCallback& callback) override;
|
| + void ReleaseAdvertisementHandle(
|
| + int32_t adv_handle,
|
| + const ReleaseAdvertisementHandleCallback& callback) override;
|
| +
|
| // Chrome observer callbacks
|
| void OnPoweredOn(
|
| const base::Callback<void(mojom::BluetoothAdapterState)>& callback) const;
|
| @@ -380,6 +392,42 @@ class ArcBluetoothBridge
|
| void OnSetAdapterProperty(mojom::BluetoothStatus success,
|
| mojom::BluetoothPropertyPtr property);
|
|
|
| + // Callbacks for managing advertisements registered from the instance.
|
| +
|
| + // Called when we have an open slot in the advertisement map and want to
|
| + // register the advertisement given by |data| for handle |adv_handle|.
|
| + void OnReadyToRegisterAdvertisement(
|
| + const BroadcastAdvertisementCallback& callback,
|
| + int32_t adv_handle,
|
| + std::unique_ptr<device::BluetoothAdvertisement::Data> data);
|
| + // Called when we've successfully registered a new advertisement for
|
| + // handle |adv_handle|.
|
| + void OnRegisterAdvertisementDone(
|
| + const BroadcastAdvertisementCallback& callback,
|
| + int32_t adv_handle,
|
| + scoped_refptr<device::BluetoothAdvertisement> advertisement);
|
| + // Called when the attempt to register an advertisement for handle
|
| + // |adv_handle| has failed. |adv_handle| remains reserved, but no
|
| + // advertisement is associated with it.
|
| + void OnRegisterAdvertisementError(
|
| + const BroadcastAdvertisementCallback& callback,
|
| + int32_t adv_handle,
|
| + device::BluetoothAdvertisement::ErrorCode error_code);
|
| + // Both of the following are called after we've tried to unregister
|
| + // the advertisement for |adv_handle|. Either way, we will no
|
| + // longer be broadcasting this advertisement, so in either case, the
|
| + // handle can be released.
|
| + void OnUnregisterAdvertisementDone(
|
| + const ReleaseAdvertisementHandleCallback& callback,
|
| + int32_t adv_handle);
|
| + void OnUnregisterAdvertisementError(
|
| + const ReleaseAdvertisementHandleCallback& callback,
|
| + int32_t adv_handle,
|
| + device::BluetoothAdvertisement::ErrorCode error_code);
|
| + // Find the next free advertisement handle and put it in *adv_handle,
|
| + // or return false if the advertisement map is full.
|
| + bool GetAdvertisementHandle(int32_t* adv_handle);
|
| +
|
| bool CalledOnValidThread();
|
|
|
| mojo::Binding<mojom::BluetoothHost> binding_;
|
| @@ -411,6 +459,21 @@ class ArcBluetoothBridge
|
| // Timer to turn adapter discoverable off.
|
| base::OneShotTimer discoverable_off_timer_;
|
|
|
| + // Holds advertising data registered by the instance.
|
| + //
|
| + // When a handle is reserved, an entry is placed into the advertisements_
|
| + // map. This entry is not yet associated with a device::BluetoothAdvertisement
|
| + // because the instance hasn't sent us any advertising data yet, so its
|
| + // mapped value is nullptr until that happens. Thus we have three states for a
|
| + // handle:
|
| + // * unmapped -> free
|
| + // * mapped to nullptr -> reserved, awaiting data
|
| + // * mapped to a device::BluetoothAdvertisement -> in use, and the mapped
|
| + // BluetoothAdvertisement is currently registered with the adapter.
|
| + enum { kMaxAdvertisements = 5 };
|
| + std::map<int32_t, scoped_refptr<device::BluetoothAdvertisement>>
|
| + advertisements_;
|
| +
|
| base::ThreadChecker thread_checker_;
|
|
|
| // WeakPtrFactory to use for callbacks.
|
|
|