| Index: content/browser/bluetooth/frame_connected_bluetooth_devices.cc
|
| diff --git a/content/browser/bluetooth/frame_connected_bluetooth_devices.cc b/content/browser/bluetooth/frame_connected_bluetooth_devices.cc
|
| index d469a50f0e21b21d3ad3b963c5ebdad13b2a93bd..f36b44cbc85c79967275f84c0b228b689a864207 100644
|
| --- a/content/browser/bluetooth/frame_connected_bluetooth_devices.cc
|
| +++ b/content/browser/bluetooth/frame_connected_bluetooth_devices.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "content/browser/bluetooth/frame_connected_bluetooth_devices.h"
|
|
|
| +#include "base/memory/ptr_util.h"
|
| #include "base/optional.h"
|
| #include "base/strings/string_util.h"
|
| #include "content/browser/web_contents/web_contents_impl.h"
|
| @@ -12,6 +13,17 @@
|
|
|
| namespace content {
|
|
|
| +struct GATTConnectionAndServerClient {
|
| + GATTConnectionAndServerClient(
|
| + std::unique_ptr<device::BluetoothGattConnection> connection,
|
| + blink::mojom::WebBluetoothServerClientAssociatedPtr client)
|
| + : gatt_connection(std::move(connection)),
|
| + server_client(std::move(client)) {}
|
| +
|
| + std::unique_ptr<device::BluetoothGattConnection> gatt_connection;
|
| + blink::mojom::WebBluetoothServerClientAssociatedPtr server_client;
|
| +};
|
| +
|
| FrameConnectedBluetoothDevices::FrameConnectedBluetoothDevices(
|
| RenderFrameHost* rfh)
|
| : web_contents_impl_(static_cast<WebContentsImpl*>(
|
| @@ -29,13 +41,14 @@ bool FrameConnectedBluetoothDevices::IsConnectedToDeviceWithId(
|
| if (connection_iter == device_id_to_connection_map_.end()) {
|
| return false;
|
| }
|
| - DCHECK(connection_iter->second->IsConnected());
|
| + DCHECK(connection_iter->second->gatt_connection->IsConnected());
|
| return true;
|
| }
|
|
|
| void FrameConnectedBluetoothDevices::Insert(
|
| const WebBluetoothDeviceId& device_id,
|
| - std::unique_ptr<device::BluetoothGattConnection> connection) {
|
| + std::unique_ptr<device::BluetoothGattConnection> connection,
|
| + blink::mojom::WebBluetoothServerClientAssociatedPtr client) {
|
| if (device_id_to_connection_map_.find(device_id) !=
|
| device_id_to_connection_map_.end()) {
|
| // It's possible for WebBluetoothServiceImpl to issue two successive
|
| @@ -50,7 +63,11 @@ void FrameConnectedBluetoothDevices::Insert(
|
| return;
|
| }
|
| device_address_to_id_map_[connection->GetDeviceAddress()] = device_id;
|
| - device_id_to_connection_map_[device_id] = std::move(connection);
|
| + auto gatt_connection_and_client =
|
| + base::MakeUnique<GATTConnectionAndServerClient>(std::move(connection),
|
| + std::move(client));
|
| + device_id_to_connection_map_[device_id] =
|
| + std::move(gatt_connection_and_client);
|
| IncrementDevicesConnectedCount();
|
| }
|
|
|
| @@ -61,7 +78,7 @@ void FrameConnectedBluetoothDevices::CloseConnectionToDeviceWithId(
|
| return;
|
| }
|
| CHECK(device_address_to_id_map_.erase(
|
| - connection_iter->second->GetDeviceAddress()));
|
| + connection_iter->second->gatt_connection->GetDeviceAddress()));
|
| device_id_to_connection_map_.erase(connection_iter);
|
| DecrementDevicesConnectedCount();
|
| }
|
| @@ -74,8 +91,11 @@ FrameConnectedBluetoothDevices::CloseConnectionToDeviceWithAddress(
|
| return base::nullopt;
|
| }
|
| WebBluetoothDeviceId device_id = device_address_iter->second;
|
| + auto device_id_iter = device_id_to_connection_map_.find(device_id);
|
| + CHECK(device_id_iter != device_id_to_connection_map_.end());
|
| + device_id_iter->second->server_client->GATTServerDisconnected();
|
| CHECK(device_address_to_id_map_.erase(device_address));
|
| - CHECK(device_id_to_connection_map_.erase(device_id));
|
| + device_id_to_connection_map_.erase(device_id);
|
| DecrementDevicesConnectedCount();
|
| return base::make_optional(device_id);
|
| }
|
|
|