blob: bfc545fd049d227c510dd71067c0d2afb56ffdc3 [file] [log] [blame]
// Copyright 2020 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.
#ifndef THIRD_PARTY_BLINK_PUBLIC_COMMON_PRIVACY_BUDGET_SCOPED_IDENTIFIABILITY_TEST_SAMPLE_COLLECTOR_H_
#define THIRD_PARTY_BLINK_PUBLIC_COMMON_PRIVACY_BUDGET_SCOPED_IDENTIFIABILITY_TEST_SAMPLE_COLLECTOR_H_
#include <memory>
#include <vector>
#include "base/component_export.h"
#include "third_party/blink/public/common/privacy_budget/identifiability_sample_collector.h"
#include "third_party/blink/public/common/privacy_budget/scoped_switch_sample_collector.h"
namespace blink {
namespace test {
// An `IdentifiabilitySampleCollector` implementation for testing. Allows
// inspecting recorded metrics.
//
// Instantiating this class automatically sets the per-process
// `IdentifiabilitySampleCollector` to point to the new instance.
//
// Note: Unlike the real collector nothing in this class is thread safe.
class COMPONENT_EXPORT(PRIVACY_BUDGET_TEST_SUPPORT)
ScopedIdentifiabilityTestSampleCollector
: public IdentifiabilitySampleCollector {
public:
ScopedIdentifiabilityTestSampleCollector();
~ScopedIdentifiabilityTestSampleCollector() override;
// IdentifiabilitySampleCollector
void Record(ukm::UkmRecorder* recorder,
ukm::SourceId source,
std::vector<IdentifiableSample> metrics) override;
void Flush(ukm::UkmRecorder* recorder) override;
void FlushSource(ukm::UkmRecorder* recorder, ukm::SourceId source) override;
// Each call to `Record()` results in one of these being added to `entries()`
// in order of occurrence that faithfully records the arguments to `Record()`.
struct Entry {
Entry(ukm::SourceId source_in, std::vector<IdentifiableSample> metrics_in)
: source(source_in), metrics(std::move(metrics_in)) {}
const ukm::SourceId source;
const std::vector<IdentifiableSample> metrics;
};
// Returns a reference to the list of `Entry` objects representing the
// `Record()` calls received so far.
const std::vector<Entry>& entries() const { return entries_; }
// Reset all recorded entries. `entries()` returns an empty list after this.
void ClearEntries();
private:
std::vector<Entry> entries_;
ScopedSwitchSampleCollector scoped_default_;
};
} // namespace test
} // namespace blink
#endif // THIRD_PARTY_BLINK_PUBLIC_COMMON_PRIVACY_BUDGET_SCOPED_IDENTIFIABILITY_TEST_SAMPLE_COLLECTOR_H_