blob: db91ead32b1c32fa9235c22dbc9be74aa86309cd [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chromeos/services/secure_channel/fake_ble_advertiser.h"
#include "base/logging.h"
#include "base/stl_util.h"
namespace chromeos {
namespace secure_channel {
FakeBleAdvertiser::FakeBleAdvertiser(Delegate* delegate)
: BleAdvertiser(delegate),
scheduler_(std::make_unique<SharedResourceScheduler>()) {}
FakeBleAdvertiser::~FakeBleAdvertiser() = default;
const std::list<DeviceIdPair>& FakeBleAdvertiser::GetRequestsForPriority(
ConnectionPriority connection_priority) {
return priority_to_queued_requests_map()[connection_priority];
}
base::Optional<ConnectionPriority> FakeBleAdvertiser::GetPriorityForRequest(
const DeviceIdPair& request) const {
for (auto it = request_to_priority_map().begin();
it != request_to_priority_map().end(); ++it) {
if (it->first == request)
return it->second;
}
return base::nullopt;
}
std::vector<DeviceIdPair> FakeBleAdvertiser::GetAllRequestsForRemoteDevice(
const std::string& remote_device_id) {
std::vector<DeviceIdPair> all_requests_for_remote_device;
for (const auto& map_entry : request_to_priority_map()) {
if (map_entry.first.remote_device_id() == remote_device_id)
all_requests_for_remote_device.push_back(map_entry.first);
}
return all_requests_for_remote_device;
}
void FakeBleAdvertiser::NotifyAdvertisingSlotEnded(
const DeviceIdPair& device_id_pair,
bool replaced_by_higher_priority_advertisement) {
// |device_id_pair| must be scheduled.
DCHECK(GetPriorityForRequest(device_id_pair));
BleAdvertiser::NotifyAdvertisingSlotEnded(
device_id_pair, replaced_by_higher_priority_advertisement);
}
void FakeBleAdvertiser::NotifyFailureToGenerateAdvertisement(
const DeviceIdPair& device_id_pair) {
// |device_id_pair| must be scheduled.
DCHECK(GetPriorityForRequest(device_id_pair));
BleAdvertiser::NotifyFailureToGenerateAdvertisement(device_id_pair);
}
void FakeBleAdvertiser::AddAdvertisementRequest(
const DeviceIdPair& request,
ConnectionPriority connection_priority) {
scheduler_->ScheduleRequest(request, connection_priority);
}
void FakeBleAdvertiser::UpdateAdvertisementRequestPriority(
const DeviceIdPair& request,
ConnectionPriority connection_priority) {
scheduler_->UpdateRequestPriority(request, connection_priority);
}
void FakeBleAdvertiser::RemoveAdvertisementRequest(
const DeviceIdPair& request) {
scheduler_->RemoveScheduledRequest(request);
}
FakeBleAdvertiserDelegate::FakeBleAdvertiserDelegate() = default;
FakeBleAdvertiserDelegate::~FakeBleAdvertiserDelegate() = default;
void FakeBleAdvertiserDelegate::OnAdvertisingSlotEnded(
const DeviceIdPair& device_id_pair,
bool replaced_by_higher_priority_advertisement) {
slot_ended_events_.emplace_back(device_id_pair,
replaced_by_higher_priority_advertisement);
}
void FakeBleAdvertiserDelegate::OnFailureToGenerateAdvertisement(
const DeviceIdPair& device_id_pair) {
advertisement_generation_failures_.emplace_back(device_id_pair);
}
} // namespace secure_channel
} // namespace chromeos