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

Unified Diff: components/variations/variations_params_manager.cc

Issue 2321273003: Extend VariationParamsManager to support feature associations. (Closed)
Patch Set: Alexei's comments Created 4 years, 3 months 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
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..6bebb56a9312e0a25eab566e68870bf5786a60d3
--- /dev/null
+++ b/components/variations/variations_params_manager.cc
@@ -0,0 +1,73 @@
+// 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 {
+
Alexei Svitkine (slow) 2016/09/12 16:54:13 Nit: Remove empty line
jkrcal 2016/09/23 13:40:09 Done.
+namespace testing {
+
+namespace {
+
+const char kGroupTesting[] = "Testing";
+
+} // 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,
+ const std::map<std::string, std::string>& param_features)
+ : VariationParamsManager() {
+ SetVariationParams(trial_name, param_values, param_features);
+}
+
+VariationParamsManager::~VariationParamsManager() {
+ ClearAllVariationIDs();
+ ClearAllVariationParams();
+}
+
+void VariationParamsManager::SetVariationParams(
+ const std::string& trial_name,
+ const std::map<std::string, std::string>& param_values,
+ const std::map<std::string, std::string>& param_features) {
+ variations::AssociateVariationParams(trial_name, kGroupTesting, param_values);
+ base::FieldTrial* field_trial =
+ base::FieldTrialList::CreateFieldTrial(trial_name, kGroupTesting);
+
+ std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList);
+ for (auto& pair : param_features) {
+ feature_list->RegisterFieldTrialOverride(
+ pair.second /* name of the feature */,
+ 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
+
Alexei Svitkine (slow) 2016/09/12 16:54:13 Nit: Remove empty line
jkrcal 2016/09/23 13:40:09 Done.
+} // namespace variations

Powered by Google App Engine
This is Rietveld 408576698