1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_COMMON_METRICS_VARIATIONS_VARIATIONS_UTIL_H_ 6#define CHROME_COMMON_METRICS_VARIATIONS_VARIATIONS_UTIL_H_ 7 8#include <vector> 9 10#include "base/metrics/field_trial.h" 11#include "base/strings/string16.h" 12#include "chrome/common/metrics/variations/variations_associated_data.h" 13 14namespace chrome_variations { 15 16// Fills the supplied vector |name_group_ids| (which must be empty when called) 17// with unique ActiveGroupIds for each Field Trial that has a chosen group. 18// Field Trials for which a group has not been chosen yet are NOT returned in 19// this list. 20void GetFieldTrialActiveGroupIds(std::vector<ActiveGroupId>* name_group_ids); 21 22// Fills the supplied vector |output| (which must be empty when called) with 23// unique string representations of ActiveGroupIds for each Field Trial that 24// has a chosen group. The strings are formatted as "<TrialName>-<GroupName>", 25// with the names as hex strings. Field Trials for which a group has not been 26// chosen yet are NOT returned in this list. 27void GetFieldTrialActiveGroupIdsAsStrings(std::vector<string16>* output); 28 29// Generates variation chunks from |variation_strings| that are suitable for 30// crash reporting. 31void GenerateVariationChunks(const std::vector<string16>& variation_strings, 32 std::vector<string16>* chunks); 33 34// Get the current set of chosen FieldTrial groups (aka variations) and send 35// them to the child process logging module so it can save it for crash dumps. 36void SetChildProcessLoggingVariationList(); 37 38// Takes the list of active groups and builds the label for the ones that have 39// Google Update VariationID associated with them. This will return an empty 40// string if there are no such groups. 41string16 BuildGoogleUpdateExperimentLabel( 42 const base::FieldTrial::ActiveGroups& active_groups); 43 44// Creates a final combined experiment labels string with |variation_labels| 45// and |other_labels|, appropriately appending a separator based on their 46// contents. It is assumed that |variation_labels| and |other_labels| do not 47// have leading or trailing separators. 48string16 CombineExperimentLabels(const string16& variation_labels, 49 const string16& other_labels); 50 51// Takes the value of experiment_labels from the registry and returns a valid 52// experiment_labels string value containing only the labels that are not 53// associated with Chrome Variations. 54string16 ExtractNonVariationLabels(const string16& labels); 55 56// Expose some functions for testing. These functions just wrap functionality 57// that is implemented above. 58namespace testing { 59 60// Clears all of the mapped associations. 61void ClearAllVariationIDs(); 62 63void TestGetFieldTrialActiveGroupIds( 64 const base::FieldTrial::ActiveGroups& active_groups, 65 std::vector<ActiveGroupId>* name_group_ids); 66 67} // namespace testing 68 69} // namespace chrome_variations 70 71#endif // CHROME_COMMON_METRICS_VARIATIONS_VARIATIONS_UTIL_H_ 72