#ifndef CHROME_BROWSER_ASH_ARC_BLUETOOTH_ARC_BLUEZ_BRIDGE_H_
#define CHROME_BROWSER_ASH_ARC_BLUETOOTH_ARC_BLUEZ_BRIDGE_H_
#include "chrome/browser/ash/arc/bluetooth/arc_bluetooth_bridge.h"
#include "chromeos/ash/experiences/arc/mojom/bluetooth.mojom.h"
#include "device/bluetooth/bluez/bluetooth_adapter_bluez.h"
namespace arc {
class ArcBluezBridge : public ArcBluetoothBridge {
public:
ArcBluezBridge(content::BrowserContext* context,
ArcBridgeService* bridge_service);
~ArcBluezBridge() override;
ArcBluezBridge(const ArcBluezBridge&) = delete;
ArcBluezBridge& operator=(const ArcBluezBridge&) = delete;
void GetSdpRecords(mojom::BluetoothAddressPtr remote_addr,
const device::BluetoothUUID& target_uuid) override;
void CreateSdpRecord(mojom::BluetoothSdpRecordPtr record_mojo,
CreateSdpRecordCallback callback) override;
void RemoveSdpRecord(uint32_t service_handle,
RemoveSdpRecordCallback callback) override;
void CloseBluetoothListeningSocket(BluetoothListeningSocket* socket);
void CloseBluetoothConnectingSocket(BluetoothConnectingSocket* socket);
protected:
bluez::BluetoothAdapterBlueZ* GetAdapter() const;
void HandlePoweredOn() override;
void OnGetServiceRecordsDone(
mojom::BluetoothAddressPtr remote_addr,
const device::BluetoothUUID& target_uuid,
const std::vector<bluez::BluetoothServiceRecordBlueZ>& records_bluez);
void OnGetServiceRecordsError(
mojom::BluetoothAddressPtr remote_addr,
const device::BluetoothUUID& target_uuid,
bluez::BluetoothServiceRecordBlueZ::ErrorCode error_code);
void OnBluezListeningSocketReady(BluetoothListeningSocket* sock_wrapper);
void OnBluezConnectingSocketReady(BluetoothConnectingSocket* sock_wrapper);
void CreateBluetoothListenSocket(
mojom::BluetoothSocketType type,
mojom::BluetoothSocketFlagsPtr flags,
int port,
BluetoothSocketListenCallback callback) override;
void CreateBluetoothConnectSocket(
mojom::BluetoothSocketType type,
mojom::BluetoothSocketFlagsPtr flags,
mojom::BluetoothAddressPtr addr,
int port,
BluetoothSocketConnectCallback callback) override;
private:
std::set<std::unique_ptr<BluetoothListeningSocket>, base::UniquePtrComparator>
listening_sockets_;
std::set<std::unique_ptr<BluetoothConnectingSocket>,
base::UniquePtrComparator>
connecting_sockets_;
base::WeakPtrFactory<ArcBluezBridge> weak_factory_{this};
};
}
#endif