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