Chromium Code Reviews| Index: device/bluetooth/test/fake_peripheral.cc |
| diff --git a/device/bluetooth/test/fake_peripheral.cc b/device/bluetooth/test/fake_peripheral.cc |
| index acf93c736d8f69ce17be05c4cf339d7072f23f9d..eb891240dad8e7fd5463b2f6fbd2f3f6325ff8e3 100644 |
| --- a/device/bluetooth/test/fake_peripheral.cc |
| +++ b/device/bluetooth/test/fake_peripheral.cc |
| @@ -4,13 +4,17 @@ |
| #include "device/bluetooth/test/fake_peripheral.h" |
| +#include "base/memory/weak_ptr.h" |
| + |
| namespace bluetooth { |
| FakePeripheral::FakePeripheral(FakeCentral* fake_central, |
| const std::string& address) |
| : device::BluetoothDevice(fake_central), |
| address_(address), |
| - gatt_connected_(false) {} |
| + system_connected_(false), |
| + gatt_connected_(false), |
| + weak_ptr_factory_(this) {} |
| FakePeripheral::~FakePeripheral() {} |
| @@ -18,14 +22,20 @@ void FakePeripheral::SetName(base::Optional<std::string> name) { |
| name_ = std::move(name); |
| } |
| -void FakePeripheral::SetGattConnected(bool connected) { |
| - gatt_connected_ = connected; |
| +void FakePeripheral::SetSystemConnected(bool connected) { |
| + system_connected_ = connected; |
| } |
| void FakePeripheral::SetServiceUUIDs(UUIDSet service_uuids) { |
| service_uuids_ = std::move(service_uuids); |
| } |
| +void FakePeripheral::SetNextGATTConnectionResponse(uint16_t code) { |
| + DCHECK(!next_connection_response_); |
| + DCHECK(create_gatt_connection_error_callbacks_.empty()); |
| + next_connection_response_ = code; |
| +} |
| + |
| uint32_t FakePeripheral::GetBluetoothClass() const { |
| NOTREACHED(); |
| return 0; |
| @@ -92,7 +102,10 @@ bool FakePeripheral::IsConnected() const { |
| } |
| bool FakePeripheral::IsGattConnected() const { |
| - return gatt_connected_; |
| + // TODO(crbug.com/728870): Return gatt_connected_ only once system connected |
| + // peripherals are supported and Web Bluetooth uses them. See issue for more |
| + // details. |
| + return system_connected_ || gatt_connected_; |
| } |
| bool FakePeripheral::IsConnectable() const { |
| @@ -184,11 +197,43 @@ void FakePeripheral::ConnectToServiceInsecurely( |
| NOTREACHED(); |
| } |
| +void FakePeripheral::CreateGattConnection( |
| + const GattConnectionCallback& callback, |
| + const ConnectErrorCallback& error_callback) { |
| + create_gatt_connection_success_callbacks_.push_back(callback); |
| + create_gatt_connection_error_callbacks_.push_back(error_callback); |
| + |
| + // TODO(crbug.com/728870): Stop overriding CreateGattConnection once |
| + // IsGattConnected() is fixed. See issue for more details. |
| + if (gatt_connected_) |
| + return DidConnectGatt(); |
| + |
| + CreateGattConnectionImpl(); |
| +} |
| + |
| void FakePeripheral::CreateGattConnectionImpl() { |
| - NOTREACHED(); |
| + base::ThreadTaskRunnerHandle::Get()->PostTask( |
| + FROM_HERE, base::Bind(&FakePeripheral::DispatchConnectionResponse, |
| + weak_ptr_factory_.GetWeakPtr())); |
| +} |
| + |
| +void FakePeripheral::DispatchConnectionResponse() { |
| + DCHECK(!!next_connection_response_); |
|
dcheng
2017/06/02 16:07:35
Random: To me, !! reads a bit odd, since it isn't
ortuno
2017/06/05 01:36:09
Done.
|
| + |
| + uint16_t code = next_connection_response_.value(); |
| + next_connection_response_.reset(); |
| + |
| + if (code == mojom::kHCISuccess) { |
| + gatt_connected_ = true; |
| + DidConnectGatt(); |
| + } else if (code == mojom::kHCIConnectionTimeout) { |
| + DidFailToConnectGatt(ERROR_FAILED); |
| + } else { |
| + DidFailToConnectGatt(ERROR_UNKNOWN); |
| + } |
| } |
| void FakePeripheral::DisconnectGatt() { |
| - NOTREACHED(); |
| } |
| + |
| } // namespace bluetooth |