Index: chrome/browser/instant/instant_field_trial.cc |
diff --git a/chrome/browser/instant/instant_field_trial.cc b/chrome/browser/instant/instant_field_trial.cc |
index c95c529e829b3be7a5e2519af1566976e51e4123..0e1c5d2b313e6ec8c505c7c9900828af6e786298 100644 |
--- a/chrome/browser/instant/instant_field_trial.cc |
+++ b/chrome/browser/instant/instant_field_trial.cc |
@@ -17,15 +17,17 @@ namespace { |
// Field trial IDs of the control and experiment groups. Though they are not |
// literally "const", they are set only once, in Activate() below. See the .h |
// file for what these groups represent. |
-int g_instant_control_a = 0; |
-int g_instant_control_b = 0; |
int g_instant_experiment_a = 0; |
int g_instant_experiment_b = 0; |
- |
-int g_hidden_control_a = 0; |
-int g_hidden_control_b = 0; |
int g_hidden_experiment_a = 0; |
int g_hidden_experiment_b = 0; |
+int g_silent_experiment_a = 0; |
+int g_silent_experiment_b = 0; |
+ |
+int g_uma_control_a = 0; |
+int g_uma_control_b = 0; |
+int g_all_control_a = 0; |
+int g_all_control_b = 0; |
} |
@@ -38,16 +40,18 @@ void InstantFieldTrial::Activate() { |
if (base::FieldTrialList::IsOneTimeRandomizationEnabled()) |
trial->UseOneTimeRandomization(); |
- // Each group is of size 5%. |
- g_instant_control_a = trial->AppendGroup("InstantControlA", 50); |
- g_instant_control_b = trial->AppendGroup("InstantControlB", 50); |
+ // Each group is of total size 10% (5% each for the _a and _b variants). |
g_instant_experiment_a = trial->AppendGroup("InstantExperimentA", 50); |
g_instant_experiment_b = trial->AppendGroup("InstantExperimentB", 50); |
- |
- g_hidden_control_a = trial->AppendGroup("HiddenControlA", 50); |
- g_hidden_control_b = trial->AppendGroup("HiddenControlB", 50); |
g_hidden_experiment_a = trial->AppendGroup("HiddenExperimentA", 50); |
g_hidden_experiment_b = trial->AppendGroup("HiddenExperimentB", 50); |
+ g_silent_experiment_a = trial->AppendGroup("SilentExperimentA", 50); |
+ g_silent_experiment_b = trial->AppendGroup("SilentExperimentB", 50); |
+ |
+ g_uma_control_a = trial->AppendGroup("UmaControlA", 50); |
+ g_uma_control_b = trial->AppendGroup("UmaControlB", 50); |
+ g_all_control_a = trial->AppendGroup("AllControlA", 50); |
+ g_all_control_b = trial->AppendGroup("AllControlB", 50); |
} |
// static |
@@ -60,6 +64,8 @@ InstantFieldTrial::Group InstantFieldTrial::GetGroup(Profile* profile) { |
return INSTANT_EXPERIMENT_A; |
else if (switch_value == switches::kInstantFieldTrialHidden) |
return HIDDEN_EXPERIMENT_A; |
+ else if (switch_value == switches::kInstantFieldTrialSilent) |
+ return SILENT_EXPERIMENT_A; |
else |
return INACTIVE; |
} |
@@ -70,42 +76,42 @@ InstantFieldTrial::Group InstantFieldTrial::GetGroup(Profile* profile) { |
return INACTIVE; |
} |
- if (!profile) |
- return INACTIVE; |
- |
- const PrefService* prefs = profile->GetPrefs(); |
+ const PrefService* prefs = profile ? profile->GetPrefs() : NULL; |
if (!prefs || |
prefs->GetBoolean(prefs::kInstantEnabledOnce) || |
prefs->IsManagedPreference(prefs::kInstantEnabled)) { |
return INACTIVE; |
} |
- // HIDDEN groups. |
- if (group == g_hidden_control_a) |
- return HIDDEN_CONTROL_A; |
- if (group == g_hidden_control_b) |
- return HIDDEN_CONTROL_B; |
- if (group == g_hidden_experiment_a) |
- return HIDDEN_EXPERIMENT_A; |
- if (group == g_hidden_experiment_b) |
- return HIDDEN_EXPERIMENT_B; |
- |
- // INSTANT group users must meet some extra requirements. |
+ // First, deal with the groups that don't require UMA opt-in. |
+ if (group == g_silent_experiment_a) |
+ return SILENT_EXPERIMENT_A; |
+ if (group == g_silent_experiment_b) |
+ return SILENT_EXPERIMENT_B; |
+ if (group == g_all_control_a) |
+ return ALL_CONTROL_A; |
+ if (group == g_all_control_b) |
+ return ALL_CONTROL_B; |
+ |
+ // All other groups require UMA and suggest, else bounce back to INACTIVE. |
if (profile->IsOffTheRecord() || |
!MetricsServiceHelper::IsMetricsReportingEnabled() || |
!prefs->GetBoolean(prefs::kSearchSuggestEnabled)) { |
return INACTIVE; |
} |
- // INSTANT groups. |
- if (group == g_instant_control_a) |
- return INSTANT_CONTROL_A; |
- if (group == g_instant_control_b) |
- return INSTANT_CONTROL_B; |
if (group == g_instant_experiment_a) |
return INSTANT_EXPERIMENT_A; |
if (group == g_instant_experiment_b) |
return INSTANT_EXPERIMENT_B; |
+ if (group == g_hidden_experiment_a) |
+ return HIDDEN_EXPERIMENT_A; |
+ if (group == g_hidden_experiment_b) |
+ return HIDDEN_EXPERIMENT_B; |
+ if (group == g_uma_control_a) |
+ return UMA_CONTROL_A; |
+ if (group == g_uma_control_b) |
+ return UMA_CONTROL_B; |
NOTREACHED(); |
return INACTIVE; |
@@ -115,19 +121,20 @@ InstantFieldTrial::Group InstantFieldTrial::GetGroup(Profile* profile) { |
bool InstantFieldTrial::IsExperimentGroup(Profile* profile) { |
Group group = GetGroup(profile); |
return group == INSTANT_EXPERIMENT_A || group == INSTANT_EXPERIMENT_B || |
- group == HIDDEN_EXPERIMENT_A || group == HIDDEN_EXPERIMENT_B; |
+ group == HIDDEN_EXPERIMENT_A || group == HIDDEN_EXPERIMENT_B || |
+ group == SILENT_EXPERIMENT_A || group == SILENT_EXPERIMENT_B; |
} |
// static |
-bool InstantFieldTrial::IsInstantExperiment(Profile* profile) { |
+bool InstantFieldTrial::IsHiddenExperiment(Profile* profile) { |
Group group = GetGroup(profile); |
- return group == INSTANT_EXPERIMENT_A || group == INSTANT_EXPERIMENT_B; |
+ return group == HIDDEN_EXPERIMENT_A || group == HIDDEN_EXPERIMENT_B; |
} |
// static |
-bool InstantFieldTrial::IsHiddenExperiment(Profile* profile) { |
+bool InstantFieldTrial::IsSilentExperiment(Profile* profile) { |
Group group = GetGroup(profile); |
- return group == HIDDEN_EXPERIMENT_A || group == HIDDEN_EXPERIMENT_B; |
+ return group == SILENT_EXPERIMENT_A || group == SILENT_EXPERIMENT_B; |
} |
// static |
@@ -135,15 +142,17 @@ std::string InstantFieldTrial::GetGroupName(Profile* profile) { |
switch (GetGroup(profile)) { |
case INACTIVE: return std::string(); |
- case INSTANT_CONTROL_A: return "_InstantControlA"; |
- case INSTANT_CONTROL_B: return "_InstantControlB"; |
case INSTANT_EXPERIMENT_A: return "_InstantExperimentA"; |
case INSTANT_EXPERIMENT_B: return "_InstantExperimentB"; |
- |
- case HIDDEN_CONTROL_A: return "_HiddenControlA"; |
- case HIDDEN_CONTROL_B: return "_HiddenControlB"; |
case HIDDEN_EXPERIMENT_A: return "_HiddenExperimentA"; |
case HIDDEN_EXPERIMENT_B: return "_HiddenExperimentB"; |
+ case SILENT_EXPERIMENT_A: return "_SilentExperimentA"; |
+ case SILENT_EXPERIMENT_B: return "_SilentExperimentB"; |
+ |
+ case UMA_CONTROL_A: return "_UmaControlA"; |
+ case UMA_CONTROL_B: return "_UmaControlB"; |
+ case ALL_CONTROL_A: return "_AllControlA"; |
+ case ALL_CONTROL_B: return "_AllControlB"; |
} |
NOTREACHED(); |
@@ -155,15 +164,17 @@ std::string InstantFieldTrial::GetGroupAsUrlParam(Profile* profile) { |
switch (GetGroup(profile)) { |
case INACTIVE: return std::string(); |
- case INSTANT_CONTROL_A: return "ix=ica&"; |
- case INSTANT_CONTROL_B: return "ix=icb&"; |
case INSTANT_EXPERIMENT_A: return "ix=iea&"; |
case INSTANT_EXPERIMENT_B: return "ix=ieb&"; |
- |
- case HIDDEN_CONTROL_A: return "ix=hca&"; |
- case HIDDEN_CONTROL_B: return "ix=hcb&"; |
case HIDDEN_EXPERIMENT_A: return "ix=hea&"; |
case HIDDEN_EXPERIMENT_B: return "ix=heb&"; |
+ case SILENT_EXPERIMENT_A: return "ix=sea&"; |
+ case SILENT_EXPERIMENT_B: return "ix=seb&"; |
+ |
+ case UMA_CONTROL_A: return "ix=uca&"; |
+ case UMA_CONTROL_B: return "ix=ucb&"; |
+ case ALL_CONTROL_A: return "ix=aca&"; |
+ case ALL_CONTROL_B: return "ix=acb&"; |
} |
NOTREACHED(); |