// 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. #ifndef COMPONENTS_VARIATIONS_VARIATIONS_LAYERS_H_ #define COMPONENTS_VARIATIONS_VARIATIONS_LAYERS_H_ #include #include "base/component_export.h" #include "base/metrics/field_trial.h" #include "components/variations/proto/variations_seed.pb.h" #include "third_party/abseil-cpp/absl/types/optional.h" namespace variations { // Parses out the Variations Layers data from the provided seed and // chooses which member within each layer should be the active one. class COMPONENT_EXPORT(VARIATIONS) VariationsLayers { public: VariationsLayers( const VariationsSeed& seed, const base::FieldTrial::EntropyProvider* low_entropy_provider); VariationsLayers(); ~VariationsLayers(); VariationsLayers(const VariationsLayers&) = delete; VariationsLayers& operator=(const VariationsLayers&) = delete; // Return whether the given layer has the given member active. bool IsLayerMemberActive(uint32_t layer_id, uint32_t member_id) const; // Return whether the layer should use the default entropy source // (usually the high entropy source). bool IsLayerUsingDefaultEntropy(uint32_t layer_id) const; private: void ConstructLayer( const base::FieldTrial::EntropyProvider& low_entropy_provider, const Layer& layer_proto); struct LayerInfo { LayerInfo(absl::optional active_member_id, Layer::EntropyMode entropy_mode); ~LayerInfo(); LayerInfo(const LayerInfo& other); // = delete; LayerInfo& operator=(const LayerInfo&) = delete; absl::optional active_member_id; Layer::EntropyMode entropy_mode; }; std::map active_member_for_layer_; }; } // namespace variations #endif // COMPONENTS_VARIATIONS_VARIATIONS_LAYERS_H_