blob: 1c97d76da97ac59fde50e7b56cd07a22fe281172 [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_ATTRIBUTION_REPORTING_AGGREGATABLE_DEBUG_REPORTING_CONFIG_H_
#define COMPONENTS_ATTRIBUTION_REPORTING_AGGREGATABLE_DEBUG_REPORTING_CONFIG_H_
#include <stdint.h>
#include <optional>
#include "base/component_export.h"
#include "base/containers/flat_map.h"
#include "base/types/expected.h"
#include "components/attribution_reporting/debug_types.mojom-forward.h"
#include "components/attribution_reporting/suitable_origin.h"
#include "third_party/abseil-cpp/absl/numeric/int128.h"
namespace base {
class DictValue;
} // namespace base
namespace attribution_reporting {
// These values are persisted to logs. Entries should not be renumbered and
// numeric values should never be reused.
//
// LINT.IfChange(AggregatableDebugReportingConfigError)
enum AggregatableDebugReportingConfigError {
kRootInvalid = 0,
// This value only applies to source registrations.
kBudgetInvalid = 1,
kKeyPieceInvalid = 2,
kDebugDataInvalid = 3,
kDebugDataKeyPieceInvalid = 4,
kDebugDataValueInvalid = 5,
kDebugDataTypesInvalid = 6,
kAggregationCoordinatorOriginInvalid = 7,
kMaxValue = kAggregationCoordinatorOriginInvalid,
};
// LINT.ThenChange(//tools/metrics/histograms/metadata/attribution_reporting/enums.xml:ConversionAggregatableDebugReportingRegistrationError)
class COMPONENT_EXPORT(ATTRIBUTION_REPORTING)
AggregatableDebugReportingContribution {
public:
static std::optional<AggregatableDebugReportingContribution> Create(
absl::uint128 key_piece,
uint32_t value);
// Creates an invalid instance for use with Mojo deserialization, which
// requires types to be default-constructible.
AggregatableDebugReportingContribution() = default;
absl::uint128 key_piece() const;
uint32_t value() const;
friend bool operator==(const AggregatableDebugReportingContribution&,
const AggregatableDebugReportingContribution&) =
default;
private:
AggregatableDebugReportingContribution(absl::uint128 key_piece,
uint32_t value);
bool IsValid() const;
absl::uint128 key_piece_;
uint32_t value_;
};
struct COMPONENT_EXPORT(ATTRIBUTION_REPORTING)
AggregatableDebugReportingConfig {
using DebugData = base::flat_map<mojom::DebugDataType,
AggregatableDebugReportingContribution>;
// Parses the config for trigger registrations.
static base::expected<AggregatableDebugReportingConfig,
AggregatableDebugReportingConfigError>
Parse(base::DictValue&);
AggregatableDebugReportingConfig(
absl::uint128 key_piece,
DebugData,
std::optional<attribution_reporting::SuitableOrigin>
aggregation_coordinator_origin);
AggregatableDebugReportingConfig();
~AggregatableDebugReportingConfig();
AggregatableDebugReportingConfig(const AggregatableDebugReportingConfig&);
AggregatableDebugReportingConfig(AggregatableDebugReportingConfig&&);
AggregatableDebugReportingConfig& operator=(
const AggregatableDebugReportingConfig&);
AggregatableDebugReportingConfig& operator=(
AggregatableDebugReportingConfig&&);
void Serialize(base::DictValue&) const;
friend bool operator==(const AggregatableDebugReportingConfig&,
const AggregatableDebugReportingConfig&) = default;
absl::uint128 key_piece = 0;
DebugData debug_data;
std::optional<attribution_reporting::SuitableOrigin>
aggregation_coordinator_origin;
};
class COMPONENT_EXPORT(ATTRIBUTION_REPORTING)
SourceAggregatableDebugReportingConfig {
public:
static base::expected<SourceAggregatableDebugReportingConfig,
AggregatableDebugReportingConfigError>
Parse(base::DictValue&);
static std::optional<SourceAggregatableDebugReportingConfig> Create(
int budget,
AggregatableDebugReportingConfig);
SourceAggregatableDebugReportingConfig();
~SourceAggregatableDebugReportingConfig();
SourceAggregatableDebugReportingConfig(
const SourceAggregatableDebugReportingConfig&);
SourceAggregatableDebugReportingConfig(
SourceAggregatableDebugReportingConfig&&);
SourceAggregatableDebugReportingConfig& operator=(
const SourceAggregatableDebugReportingConfig&);
SourceAggregatableDebugReportingConfig& operator=(
SourceAggregatableDebugReportingConfig&&);
int budget() const { return budget_; }
const AggregatableDebugReportingConfig& config() const { return config_; }
void Serialize(base::DictValue&) const;
friend bool operator==(const SourceAggregatableDebugReportingConfig&,
const SourceAggregatableDebugReportingConfig&) =
default;
private:
SourceAggregatableDebugReportingConfig(int budget,
AggregatableDebugReportingConfig);
int budget_ = 0;
AggregatableDebugReportingConfig config_;
};
} // namespace attribution_reporting
#endif // COMPONENTS_ATTRIBUTION_REPORTING_AGGREGATABLE_DEBUG_REPORTING_CONFIG_H_