Report variations in Android feedback reports.
This CL Makes the Chrome for Android feedback report mechanism
include Google web property-visible variation ids as part of the
report. This matches what's sent up by the components/feedback
implementation that's used on other platforms.
The cross-platform implementation of sending variation ids is
done in feedback_uploader_chrome.cc via the call to
VariationsHttpHeaderProvider::AppendHeaders.
BUG=530223
Review URL: https://codereview.chromium.org/1528543003
Cr-Commit-Position: refs/heads/master@{#366219}
diff --git a/components/variations/variations_http_header_provider.cc b/components/variations/variations_http_header_provider.cc
index 316fe52..97f96b0 100644
--- a/components/variations/variations_http_header_provider.cc
+++ b/components/variations/variations_http_header_provider.cc
@@ -36,6 +36,23 @@
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 @@
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 @@
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 @@
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