Index: chrome/common/variations/variations_util.cc |
diff --git a/chrome/common/variations/variations_util.cc b/chrome/common/variations/variations_util.cc |
index 93c1ed3097d4320246d52bf34ed3e6c7150528b1..423b7926bed08c8cbd1fd60974076451b667dd6a 100644 |
--- a/chrome/common/variations/variations_util.cc |
+++ b/chrome/common/variations/variations_util.cc |
@@ -12,6 +12,7 @@ |
#include "base/feature_list.h" |
#include "base/metrics/field_trial.h" |
#include "base/strings/string_split.h" |
+#include "base/strings/stringprintf.h" |
#include "chrome/common/variations/fieldtrial_testing_config.h" |
#include "components/variations/variations_associated_data.h" |
#include "net/base/escape.h" |
@@ -28,6 +29,7 @@ std::string EscapeValue(const std::string& value) { |
bool AssociateParamsFromString(const std::string& varations_string) { |
// Format: Trial1.Group1:k1/v1/k2/v2,Trial2.Group2:k1/v1/k2/v2 |
+ std::set<std::pair<std::string, std::string>> trial_groups; |
for (const base::StringPiece& experiment_group : base::SplitStringPiece( |
varations_string, ",", |
base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL)) { |
@@ -51,15 +53,22 @@ bool AssociateParamsFromString(const std::string& varations_string) { |
DLOG(ERROR) << "Param name and param value should be separated by '/'"; |
return false; |
} |
- |
+ std::string trial = EscapeValue(group_parts[0]); |
+ std::string group = EscapeValue(group_parts[1]); |
+ auto trial_group = std::make_pair(trial, group); |
+ if (trial_groups.find(trial_group) != trial_groups.end()) { |
+ DLOG(ERROR) << base::StringPrintf( |
+ "A (study, group) pair listed more than once. (%s, %s)", |
+ trial.c_str(), group.c_str()); |
+ return false; |
+ } |
+ trial_groups.insert(trial_group); |
std::map<std::string, std::string> params; |
for (size_t i = 0; i < key_values.size(); i += 2) { |
std::string key = EscapeValue(key_values[i]); |
std::string value = EscapeValue(key_values[i + 1]); |
params[key] = value; |
} |
- std::string trial = EscapeValue(group_parts[0]); |
- std::string group = EscapeValue(group_parts[1]); |
variations::AssociateVariationParams(trial, group, params); |
} |
return true; |