Index: chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_event_router.h |
diff --git a/chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_event_router.h b/chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_event_router.h |
index f9ec0c337355b29a72bdf03da94e6c2cb30341b4..657d6210f02e82fbb628ed3c8edb2418a4af50de 100644 |
--- a/chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_event_router.h |
+++ b/chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_event_router.h |
@@ -33,6 +33,7 @@ class BrowserContext; |
namespace extensions { |
+class BluetoothLowEnergyConnection; |
class Extension; |
// The BluetoothLowEnergyEventRouter is used by the bluetoothLowEnergy API to |
@@ -50,6 +51,9 @@ class BluetoothLowEnergyEventRouter |
kStatusSuccess = 0, |
kStatusErrorPermissionDenied, |
kStatusErrorNotFound, |
+ kStatusErrorAlreadyConnected, |
+ kStatusErrorNotConnected, |
+ kStatusErrorInProgress, |
kStatusErrorFailed |
}; |
@@ -70,6 +74,28 @@ class BluetoothLowEnergyEventRouter |
// Returns true, if the BluetoothAdapter was initialized. |
bool HasAdapter() const; |
+ // Creates a GATT connection to the device with address |device_address| for |
+ // extension |extension|. The connection is kept alive until the extension is |
+ // unloaded, the device is removed, or is disconnect by the host subsystem. |
+ // |error_callback| is called with an error status in case of failure. If |
+ // |persistent| is true, then the allocated connection resource is persistent |
+ // across unloads. |
+ void Connect(bool persistent, |
+ const Extension* extension, |
+ const std::string& device_address, |
+ const base::Closure& callback, |
+ const ErrorCallback& error_callback); |
+ |
+ // Disconnects the currently open GATT connection of extension |extension| to |
+ // device with address |device_address|. |error_callback| is called with an |
+ // error status in case of failure, e.g. if the device is not found or the |
+ // given |
+ // extension does not have an open connection to the device. |
+ void Disconnect(const Extension* extension, |
+ const std::string& device_address, |
+ const base::Closure& callback, |
+ const ErrorCallback& error_callback); |
+ |
// Returns the list of api::bluetooth_low_energy::Service objects associated |
// with the Bluetooth device with address |device_address| in |out_services|. |
// Returns false, if no device with the given address is known. If the device |
@@ -138,42 +164,38 @@ class BluetoothLowEnergyEventRouter |
api::bluetooth_low_energy::Descriptor* out_descriptor) const; |
// Sends a request to read the value of the characteristic with intance ID |
- // |instance_id|. If the read request was sent successfully, returns |
- // kStatusSuccess and invokes |callback| on success and |error_callback| on |
+ // |instance_id|. Invokes |callback| on success and |error_callback| on |
// failure. |extension| is the extension that made the call. |
- Status ReadCharacteristicValue(const Extension* extension, |
- const std::string& instance_id, |
- const base::Closure& callback, |
- const ErrorCallback& error_callback); |
+ void ReadCharacteristicValue(const Extension* extension, |
+ const std::string& instance_id, |
+ const base::Closure& callback, |
+ const ErrorCallback& error_callback); |
// Sends a request to write the value of the characteristic with instance ID |
- // |instance_id|. If the read request was sent successfully, returns |
- // kStatusSuccess and invokes |callback| on success and |error_callback| on |
+ // |instance_id|. Invokes |callback| on success and |error_callback| on |
// failure. |extension| is the extension that made the call. |
- Status WriteCharacteristicValue(const Extension* extension, |
- const std::string& instance_id, |
- const std::vector<uint8>& value, |
- const base::Closure& callback, |
- const ErrorCallback& error_callback); |
+ void WriteCharacteristicValue(const Extension* extension, |
+ const std::string& instance_id, |
+ const std::vector<uint8>& value, |
+ const base::Closure& callback, |
+ const ErrorCallback& error_callback); |
// Sends a request to read the value of the descriptor with instance ID |
- // |instance_id|. If the read request was sent successfully, returns |
- // kStatusSuccess and invokes |callback| on success and |error_callback| on |
+ // |instance_id|. Invokes |callback| on success and |error_callback| on |
// failure. |extension| is the extension that made the call. |
- Status ReadDescriptorValue(const Extension* extension, |
- const std::string& instance_id, |
- const base::Closure& callback, |
- const ErrorCallback& error_callback); |
+ void ReadDescriptorValue(const Extension* extension, |
+ const std::string& instance_id, |
+ const base::Closure& callback, |
+ const ErrorCallback& error_callback); |
// Sends a request to write the value of the descriptor with instance ID |
- // |instance_id|. If the read request was sent successfully, returns |
- // kStatusSuccess and invokes |callback| on success and |error_callback| on |
+ // |instance_id|. Invokes |callback| on success and |error_callback| on |
// failure. |extension| is the extension that made the call. |
- Status WriteDescriptorValue(const Extension* extension, |
- const std::string& instance_id, |
- const std::vector<uint8>& value, |
- const base::Closure& callback, |
- const ErrorCallback& error_callback); |
+ void WriteDescriptorValue(const Extension* extension, |
+ const std::string& instance_id, |
+ const std::vector<uint8>& value, |
+ const base::Closure& callback, |
+ const ErrorCallback& error_callback); |
// Initializes the adapter for testing. Used by unit tests only. |
void SetAdapterForTesting(device::BluetoothAdapter* adapter); |
@@ -253,10 +275,41 @@ class BluetoothLowEnergyEventRouter |
void OnValueSuccess(const base::Closure& callback, |
const std::vector<uint8>& value); |
+ // Called by BluetoothDevice in response to a call to CreateGattConnection. |
+ void OnCreateGattConnection( |
+ bool persistent, |
+ const std::string& extension_id, |
+ const std::string& device_address, |
+ const base::Closure& callback, |
+ scoped_ptr<device::BluetoothGattConnection> connection); |
+ |
+ // Called by BluetoothGattConnection in response to a call to Disconnect. |
+ void OnDisconnect(const std::string& extension_id, |
+ const std::string& device_address, |
+ const base::Closure& callback); |
+ |
// Called by BluetoothGattCharacteristic and BluetoothGattDescriptor in |
// case of an error during the read/write operations. |
void OnError(const ErrorCallback& error_callback); |
+ // Called by BluetoothDevice in response to a call to CreateGattConnection. |
+ void OnConnectError(const std::string& device_address, |
+ const ErrorCallback& error_callback, |
+ device::BluetoothDevice::ConnectErrorCode error_code); |
+ |
+ // Finds and returns a BluetoothLowEnergyConnection to device with address |
+ // |device_address| from the managed API resources for extension with ID |
+ // |extension_id|. |
+ BluetoothLowEnergyConnection* FindConnection( |
+ const std::string& extension_id, |
+ const std::string& device_address); |
+ |
+ // Removes the connection to device with address |device_address| from the |
+ // managed API resources for extension with ID |extension_id|. Returns false, |
+ // if the connection could not be found. |
+ bool RemoveConnection(const std::string& extension_id, |
+ const std::string& device_address); |
+ |
// Mapping from instance ids to identifiers of owning instances. The keys are |
// used to identify individual instances of GATT objects and are used by |
// bluetoothLowEnergy API functions to obtain the correct GATT object to |
@@ -284,6 +337,10 @@ class BluetoothLowEnergyEventRouter |
// Bluetooth adapter of the system. |
scoped_refptr<device::BluetoothAdapter> adapter_; |
+ // Set of device addresses to which a connect/disconnect is currently pending. |
+ std::set<std::string> connecting_devices_; |
+ std::set<std::string> disconnecting_devices_; |
+ |
// BrowserContext passed during initialization. |
content::BrowserContext* browser_context_; |