| // 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_IDENTIFIABILITY_STUDY_GROUP_SETTINGS_H_ |
| #define CHROME_BROWSER_PRIVACY_BUDGET_IDENTIFIABILITY_STUDY_GROUP_SETTINGS_H_ |
| |
| #include "chrome/common/privacy_budget/types.h" |
| #include "third_party/blink/public/common/privacy_budget/identifiable_surface.h" |
| |
| // This class wraps and validates the finch experiment parameters for the |
| // identifiability study. The parameters are validated at construction. If they |
| // are invalid, the study is disabled. |
| class IdentifiabilityStudyGroupSettings { |
| public: |
| // Constructs the settings from the values of the feature params. |
| static IdentifiabilityStudyGroupSettings InitFromFeatureParams(); |
| |
| // Constructs the settings from the explicit values passed below. For the |
| // meaning of the parameters, see |
| // chrome/common/privacy_budget/privacy_budget_features.h. |
| static IdentifiabilityStudyGroupSettings InitFrom( |
| bool enabled, |
| int expected_surface_count, |
| int surface_budget, |
| const std::string& blocks, |
| const std::string& blocks_weights, |
| const std::string& allowed_random_types, |
| const std::string& reid_blocks, |
| const std::string& reid_blocks_salts_ranges, |
| const std::string& reid_blocks_bits, |
| const std::string& reid_blocks_noise_probabilities); |
| |
| IdentifiabilityStudyGroupSettings(const IdentifiabilityStudyGroupSettings&) = |
| delete; |
| IdentifiabilityStudyGroupSettings(IdentifiabilityStudyGroupSettings&&); |
| ~IdentifiabilityStudyGroupSettings(); |
| |
| IdentifiabilityStudyGroupSettings& operator=( |
| const IdentifiabilityStudyGroupSettings&) const = delete; |
| IdentifiabilityStudyGroupSettings& operator=( |
| const IdentifiabilityStudyGroupSettings&&) const = delete; |
| |
| // Whether the study should be enabled. |
| bool enabled() const { return enabled_; } |
| |
| bool IsUsingAssignedBlockSampling() const; |
| bool IsUsingRandomSampling() const; |
| bool IsUsingReidScoreEstimator() const; |
| |
| // Whether the study is using one of the sampling strategies (random or block |
| // assignment). |
| bool IsUsingSamplingOfSurfaces() const; |
| |
| const IdentifiableSurfaceBlocks& blocks() const; |
| const IdentifiableSurfaceBlocks& reid_blocks() const; |
| const std::vector<double>& blocks_weights() const; |
| const std::vector<uint64_t>& reid_blocks_salts_ranges() const; |
| const std::vector<int>& reid_blocks_bits() const; |
| const std::vector<double>& reid_blocks_noise_probabilities() const; |
| const std::vector<blink::IdentifiableSurface::Type>& allowed_random_types() |
| const; |
| |
| int expected_surface_count() const { return expected_surface_count_; } |
| int surface_budget() const { return surface_budget_; } |
| |
| private: |
| IdentifiabilityStudyGroupSettings( |
| bool enabled, |
| int surface_count, |
| int surface_budget, |
| IdentifiableSurfaceBlocks blocks, |
| std::vector<double> blocks_weights, |
| std::vector<blink::IdentifiableSurface::Type> allowed_random_types, |
| IdentifiableSurfaceBlocks reid_blocks, |
| std::vector<uint64_t> reid_blocks_salts_ranges, |
| std::vector<int> reid_blocks_bits, |
| std::vector<double> reid_blocks_noise_probabilities); |
| |
| bool Validate(); |
| bool ValidateAssignedBlockSampling(); |
| bool ValidateReidBlockEstimator(); |
| |
| // True if identifiability study is enabled. If this field is false, then none |
| // of the other values are applicable. |
| bool enabled_; |
| |
| const int expected_surface_count_; |
| |
| const int surface_budget_; |
| |
| const IdentifiableSurfaceBlocks blocks_; |
| |
| const std::vector<double> blocks_weights_; |
| |
| const IdentifiableSurfaceBlocks reid_blocks_; |
| |
| const std::vector<uint64_t> reid_blocks_salts_ranges_; |
| |
| const std::vector<int> reid_blocks_bits_; |
| |
| const std::vector<double> reid_blocks_noise_probabilities_; |
| |
| // Surface types to sample from when random surface sampling is enabled. If |
| // this vector is empty all surface types are allowed to be sampled. |
| const std::vector<blink::IdentifiableSurface::Type> allowed_random_types_; |
| }; |
| |
| #endif // CHROME_BROWSER_PRIVACY_BUDGET_IDENTIFIABILITY_STUDY_GROUP_SETTINGS_H_ |