| Index: components/variations/variations_params_manager.cc
|
| diff --git a/components/variations/variations_params_manager.cc b/components/variations/variations_params_manager.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e4b92cc1bbbad950f2bda1c8763a3d61b36514a4
|
| --- /dev/null
|
| +++ b/components/variations/variations_params_manager.cc
|
| @@ -0,0 +1,92 @@
|
| +// Copyright 2016 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 "components/variations/variations_params_manager.h"
|
| +
|
| +#include <utility>
|
| +
|
| +#include "base/feature_list.h"
|
| +#include "base/metrics/field_trial.h"
|
| +#include "base/test/scoped_feature_list.h"
|
| +#include "components/variations/variations_associated_data.h"
|
| +
|
| +namespace variations {
|
| +namespace testing {
|
| +
|
| +namespace {
|
| +
|
| +// The fixed testing group created in the provided trail when setting up params.
|
| +const char kGroupTesting[] = "Testing";
|
| +
|
| +base::FieldTrial* CreateFieldTrialWithParams(
|
| + const std::string& trial_name,
|
| + const std::map<std::string, std::string>& param_values) {
|
| + variations::AssociateVariationParams(trial_name, kGroupTesting, param_values);
|
| + return base::FieldTrialList::CreateFieldTrial(trial_name, kGroupTesting);
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +VariationParamsManager::VariationParamsManager()
|
| + : field_trial_list_(new base::FieldTrialList(nullptr)),
|
| + scoped_feature_list_(new base::test::ScopedFeatureList()) {}
|
| +
|
| +VariationParamsManager::VariationParamsManager(
|
| + const std::string& trial_name,
|
| + const std::map<std::string, std::string>& param_values)
|
| + : VariationParamsManager() {
|
| + SetVariationParams(trial_name, param_values);
|
| +}
|
| +
|
| +VariationParamsManager::VariationParamsManager(
|
| + const std::string& trial_name,
|
| + const std::map<std::string, std::string>& param_values,
|
| + const std::set<std::string>& associated_features)
|
| + : VariationParamsManager() {
|
| + SetVariationParamsWithFeatureAssociations(trial_name, param_values,
|
| + associated_features);
|
| +}
|
| +
|
| +VariationParamsManager::~VariationParamsManager() {
|
| + ClearAllVariationIDs();
|
| + ClearAllVariationParams();
|
| +}
|
| +
|
| +void VariationParamsManager::SetVariationParams(
|
| + const std::string& trial_name,
|
| + const std::map<std::string, std::string>& param_values) {
|
| + CreateFieldTrialWithParams(trial_name, param_values);
|
| +}
|
| +
|
| +void VariationParamsManager::SetVariationParamsWithFeatureAssociations(
|
| + const std::string& trial_name,
|
| + const std::map<std::string, std::string>& param_values,
|
| + const std::set<std::string>& associated_features) {
|
| + base::FieldTrial* field_trial =
|
| + CreateFieldTrialWithParams(trial_name, param_values);
|
| +
|
| + std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList);
|
| + for (const std::string& feature_name : associated_features) {
|
| + feature_list->RegisterFieldTrialOverride(
|
| + feature_name,
|
| + base::FeatureList::OverrideState::OVERRIDE_ENABLE_FEATURE,
|
| + field_trial);
|
| + }
|
| +
|
| + scoped_feature_list_->InitWithFeatureList(std::move(feature_list));
|
| +}
|
| +
|
| +void VariationParamsManager::ClearAllVariationIDs() {
|
| + variations::testing::ClearAllVariationIDs();
|
| +}
|
| +
|
| +void VariationParamsManager::ClearAllVariationParams() {
|
| + variations::testing::ClearAllVariationParams();
|
| + // When the scoped feature list is destroyed, it puts back the original
|
| + // feature list that was there when InitWithFeatureList() was called.
|
| + scoped_feature_list_.reset(new base::test::ScopedFeatureList());
|
| +}
|
| +
|
| +} // namespace testing
|
| +} // namespace variations
|
|
|