| 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 c1a6ade02b395302cca0302fb0cefdd8e0974edb..aa160bfd2ad6b606bcabbfcfb640776416c07d12 100644
|
| --- a/components/arc/bluetooth/arc_bluetooth_bridge.h
|
| +++ b/components/arc/bluetooth/arc_bluetooth_bridge.h
|
| @@ -19,6 +19,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"
|
| @@ -266,6 +267,17 @@ class ArcBluetoothBridge
|
| mojo::Array<uint8_t> value,
|
| const SendIndicationCallback& callback) override;
|
|
|
| + // Set up or disable multiple advertising.
|
| + void ReserveAdvertisementHandle(
|
| + const ReserveAdvertisementHandleCallback& callback) override;
|
| + void BroadcastAdvertisement(
|
| + int32_t adv_handle,
|
| + mojom::BluetoothAdvertisementPtr 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;
|
| @@ -312,6 +324,13 @@ class ArcBluetoothBridge
|
| std::unique_ptr<device::BluetoothGattNotifySession> notify_session);
|
|
|
| private:
|
| + // Structure to do bookkeeping for advertisements registered via
|
| + // multi advertisement across API calls.
|
| + struct AdvertisementInstance {
|
| + device::BluetoothAdvertisement::AdvertisementType adv_type;
|
| + scoped_refptr<device::BluetoothAdvertisement> advertisement;
|
| + };
|
| +
|
| mojo::Array<mojom::BluetoothPropertyPtr> GetDeviceProperties(
|
| mojom::BluetoothPropertyType type,
|
| device::BluetoothDevice* device) const;
|
| @@ -360,6 +379,42 @@ class ArcBluetoothBridge
|
| const base::Closure& success_callback,
|
| const ErrorCallback& error_callback);
|
|
|
| + // 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_;
|
| @@ -381,6 +436,11 @@ class ArcBluetoothBridge
|
| // Keeps track of all devices which initiated a GATT connection to us.
|
| std::unordered_set<std::string> gatt_connection_cache_;
|
|
|
| + // Holds advertising data registered by the instance.
|
| + static constexpr uint16_t kMaxAdvertisements = 5;
|
| + std::map<int32_t, scoped_refptr<device::BluetoothAdvertisement>>
|
| + advertisements_;
|
| +
|
| base::ThreadChecker thread_checker_;
|
|
|
| // WeakPtrFactory to use for callbacks.
|
|
|