1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
// 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);
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;
// Whether the study is using one of the sampling strategies (random or block
// assignment).
bool IsUsingSamplingOfSurfaces() const;
const IdentifiableSurfaceBlocks& blocks() const;
const std::vector<double>& blocks_weights() 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);
bool Validate();
bool ValidateAssignedBlockSampling();
// 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_;
// 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_
|