Index: device/bluetooth/bluetooth_gatt_connection.h |
diff --git a/device/bluetooth/bluetooth_gatt_connection.h b/device/bluetooth/bluetooth_gatt_connection.h |
index 1f90636ccc342ac1c33625ceb8c62f02d98482a2..ede1f3d0d1a63362ef8d1c68a0dd30d6c8faebc1 100644 |
--- a/device/bluetooth/bluetooth_gatt_connection.h |
+++ b/device/bluetooth/bluetooth_gatt_connection.h |
@@ -12,6 +12,9 @@ |
namespace device { |
+class BluetoothAdapter; |
+class BluetoothDevice; |
+ |
// BluetoothGattConnection represents a GATT connection to a Bluetooth device |
// that has GATT services. Instances are obtained from a BluetoothDevice, |
// and the connection is kept alive as long as there is at least one |
@@ -20,6 +23,9 @@ namespace device { |
// operating system (e.g. due to user action). |
class DEVICE_BLUETOOTH_EXPORT BluetoothGattConnection { |
public: |
+ BluetoothGattConnection(scoped_refptr<device::BluetoothAdapter> adapter, |
+ const std::string& device_address); |
+ |
// Destructor automatically closes this GATT connection. If this is the last |
// remaining GATT connection and this results in a call to the OS, that call |
// may not always succeed. Users can make an explicit call to |
@@ -29,19 +35,36 @@ class DEVICE_BLUETOOTH_EXPORT BluetoothGattConnection { |
// Returns the Bluetooth address of the device that this connection is open |
// to. |
- virtual std::string GetDeviceAddress() const = 0; |
+ const std::string& GetDeviceAddress() const; |
- // Returns true if this connection is open. |
- virtual bool IsConnected() = 0; |
+ // Returns true if this GATT connection is open. |
+ virtual bool IsConnected(); |
// Disconnects this GATT connection. The device may still remain connected due |
- // to other GATT connections. |
- virtual void Disconnect() = 0; |
+ // to other GATT connections. When all BluetoothGattConnection objects are |
+ // disconnected the BluetoothDevice object will disconnect GATT. |
+ virtual void Disconnect(); |
protected: |
- BluetoothGattConnection(); |
+ friend BluetoothDevice; // For InvalidateConnectionReference. |
+ |
+ // Sets this object to no longer have a reference maintaining the connection. |
+ // Only to be called by BluetoothDevice to avoid reentrant code to |
+ // RemoveGattConnection in that destructor after BluetoothDevice subclasses |
+ // have already been destroyed. |
+ void InvalidateConnectionReference(); |
+ |
+ // The Bluetooth adapter that this connection is associated with. A reference |
+ // is held because BluetoothGattConnection keeps the connection alive. |
+ scoped_refptr<BluetoothAdapter> adapter_; |
+ |
+ // Bluetooth address of the underlying device. |
+ std::string device_address_; |
+ BluetoothDevice* device_ = nullptr; |
private: |
+ bool owns_reference_for_connection_ = false; |
+ |
DISALLOW_COPY_AND_ASSIGN(BluetoothGattConnection); |
}; |