blob: 4755ded09fc44d0a040a3fbd7954df341c88ab87 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/metrics/dwa/dwa_entry_builder_base.h"
#include <memory>
#include <string>
#include <tuple>
#include "base/containers/flat_set.h"
#include "base/metrics/metrics_hashes.h"
#include "components/metrics/dwa/mojom/dwa_interface.mojom.h"
#include "net/base/registry_controlled_domains/registry_controlled_domain.h"
#include "url/gurl.h"
namespace dwa::internal {
namespace {
std::string GetEtldPlusOne(const GURL& url) {
return net::registry_controlled_domains::GetDomainAndRegistry(
url, net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES);
}
} // namespace
DwaEntryBuilderBase::DwaEntryBuilderBase(DwaEntryBuilderBase&&) = default;
DwaEntryBuilderBase& DwaEntryBuilderBase::operator=(DwaEntryBuilderBase&&) =
default;
DwaEntryBuilderBase::~DwaEntryBuilderBase() = default;
DwaEntryBuilderBase::DwaEntryBuilderBase(uint64_t event_hash)
: entry_(metrics::dwa::mojom::DwaEntry::New()) {
entry_->event_hash = event_hash;
}
void DwaEntryBuilderBase::SetContentInternal(uint64_t content_hash) {
entry_->content_hash = content_hash;
}
void DwaEntryBuilderBase::SetMetricInternal(uint64_t metric_hash,
int64_t value) {
entry_->metrics.insert_or_assign(metric_hash, value);
}
void DwaEntryBuilderBase::AddToStudiesOfInterestInternal(
std::string_view study_name) {
entry_->studies_of_interest.insert_or_assign(std::string(study_name), true);
}
void DwaEntryBuilderBase::Record(metrics::dwa::DwaRecorder* recorder) {
if (recorder) {
recorder->AddEntry(std::move(entry_));
} else {
entry_.reset();
}
}
metrics::dwa::mojom::DwaEntryPtr* DwaEntryBuilderBase::GetEntryForTesting() {
return &entry_;
}
std::string DwaEntryBuilderBase::SanitizeContent(std::string_view content) {
return GetEtldPlusOne(GURL(content));
}
} // namespace dwa::internal