Index: components/variations/variations_http_header_provider.cc |
diff --git a/components/variations/variations_http_header_provider.cc b/components/variations/variations_http_header_provider.cc |
index 316fe521dc633ea5afc006c1676c9ea61445ee96..97f96b03e2e2a4e5d316666d19c098a9f27491a7 100644 |
--- a/components/variations/variations_http_header_provider.cc |
+++ b/components/variations/variations_http_header_provider.cc |
@@ -36,6 +36,23 @@ std::string VariationsHttpHeaderProvider::GetClientDataHeader() { |
return variation_ids_header_copy; |
} |
+std::string VariationsHttpHeaderProvider::GetVariationsString() { |
+ InitVariationIDsCacheIfNeeded(); |
+ |
+ // Construct a space-separated string with leading and trailing spaces from |
+ // the variations set. Note: The ids in it will be in sorted order per the |
+ // std::set contract. |
+ std::string ids_string = " "; |
+ { |
+ base::AutoLock scoped_lock(lock_); |
+ for (VariationID id : GetAllVariationIds()) { |
+ ids_string.append(base::IntToString(id)); |
+ ids_string.push_back(' '); |
+ } |
+ } |
+ return ids_string; |
+} |
+ |
bool VariationsHttpHeaderProvider::SetDefaultVariationIds( |
const std::string& variation_ids) { |
default_variation_ids_set_.clear(); |
@@ -127,16 +144,18 @@ void VariationsHttpHeaderProvider::InitVariationIDsCacheIfNeeded() { |
base::FieldTrial::ActiveGroups initial_groups; |
base::FieldTrialList::GetActiveFieldTrialGroups(&initial_groups); |
- for (base::FieldTrial::ActiveGroups::const_iterator it = |
- initial_groups.begin(); |
- it != initial_groups.end(); ++it) { |
- const VariationID id = GetGoogleVariationID(GOOGLE_WEB_PROPERTIES, |
- it->trial_name, it->group_name); |
+ |
+ for (const auto& entry : initial_groups) { |
+ const VariationID id = |
+ GetGoogleVariationID(GOOGLE_WEB_PROPERTIES, entry.trial_name, |
+ entry.group_name); |
if (id != EMPTY_ID) |
variation_ids_set_.insert(id); |
- const VariationID trigger_id = GetGoogleVariationID( |
- GOOGLE_WEB_PROPERTIES_TRIGGER, it->trial_name, it->group_name); |
+ const VariationID trigger_id = |
+ GetGoogleVariationID(GOOGLE_WEB_PROPERTIES_TRIGGER, entry.trial_name, |
+ entry.group_name); |
+ |
if (trigger_id != EMPTY_ID) |
variation_trigger_ids_set_.insert(trigger_id); |
} |
@@ -174,13 +193,7 @@ void VariationsHttpHeaderProvider::UpdateVariationIDsHeaderValue() { |
if (total_id_count > 20) |
return; |
- // Merge the two sets of experiment ids. |
- std::set<VariationID> all_variation_ids_set = default_variation_ids_set_; |
- for (VariationID id : variation_ids_set_) |
- all_variation_ids_set.insert(id); |
- for (VariationID id : synthetic_variation_ids_set_) |
- all_variation_ids_set.insert(id); |
- |
+ std::set<VariationID> all_variation_ids_set = GetAllVariationIds(); |
std::set<VariationID> all_trigger_ids_set = default_trigger_id_set_; |
for (VariationID id : variation_trigger_ids_set_) |
all_trigger_ids_set.insert(id); |
@@ -203,4 +216,15 @@ void VariationsHttpHeaderProvider::UpdateVariationIDsHeaderValue() { |
variation_ids_header_ = hashed; |
} |
+std::set<VariationID> VariationsHttpHeaderProvider::GetAllVariationIds() { |
+ lock_.AssertAcquired(); |
+ |
+ std::set<VariationID> all_variation_ids_set = default_variation_ids_set_; |
+ for (VariationID id : variation_ids_set_) |
+ all_variation_ids_set.insert(id); |
+ for (VariationID id : synthetic_variation_ids_set_) |
+ all_variation_ids_set.insert(id); |
+ return all_variation_ids_set; |
+} |
+ |
} // namespace variations |