// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROMEOS_ASH_COMPONENTS_DATA_MIGRATION_TESTING_CONNECTION_BARRIER_H_
#define CHROMEOS_ASH_COMPONENTS_DATA_MIGRATION_TESTING_CONNECTION_BARRIER_H_
#include "base/memory/raw_ptr.h"
#include "base/test/test_future.h"
#include "chromeos/ash/components/nearby/common/connections_manager/nearby_connections_manager.h"
class NearbyConnection;
namespace data_migration {
// Waits until both sides of a data_migration connection have been accepted.
class ConnectionBarrier
: public NearbyConnectionsManager::IncomingConnectionListener {
public:
explicit ConnectionBarrier(
NearbyConnectionsManager* nearby_connections_manager);
ConnectionBarrier(const ConnectionBarrier&) = delete;
ConnectionBarrier& operator=(const ConnectionBarrier&) = delete;
~ConnectionBarrier() override;
// Blocks until both sides of the connection have been accepted and returns
// the resulting `NearbyConnection` used to exchange bytes payloads. Returns
// nullptr if the connection was not established within an internal timeout.
NearbyConnection* Wait();
private:
// NearbyConnectionsManager::IncomingConnectionListener:
void OnIncomingConnectionInitiated(
const std::string& endpoint_id,
const std::vector<uint8_t>& endpoint_info) override {}
void OnIncomingConnectionAccepted(const std::string& endpoint_id,
const std::vector<uint8_t>& endpoint_info,
NearbyConnection* connection) override;
const raw_ptr<NearbyConnectionsManager> nearby_connections_manager_;
base::test::TestFuture<NearbyConnection*> connection_accepted_;
};
} // namespace data_migration
#endif // CHROMEOS_ASH_COMPONENTS_DATA_MIGRATION_TESTING_CONNECTION_BARRIER_H_