// Copyright 2021 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_PRIVACY_BUDGET_REPRESENTATIVE_SURFACE_SET_H_ #define CHROME_BROWSER_PRIVACY_BUDGET_REPRESENTATIVE_SURFACE_SET_H_ #include <vector> #include "base/containers/flat_set.h" #include "base/strings/string_number_conversions.h" #include "base/types/strong_alias.h" #include "chrome/common/privacy_budget/types.h" #include "third_party/blink/public/common/privacy_budget/identifiable_surface.h" namespace privacy_budget_internal { template <typename T> struct SortWhenSerializing; } // namespace privacy_budget_internal // Typesafe version of blink::IdentifiableSurface that indicates that the // surface is also a representative for its equivalence class. See // SurfaceSetEquivalence for details. // // Without something like this, we'll have to manually keep track of which // surfaces are generic and which are representatives. RepresentativeSurface; // Collections corresponding to blink::IdentifiableSurface collections. RepresentativeSurfaceSet; RepresentativeSurfaceList; // Converts a set of typesafe representatives surface identifiers to a set of // regular 'ol `IdentifiableSurface`. // // To get a collection of RepresentativeSurface values from a collection of // blink::IdentifiableSurface values, use SurfaceSetEquivalence. IdentifiableSurfaceSet IdentifiableSurfaceSetFromRepresentative( const RepresentativeSurfaceSet& source); // The returned string will be a decimal representation of the numeric value of // the underlying surface. std::string RepresentativeSurfaceToString(const RepresentativeSurface& v); // For unordered containers. struct RepresentativeSurfaceHash { … }; namespace privacy_budget_internal { template <> struct SortWhenSerializing<RepresentativeSurfaceSet> : std::true_type { … }; } // namespace privacy_budget_internal #endif // CHROME_BROWSER_PRIVACY_BUDGET_REPRESENTATIVE_SURFACE_SET_H_