Commit 56e71abb authored by Bailey Forrest's avatar Bailey Forrest Committed by Commit Bot

[Chromecast][Bluetooth] Unset services discovered on disconnect

BUG=internal b/79494936
TEST=cast_bluetooth_unittests. Manual

Change-Id: I8b541dbbb8e9a20d72b5ec940a73827b5dbc51ef
Reviewed-on: https://chromium-review.googlesource.com/1053589Reviewed-by: default avatarStephen Lanham <slan@chromium.org>
Commit-Queue: Bailey Forrest <bcf@chromium.org>
Cr-Commit-Position: refs/heads/master@{#557961}
parent 2e9b8ae6
......@@ -128,6 +128,7 @@ void GattClientManagerImpl::OnConnectChanged(
// Only report disconnect callback if the connect callback was called (
// service discovery completed).
if (!connected && it->second->GetServicesDiscovered()) {
it->second->SetServicesDiscovered(false);
observers_->Notify(FROM_HERE, &Observer::OnConnectChanged, it->second,
false);
}
......@@ -252,9 +253,9 @@ void GattClientManagerImpl::OnGetServices(
it->second->OnGetServices(services);
if (!it->second->GetServicesDiscovered()) {
it->second->SetServicesDiscovered(true);
observers_->Notify(FROM_HERE, &Observer::OnConnectChanged, it->second,
true);
it->second->SetServicesDiscovered();
}
observers_->Notify(FROM_HERE, &Observer::OnServicesUpdated, it->second,
......
......@@ -590,5 +590,20 @@ TEST_F(GattClientManagerTest, WriteType) {
}
}
TEST_F(GattClientManagerTest, ConnectMultiple) {
bluetooth_v2_shlib::Gatt::Client::Delegate* delegate =
gatt_client_->delegate();
scoped_refptr<RemoteDevice> device = GetDevice(kTestAddr1);
for (size_t i = 0; i < 5; ++i) {
Connect(kTestAddr1);
EXPECT_TRUE(device->IsConnected());
EXPECT_CALL(*gatt_client_, Disconnect(kTestAddr1)).WillOnce(Return(true));
device->Disconnect({});
delegate->OnConnectChanged(kTestAddr1, true /* status */,
false /* connected */);
EXPECT_FALSE(device->IsConnected());
}
}
} // namespace bluetooth
} // namespace chromecast
......@@ -291,9 +291,12 @@ void RemoteDeviceImpl::SetConnected(bool connected) {
}
}
void RemoteDeviceImpl::SetServicesDiscovered() {
void RemoteDeviceImpl::SetServicesDiscovered(bool discovered) {
DCHECK(io_task_runner_->BelongsToCurrentThread());
services_discovered_ = true;
services_discovered_ = discovered;
if (!discovered) {
return;
}
connected_ = true;
if (connect_cb_) {
std::move(connect_cb_).Run(true);
......
......@@ -58,7 +58,7 @@ class RemoteDeviceImpl : public RemoteDevice {
// Friend methods for GattClientManagerImpl
void SetConnected(bool connected);
void SetServicesDiscovered();
void SetServicesDiscovered(bool discovered);
bool GetServicesDiscovered();
void SetMtu(int mtu);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment