Chromium Code Reviews| 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..162ba0b64455c72439e6ec4a6d6ba11728ef45ef 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::~BluetoothDevice to avoid reentrant |
|
Jeffrey Yasskin
2015/09/16 00:45:39
DidDisconnectGatt() also calls this.
scheib
2015/09/16 21:19:08
Done.
|
| + // 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); |
| }; |