Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(817)

Side by Side Diff: chrome/common/metrics/variations/experiment_labels.cc

Issue 292663009: Move chrome/common/metrics/variations to chrome/common/variations. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2013 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 #include "chrome/common/metrics/variations/experiment_labels.h"
6
7 #include "base/logging.h"
8 #include "base/strings/string_number_conversions.h"
9 #include "base/strings/string_split.h"
10 #include "base/strings/string_util.h"
11 #include "base/strings/utf_string_conversions.h"
12 #include "chrome/installer/util/google_update_experiment_util.h"
13 #include "components/variations/variations_associated_data.h"
14
15 namespace chrome_variations {
16
17 namespace {
18
19 const char kVariationPrefix[] = "CrVar";
20
21 // This method builds a single experiment label for a Chrome Variation,
22 // including a timestamp that is a year in the future from |current_time|. Since
23 // multiple headers can be transmitted, |count| is a number that is appended
24 // after the label key to differentiate the labels.
25 base::string16 CreateSingleExperimentLabel(int count, VariationID id,
26 const base::Time& current_time) {
27 // Build the parts separately so they can be validated.
28 const base::string16 key =
29 base::ASCIIToUTF16(kVariationPrefix) + base::IntToString16(count);
30 DCHECK_LE(key.size(), 8U);
31 const base::string16 value = base::IntToString16(id);
32 DCHECK_LE(value.size(), 8U);
33 base::string16 label(key);
34 label += base::ASCIIToUTF16("=");
35 label += value;
36 label += base::ASCIIToUTF16("|");
37 label += installer::BuildExperimentDateString(current_time);
38 return label;
39 }
40
41 } // namespace
42
43 base::string16 BuildGoogleUpdateExperimentLabel(
44 const base::FieldTrial::ActiveGroups& active_groups) {
45 base::string16 experiment_labels;
46 int counter = 0;
47
48 const base::Time current_time(base::Time::Now());
49
50 // Find all currently active VariationIDs associated with Google Update.
51 for (base::FieldTrial::ActiveGroups::const_iterator it =
52 active_groups.begin(); it != active_groups.end(); ++it) {
53 const VariationID id = GetGoogleVariationID(GOOGLE_UPDATE_SERVICE,
54 it->trial_name, it->group_name);
55
56 if (id == EMPTY_ID)
57 continue;
58
59 if (!experiment_labels.empty()) {
60 experiment_labels +=
61 base::ASCIIToUTF16(google_update::kExperimentLabelSep);
62 }
63 experiment_labels += CreateSingleExperimentLabel(++counter, id,
64 current_time);
65 }
66
67 return experiment_labels;
68 }
69
70 base::string16 ExtractNonVariationLabels(const base::string16& labels) {
71 const base::string16 separator =
72 base::ASCIIToUTF16(google_update::kExperimentLabelSep);
73 base::string16 non_variation_labels;
74
75 // First, split everything by the label separator.
76 std::vector<base::string16> entries;
77 base::SplitStringUsingSubstr(labels, separator, &entries);
78
79 // For each label, keep the ones that do not look like a Variations label.
80 for (std::vector<base::string16>::const_iterator it = entries.begin();
81 it != entries.end(); ++it) {
82 if (it->empty() ||
83 StartsWith(*it, base::ASCIIToUTF16(kVariationPrefix), false)) {
84 continue;
85 }
86
87 // Dump the whole thing, including the timestamp.
88 if (!non_variation_labels.empty())
89 non_variation_labels += separator;
90 non_variation_labels += *it;
91 }
92
93 return non_variation_labels;
94 }
95
96 base::string16 CombineExperimentLabels(const base::string16& variation_labels,
97 const base::string16& other_labels) {
98 const base::string16 separator =
99 base::ASCIIToUTF16(google_update::kExperimentLabelSep);
100 DCHECK(!StartsWith(variation_labels, separator, false));
101 DCHECK(!EndsWith(variation_labels, separator, false));
102 DCHECK(!StartsWith(other_labels, separator, false));
103 DCHECK(!EndsWith(other_labels, separator, false));
104 // Note that if either label is empty, a separator is not necessary.
105 base::string16 combined_labels = other_labels;
106 if (!other_labels.empty() && !variation_labels.empty())
107 combined_labels += separator;
108 combined_labels += variation_labels;
109 return combined_labels;
110 }
111
112 } // namespace chrome_variations
OLDNEW
« no previous file with comments | « chrome/common/metrics/variations/experiment_labels.h ('k') | chrome/common/metrics/variations/experiment_labels_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698