// Copyright 2022 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/dbus/missive/missive_client_test_observer.h"
#include <optional>
#include <tuple>
#include "base/check.h"
#include "base/functional/bind.h"
#include "base/test/test_future.h"
#include "chromeos/dbus/missive/missive_client.h"
#include "components/reporting/proto/synced/record.pb.h"
#include "components/reporting/proto/synced/record_constants.pb.h"
namespace chromeos {
namespace {
// Absent destination means any destination is okay.
bool RecordHasDestination(std::optional<::reporting::Destination> destination,
const ::reporting::Record& record) {
return !destination.has_value() ||
record.destination() == destination.value();
}
} // namespace
MissiveClientTestObserver::MissiveClientTestObserver(
std::optional<::reporting::Destination> destination)
: MissiveClientTestObserver(
base::BindRepeating(&RecordHasDestination, destination)) {}
MissiveClientTestObserver::MissiveClientTestObserver(
RecordFilterCb record_filter_cb)
: record_filter_cb_(std::move(record_filter_cb)) {
DCHECK(MissiveClient::Get());
DCHECK(MissiveClient::Get()->GetTestInterface());
MissiveClient::Get()->GetTestInterface()->AddObserver(this);
}
MissiveClientTestObserver::~MissiveClientTestObserver() {
MissiveClient::Get()->GetTestInterface()->RemoveObserver(this);
}
void MissiveClientTestObserver::OnRecordEnqueued(
::reporting::Priority priority,
const ::reporting::Record& record) {
if (!record_filter_cb_.Run(record)) {
return;
}
enqueued_record_.SetValue(priority, record);
}
std::tuple<::reporting::Priority, ::reporting::Record>
MissiveClientTestObserver::GetNextEnqueuedRecord() {
return enqueued_record_.Take();
}
bool MissiveClientTestObserver::HasNewEnqueuedRecord() {
return enqueued_record_.IsReady();
}
} // namespace chromeos