blob: d7bb407f42694a4d6463c7580862af37a51e84c6 [file] [log] [blame]
// 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.
#include "chrome/common/privacy_budget/field_trial_param_conversions.h"
#include <algorithm>
#include <utility>
#include "base/ranges/algorithm.h"
#include "base/strings/strcat.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_split.h"
#include "third_party/blink/public/common/privacy_budget/identifiable_surface.h"
namespace privacy_budget_internal {
bool DecodeIdentifiabilityType(const base::StringPiece s,
blink::IdentifiableSurface* out) {
uint64_t hash = 0;
if (!base::StringToUint64(s, &hash))
return false;
*out = blink::IdentifiableSurface::FromMetricHash(hash);
return true;
}
bool DecodeIdentifiabilityType(const base::StringPiece s,
blink::IdentifiableSurface::Type* out) {
uint64_t hash = 0;
if (!base::StringToUint64(s, &hash))
return false;
if ((hash & blink::IdentifiableSurface::kTypeMask) != hash)
return false;
*out = static_cast<blink::IdentifiableSurface::Type>(hash);
return true;
}
bool DecodeIdentifiabilityType(const base::StringPiece s, int* out) {
return base::StringToInt(s, out);
}
bool DecodeIdentifiabilityType(const base::StringPiece s, unsigned int* out) {
return base::StringToUint(s, out);
}
bool DecodeIdentifiabilityType(const base::StringPiece s, double* out) {
return base::StringToDouble(s, out);
}
bool DecodeIdentifiabilityType(const base::StringPiece s,
std::vector<blink::IdentifiableSurface>* out) {
*out = DecodeIdentifiabilityFieldTrialParam<
std::vector<blink::IdentifiableSurface>, ';'>(s);
return !out->empty();
}
std::string EncodeIdentifiabilityType(const blink::IdentifiableSurface& s) {
return base::NumberToString(s.ToUkmMetricHash());
}
std::string EncodeIdentifiabilityType(
const blink::IdentifiableSurface::Type& t) {
return base::NumberToString(static_cast<uint64_t>(t));
}
std::string EncodeIdentifiabilityType(
const std::pair<const blink::IdentifiableSurface, int>& v) {
return base::StrCat({EncodeIdentifiabilityType(v.first), ";",
base::NumberToString(v.second)});
}
std::string EncodeIdentifiabilityType(const unsigned int& v) {
return base::NumberToString(v);
}
std::string EncodeIdentifiabilityType(const double& value) {
return base::NumberToString(value);
}
std::string EncodeIdentifiabilityType(
const std::vector<blink::IdentifiableSurface>& value) {
std::vector<std::string> parts;
base::ranges::transform(
value, std::back_inserter(parts),
[](const blink::IdentifiableSurface v) -> std::string {
return EncodeIdentifiabilityType(v);
});
return base::JoinString(parts, ";");
}
} // namespace privacy_budget_internal