blob: 994bbd05587c527fef2ed7629ee6a25e9517f28b [file] [log] [blame]
// 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 "content/browser/attribution_reporting/attribution_aggregatable_trigger_data.h"
#include <utility>
#include "base/ranges/algorithm.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "third_party/blink/public/common/attribution_reporting/constants.h"
namespace content {
// static
absl::optional<AttributionAggregatableTriggerData>
AttributionAggregatableTriggerData::Create(
absl::uint128 key_piece,
base::flat_set<std::string> source_keys,
AttributionFilters filters,
AttributionFilters not_filters) {
if (source_keys.size() >
blink::kMaxAttributionAggregationKeysPerSourceOrTrigger) {
return absl::nullopt;
}
bool is_valid = base::ranges::all_of(source_keys, [](const auto& key) {
return key.size() <= blink::kMaxBytesPerAttributionAggregationKeyId;
});
if (!is_valid)
return absl::nullopt;
return AttributionAggregatableTriggerData(key_piece, std::move(source_keys),
std::move(filters),
std::move(not_filters));
}
// static
AttributionAggregatableTriggerData
AttributionAggregatableTriggerData::CreateForTesting(
absl::uint128 key_piece,
base::flat_set<std::string> source_keys,
AttributionFilters filters_values,
AttributionFilters not_filters_values) {
return AttributionAggregatableTriggerData(key_piece, std::move(source_keys),
std::move(filters_values),
std::move(not_filters_values));
}
AttributionAggregatableTriggerData::AttributionAggregatableTriggerData(
absl::uint128 key_piece,
base::flat_set<std::string> source_keys,
AttributionFilters filters,
AttributionFilters not_filters)
: key_piece_(key_piece),
source_keys_(std::move(source_keys)),
filters_(std::move(filters)),
not_filters_(std::move(not_filters)) {}
AttributionAggregatableTriggerData::~AttributionAggregatableTriggerData() =
default;
AttributionAggregatableTriggerData::AttributionAggregatableTriggerData(
const AttributionAggregatableTriggerData&) = default;
AttributionAggregatableTriggerData::AttributionAggregatableTriggerData(
AttributionAggregatableTriggerData&&) = default;
AttributionAggregatableTriggerData&
AttributionAggregatableTriggerData::operator=(
const AttributionAggregatableTriggerData&) = default;
AttributionAggregatableTriggerData&
AttributionAggregatableTriggerData::operator=(
AttributionAggregatableTriggerData&&) = default;
} // namespace content