// 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_SWITCH_SAMPLE_COLLECTOR_H_
#define THIRD_PARTY_BLINK_PUBLIC_COMMON_PRIVACY_BUDGET_SCOPED_SWITCH_SAMPLE_COLLECTOR_H_

#include "base/component_export.h"
#include "third_party/blink/public/common/common_export.h"
#include "third_party/blink/public/common/privacy_budget/identifiability_sample_collector.h"

namespace blink {
namespace test {

// ***NOTE ***
//    If you are looking for an intropspectable `IdentifiabilitySampleCollector`
//    for testing, you are probably looking for
//    `ScopedIdentifiabilityTestSampleCollector` instead.
//
// `IdentifiabilitySampleCollector` is a per-process singleton meant to be
// accessible from anywhere and from any thread. For testing purposes, however,
// it would be convenient to swap out the default collector and instead use
// a test stand-in.
//
// `ScopedSwitchSampleCollector` sets the default sample collector to
// a replacement object for the duration of the `ScopedSwitchSampleCollector`'s
// lifetime.
//
// Example usage:
//
//     TEST(MyTest, Something) {
//       MyFakeSampleCollector collector;
//       ScopedSwitchSampleCollector scoped_default(&collector);
//       ...
//     }
//
// `ScopedSwitchSampleCollector` does not nest. Instantiating a new object while
// there's an active `ScopedSwitchSampleCollector` isn't allowed and will
// `DCHECK` on debug builds.
class COMPONENT_EXPORT(PRIVACY_BUDGET_TEST_SUPPORT)
    ScopedSwitchSampleCollector {
 public:
  // Sets `replacement` as the default `IdentifiabilitySampleCollector` for the
  // duration of this object's lifetime. `replacement` must outlive this object.
  explicit ScopedSwitchSampleCollector(
      IdentifiabilitySampleCollector* replacement);

  ~ScopedSwitchSampleCollector();
};

}  // namespace test
}  // namespace blink

#endif  // THIRD_PARTY_BLINK_PUBLIC_COMMON_PRIVACY_BUDGET_SCOPED_SWITCH_SAMPLE_COLLECTOR_H_
