Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(142)

Unified Diff: components/variations/variations_params_manager.cc

Issue 2321273003: Extend VariationParamsManager to support feature associations. (Closed)
Patch Set: Last comments Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/variations/variations_params_manager.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « components/variations/variations_params_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698