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

Side by Side Diff: chrome/browser/ui/webui/sync_promo/sync_promo_trial.cc

Issue 9730021: Remove experimental sync promo layouts (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: a Created 8 years, 9 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/webui/sync_promo/sync_promo_trial.h" 5 #include "chrome/browser/ui/webui/sync_promo/sync_promo_trial.h"
6 6
7 #include "base/command_line.h"
8 #include "base/metrics/field_trial.h"
9 #include "base/string_number_conversions.h"
10 #include "base/string_util.h"
11 #include "chrome/browser/google/google_util.h"
12 #include "chrome/browser/metrics/metrics_service.h"
13 #include "chrome/browser/prefs/pref_service.h"
14 #include "chrome/browser/profiles/profile.h"
15 #include "chrome/browser/ui/webui/sync_promo/sync_promo_ui.h"
16 #include "chrome/common/chrome_switches.h"
17 #include "chrome/common/chrome_version_info.h"
18 #include "content/public/browser/web_contents.h"
19 #include "content/public/browser/web_ui.h"
20 #include "grit/generated_resources.h"
21
22 namespace {
23
24 const char kLayoutExperimentTrialName[] = "SyncPromoLayoutExperiment";
25
26 enum LayoutExperimentType {
27 LAYOUT_EXPERIMENT_DEFAULT = 0,
28 LAYOUT_EXPERIMENT_DEVICES,
29 LAYOUT_EXPERIMENT_VERBOSE,
30 LAYOUT_EXPERIMENT_SIMPLE,
31 LAYOUT_EXPERIMENT_NONE,
32 LAYOUT_EXPERIMENT_DIALOG,
33 LAYOUT_EXPERIMENT_BOUNDARY,
34 };
35
36 // Flag to make sure sync_promo_trial::Activate() has been called.
37 bool sync_promo_trial_initialized;
38
39 // Checks if a sync promo layout experiment is active. If it is active then the
40 // layout type is return in |type|.
41 bool GetActiveLayoutExperiment(LayoutExperimentType* type) {
42 DCHECK(type);
43
44 int version = 0;
45 if (base::StringToInt(CommandLine::ForCurrentProcess()->
46 GetSwitchValueASCII(switches::kSyncPromoVersion), &version)) {
47 switch (version) {
48 case SyncPromoUI::VERSION_DEFAULT:
49 *type = LAYOUT_EXPERIMENT_DEFAULT;
50 return true;
51 case SyncPromoUI::VERSION_DEVICES:
52 *type = LAYOUT_EXPERIMENT_DEVICES;
53 return true;
54 case SyncPromoUI::VERSION_VERBOSE:
55 *type = LAYOUT_EXPERIMENT_VERBOSE;
56 return true;
57 case SyncPromoUI::VERSION_SIMPLE:
58 *type = LAYOUT_EXPERIMENT_SIMPLE;
59 return true;
60 case SyncPromoUI::VERSION_DIALOG:
61 *type = LAYOUT_EXPERIMENT_DIALOG;
62 return true;
63 default:
64 return false;
65 }
66 }
67
68 if (chrome::VersionInfo::GetChannel() ==
69 chrome::VersionInfo::CHANNEL_STABLE) {
70 std::string brand;
71 if (!google_util::GetBrand(&brand))
72 return false;
73
74 if (brand == "GGRG" || brand == "CHCG")
75 *type = LAYOUT_EXPERIMENT_DEFAULT;
76 else if (brand == "GGRH" || brand == "CHCH")
77 *type = LAYOUT_EXPERIMENT_DEVICES;
78 else if (brand == "GGRI" || brand == "CHCI")
79 *type = LAYOUT_EXPERIMENT_VERBOSE;
80 else if (brand == "GGRJ" || brand == "CHCJ")
81 *type = LAYOUT_EXPERIMENT_SIMPLE;
82 else if (brand == "GGRL" || brand == "CHCL")
83 *type = LAYOUT_EXPERIMENT_NONE;
84 else if (brand == "GGRK" || brand == "CHCK")
85 *type = LAYOUT_EXPERIMENT_DIALOG;
86 else
87 return false;
88 } else {
89 if (!base::FieldTrialList::TrialExists(kLayoutExperimentTrialName))
90 return false;
91 int value = base::FieldTrialList::FindValue(kLayoutExperimentTrialName) -
92 base::FieldTrial::kDefaultGroupNumber;
93 *type = static_cast<LayoutExperimentType>(value);
94 }
95
96 return true;
97 }
98
99 } // namespace
100
101 namespace sync_promo_trial { 7 namespace sync_promo_trial {
102 8
103 void Activate() {
104 DCHECK(!sync_promo_trial_initialized);
105 sync_promo_trial_initialized = true;
106
107 // For stable builds we'll use brand codes to enroll uesrs into experiments.
108 // For dev and beta we don't have brand codes so we randomly enroll users.
109 if (chrome::VersionInfo::GetChannel() !=
110 chrome::VersionInfo::CHANNEL_STABLE) {
111 #if defined(GOOGLE_CHROME_BUILD)
112 // Create a field trial that expires in August 8, 2012. It contains 6 groups
113 // with each group having an equal chance of enrollment.
114 scoped_refptr<base::FieldTrial> trial(new base::FieldTrial(
115 kLayoutExperimentTrialName, 6, "default", 2012, 8, 1));
116 if (base::FieldTrialList::IsOneTimeRandomizationEnabled())
117 trial->UseOneTimeRandomization();
118 trial->AppendGroup("", 1);
119 trial->AppendGroup("", 1);
120 trial->AppendGroup("", 1);
121 trial->AppendGroup("", 1);
122 trial->AppendGroup("", 1);
123 #endif
124 }
125 }
126
127 StartupOverride GetStartupOverrideForCurrentTrial() {
128 DCHECK(sync_promo_trial_initialized);
129
130 LayoutExperimentType type;
131 if (GetActiveLayoutExperiment(&type)) {
132 return type == LAYOUT_EXPERIMENT_NONE ? STARTUP_OVERRIDE_HIDE :
133 STARTUP_OVERRIDE_SHOW;
134 }
135 return STARTUP_OVERRIDE_NONE;
136 }
137
138 void RecordUserShownPromo(content::WebUI* web_ui) { 9 void RecordUserShownPromo(content::WebUI* web_ui) {
139 DCHECK(sync_promo_trial_initialized); 10 // TODO(sail): Add new UMA stats here.
140
141 LayoutExperimentType type;
142 if (GetActiveLayoutExperiment(&type)) {
143 bool is_at_startup = SyncPromoUI::GetIsLaunchPageForSyncPromoURL(
144 web_ui->GetWebContents()->GetURL());
145 if (is_at_startup) {
146 DCHECK(SyncPromoUI::HasShownPromoAtStartup(Profile::FromWebUI(web_ui)));
147 UMA_HISTOGRAM_ENUMERATION("SyncPromo.ShownPromoWithLayoutExpAtStartup",
148 type, LAYOUT_EXPERIMENT_BOUNDARY);
149 } else {
150 UMA_HISTOGRAM_ENUMERATION("SyncPromo.ShownPromoWithLayoutExp",
151 type, LAYOUT_EXPERIMENT_BOUNDARY);
152 }
153 }
154 }
155
156 void RecordSyncPromoSuppressedForCurrentTrial() {
157 DCHECK(sync_promo_trial_initialized);
158 LayoutExperimentType type = LAYOUT_EXPERIMENT_DEFAULT;
159 DCHECK(GetActiveLayoutExperiment(&type) && type == LAYOUT_EXPERIMENT_NONE);
160 // Avoid warning about unused variable in release builds.
161 (void)type;
162 UMA_HISTOGRAM_ENUMERATION("SyncPromo.ShownPromoWithLayoutExpAtStartup",
163 LAYOUT_EXPERIMENT_NONE, LAYOUT_EXPERIMENT_BOUNDARY);
164 } 11 }
165 12
166 void RecordUserSignedIn(content::WebUI* web_ui) { 13 void RecordUserSignedIn(content::WebUI* web_ui) {
167 DCHECK(sync_promo_trial_initialized); 14 // TODO(sail): Add new UMA stats here.
168
169 LayoutExperimentType type;
170 if (GetActiveLayoutExperiment(&type)) {
171 bool is_at_startup = SyncPromoUI::GetIsLaunchPageForSyncPromoURL(
172 web_ui->GetWebContents()->GetURL());
173 if (is_at_startup) {
174 DCHECK(SyncPromoUI::HasShownPromoAtStartup(Profile::FromWebUI(web_ui)));
175 UMA_HISTOGRAM_ENUMERATION("SyncPromo.SignedInWithLayoutExpAtStartup",
176 type, LAYOUT_EXPERIMENT_BOUNDARY);
177 } else {
178 UMA_HISTOGRAM_ENUMERATION("SyncPromo.SignedInWithLayoutExp",
179 type, LAYOUT_EXPERIMENT_BOUNDARY);
180 }
181 }
182 }
183
184 bool GetSyncPromoVersionForCurrentTrial(SyncPromoUI::Version* version) {
185 DCHECK(sync_promo_trial_initialized);
186 DCHECK(version);
187
188 LayoutExperimentType type;
189 if (!GetActiveLayoutExperiment(&type))
190 return false;
191
192 switch (type) {
193 case LAYOUT_EXPERIMENT_DEFAULT:
194 *version = SyncPromoUI::VERSION_DEFAULT;
195 return true;
196 case LAYOUT_EXPERIMENT_DEVICES:
197 *version = SyncPromoUI::VERSION_DEVICES;
198 return true;
199 case LAYOUT_EXPERIMENT_VERBOSE:
200 *version = SyncPromoUI::VERSION_VERBOSE;
201 return true;
202 case LAYOUT_EXPERIMENT_SIMPLE:
203 *version = SyncPromoUI::VERSION_SIMPLE;
204 return true;
205 case LAYOUT_EXPERIMENT_DIALOG:
206 *version = SyncPromoUI::VERSION_DIALOG;
207 return true;
208 default:
209 return false;
210 }
211 } 15 }
212 16
213 } // namespace sync_promo_trial 17 } // namespace sync_promo_trial
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698