Index: chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_event_router.cc |
diff --git a/chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_event_router.cc b/chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_event_router.cc |
index eaa0564f3733e9848cddea5f78d9de9496e43919..8318cc63e423e6ec7194d177713fb77d1d055c48 100644 |
--- a/chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_event_router.cc |
+++ b/chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_event_router.cc |
@@ -247,16 +247,15 @@ void BluetoothLowEnergyEventRouter::Connect( |
} |
const std::string extension_id = extension->id(); |
- const std::string connect_id = extension_id + device_address; |
- if (connecting_devices_.count(connect_id) != 0) { |
- error_callback.Run(kStatusErrorInProgress); |
- return; |
- } |
+ auto conn = FindConnection(extension_id, device_address); |
- BluetoothLowEnergyConnection* conn = |
- FindConnection(extension_id, device_address); |
if (conn) { |
+ if (conn->GetConnection()->InProgress()) { |
+ error_callback.Run(kStatusErrorInProgress); |
+ return; |
+ } |
+ |
if (conn->GetConnection()->IsConnected()) { |
VLOG(1) << "Application already connected to device: " << device_address; |
error_callback.Run(kStatusErrorAlreadyConnected); |
@@ -274,19 +273,19 @@ void BluetoothLowEnergyEventRouter::Connect( |
return; |
} |
- connecting_devices_.insert(connect_id); |
- device->CreateGattConnection( |
+ auto connection = device->CreateGattConnection( |
base::Bind(&BluetoothLowEnergyEventRouter::OnCreateGattConnection, |
- weak_ptr_factory_.GetWeakPtr(), |
- persistent, |
- extension_id, |
- device_address, |
- callback), |
+ weak_ptr_factory_.GetWeakPtr(), persistent, extension_id, |
+ device_address, callback), |
base::Bind(&BluetoothLowEnergyEventRouter::OnConnectError, |
- weak_ptr_factory_.GetWeakPtr(), |
- extension_id, |
- device_address, |
+ weak_ptr_factory_.GetWeakPtr(), extension_id, device_address, |
error_callback)); |
+ |
+ conn = new BluetoothLowEnergyConnection(persistent, extension_id, |
+ connection.Pass()); |
+ ConnectionResourceManager* manager = |
+ GetConnectionResourceManager(browser_context_); |
+ manager->Add(conn); |
} |
void BluetoothLowEnergyEventRouter::Disconnect( |
@@ -302,18 +301,18 @@ void BluetoothLowEnergyEventRouter::Disconnect( |
} |
const std::string extension_id = extension->id(); |
+ const std::string connect_id = extension_id + device_address; |
BluetoothLowEnergyConnection* conn = |
FindConnection(extension_id, device_address); |
- if (!conn || !conn->GetConnection()->IsConnected()) { |
+ |
+ if (!conn || (!conn->GetConnection()->IsConnected() && |
+ !conn->GetConnection()->InProgress())) { |
VLOG(1) << "Application not connected to device: " << device_address; |
error_callback.Run(kStatusErrorNotConnected); |
return; |
} |
- conn->GetConnection()->Disconnect(); |
- VLOG(2) << "GATT connection terminated."; |
- |
if (!RemoveConnection(extension_id, device_address)) { |
VLOG(1) << "The connection was removed before disconnect completed, id: " |
<< extension_id << ", device: " << device_address; |
@@ -1267,23 +1266,10 @@ void BluetoothLowEnergyEventRouter::OnCreateGattConnection( |
bool persistent, |
const std::string& extension_id, |
const std::string& device_address, |
- const base::Closure& callback, |
- scoped_ptr<BluetoothGattConnection> connection) { |
+ const base::Closure& callback) { |
VLOG(2) << "GATT connection created."; |
- DCHECK(connection.get()); |
- DCHECK(!FindConnection(extension_id, device_address)); |
- DCHECK_EQ(device_address, connection->GetDeviceAddress()); |
+ DCHECK(FindConnection(extension_id, device_address)); |
- const std::string connect_id = extension_id + device_address; |
- DCHECK_NE(0U, connecting_devices_.count(connect_id)); |
- |
- BluetoothLowEnergyConnection* conn = new BluetoothLowEnergyConnection( |
- persistent, extension_id, connection.Pass()); |
- ConnectionResourceManager* manager = |
- GetConnectionResourceManager(browser_context_); |
- manager->Add(conn); |
- |
- connecting_devices_.erase(connect_id); |
callback.Run(); |
} |
@@ -1302,10 +1288,8 @@ void BluetoothLowEnergyEventRouter::OnConnectError( |
BluetoothDevice::ConnectErrorCode error_code) { |
VLOG(2) << "Failed to create GATT connection: " << error_code; |
- const std::string connect_id = extension_id + device_address; |
- DCHECK_NE(0U, connecting_devices_.count(connect_id)); |
+ RemoveConnection(extension_id, device_address); |
- connecting_devices_.erase(connect_id); |
Status error_status = kStatusErrorFailed; |
if (error_code == BluetoothDevice::ERROR_INPROGRESS) { |
error_status = kStatusErrorInProgress; |