// 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.
#include "chromeos/ash/components/data_migration/testing/connection_barrier.h"
#include <cstdint>
#include <vector>
#include "base/check.h"
#include "base/functional/callback_helpers.h"
namespace data_migration {
ConnectionBarrier::ConnectionBarrier(
NearbyConnectionsManager* nearby_connections_manager)
: nearby_connections_manager_(nearby_connections_manager) {
CHECK(nearby_connections_manager_);
nearby_connections_manager_->StartAdvertising(
/*endpoint_info=*/std::vector<uint8_t>(32, 0), this,
NearbyConnectionsManager::PowerLevel::kHighPower,
::nearby_share::mojom::DataUsage::kOffline,
// If `StartAdvertising()` fails, `Wait()` will fail with a timeout, so
// there's no need to check this callback's return value.
base::DoNothing());
}
ConnectionBarrier::~ConnectionBarrier() {
// Unregisters raw pointer to "this" provided in past call to
// `StartAdvertising()`.
nearby_connections_manager_->StopAdvertising(base::DoNothing());
}
NearbyConnection* ConnectionBarrier::Wait() {
return connection_accepted_.Wait() ? connection_accepted_.Get<0>() : nullptr;
}
void ConnectionBarrier::OnIncomingConnectionAccepted(
const std::string& endpoint_id,
const std::vector<uint8_t>& endpoint_info,
NearbyConnection* connection) {
connection_accepted_.SetValue(connection);
}
} // namespace data_migration