// 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_IDENTIFIABILITY_SAMPLE_COLLECTOR_H_
#define THIRD_PARTY_BLINK_PUBLIC_COMMON_PRIVACY_BUDGET_IDENTIFIABILITY_SAMPLE_COLLECTOR_H_

#include <utility>
#include <vector>

#include "services/metrics/public/cpp/ukm_recorder.h"
#include "services/metrics/public/cpp/ukm_source_id.h"
#include "third_party/blink/public/common/common_export.h"
#include "third_party/blink/public/common/privacy_budget/identifiable_sample.h"

namespace blink {

// Do not use this directly. Don't report identifiability metrics directly via
// `UkmRecorder` either.
//
// `UkmRecorder` is not designed for the rate and volume with which
// identifiability metrics are generated. In addition, all of these metrics --
// which aren't really metrics to begin with -- are only required to be recorded
// once per client.
//
// Therefore, rather than report identifiability samples directly to UKM, they
// should instead be funnelled through the global instance of
// `IdentifiabilitySampleCollector` which does the work of de-duplication and
// rate limiting..
//
// `IdentifiabilityMetricBuilder` already uses `IdentifiabilitySampleCollector`
// internally. Look no further.
class BLINK_COMMON_EXPORT IdentifiabilitySampleCollector {
 public:
  virtual ~IdentifiabilitySampleCollector();

  // Gets the singleton per-process collector. Always returns a valid pointer.
  static IdentifiabilitySampleCollector* Get();

  // Record a set of identifiability metrics.
  virtual void Record(ukm::UkmRecorder* recorder,
                      ukm::SourceId source,
                      std::vector<IdentifiableSample> metrics) = 0;

  // Unconditionally write out all pending metrics via `recorder`.
  virtual void Flush(ukm::UkmRecorder* recorder) = 0;

  // Unconditionally write out all pending metrics from `source` via `recorder`.
  virtual void FlushSource(ukm::UkmRecorder* recorder,
                           ukm::SourceId source) = 0;
};

}  // namespace blink

#endif  // THIRD_PARTY_BLINK_PUBLIC_COMMON_PRIVACY_BUDGET_IDENTIFIABILITY_SAMPLE_COLLECTOR_H_
