Index: chrome/browser/autocomplete/autocomplete_field_trial.cc |
diff --git a/chrome/browser/autocomplete/autocomplete_field_trial.cc b/chrome/browser/autocomplete/autocomplete_field_trial.cc |
index 08e5410129479853e04e27d4825e3c719939a836..12c3f001d0213b450b6a2492a13c9d107aed59f5 100644 |
--- a/chrome/browser/autocomplete/autocomplete_field_trial.cc |
+++ b/chrome/browser/autocomplete/autocomplete_field_trial.cc |
@@ -105,10 +105,10 @@ const base::FieldTrial::Probability |
// Field trial IDs. |
// Though they are not literally "const", they are set only once, in |
-// Activate() below. |
+// ActivateStaticTrials() below. |
// Whether the static field trials have been initialized by |
-// ActivateStaticTrials method. |
+// ActivateStaticTrials() method. |
bool static_field_trials_initialized = false; |
// Field trial ID for the disallow-inline History Quick Provider |
@@ -137,8 +137,14 @@ int hqp_only_count_matches_at_word_boundaries_experiment_group = 0; |
// experiment group. |
int hqp_use_cursor_position_experiment_group = 0; |
+// Concatenates the autocomplete dynamic field trial prefix with a field trial |
+// ID to form a complete autocomplete field trial name. |
+std::string DynamicFieldTrialName(int id) { |
+ return base::StringPrintf("%s%d", kAutocompleteDynamicFieldTrialPrefix, id); |
} |
+} // namespace |
+ |
void AutocompleteFieldTrial::ActivateStaticTrials() { |
DCHECK(!static_field_trials_initialized); |
@@ -261,11 +267,40 @@ void AutocompleteFieldTrial::ActivateStaticTrials() { |
} |
void AutocompleteFieldTrial::ActivateDynamicTrials() { |
- // Initialize all autocomplete dynamic field trials. |
+ // Initialize all autocomplete dynamic field trials. This method may be |
+ // called multiple times. |
+ for (int i = 0; i < kMaxAutocompleteDynamicFieldTrials; ++i) |
+ base::FieldTrialList::FindValue(DynamicFieldTrialName(i)); |
+} |
+ |
+int AutocompleteFieldTrial::GetDisabledProviderTypes() { |
+ // Make sure that Autocomplete dynamic field trials are activated. It's OK to |
+ // call this method multiple times. |
+ ActivateDynamicTrials(); |
+ |
+ // We assume that each group may contain a substring |
+ // "DisabledProviders_<mask>" where "mask" is a bitmap of disabled provider |
+ // types (AutocompleteProvider::Type). |
+ int provider_types = 0; |
for (int i = 0; i < kMaxAutocompleteDynamicFieldTrials; ++i) { |
- base::FieldTrialList::FindValue( |
- base::StringPrintf("%s%d", kAutocompleteDynamicFieldTrialPrefix, i)); |
+ std::string group_name = base::FieldTrialList::FindFullName( |
+ DynamicFieldTrialName(i)); |
+ if (!group_name.empty()) { |
+ const char kDisabledProviders[] = "DisabledProviders_"; |
+ const size_t pos = group_name.find(kDisabledProviders); |
+ if (pos == std::string::npos) |
+ continue; |
+ int types = 0; |
+ // It's OK to ignore the result, because we don't care about perfect |
+ // conversions. |
+ base::StringToInt(base::StringPiece( |
+ group_name.substr(pos + strlen(kDisabledProviders))), &types); |
+ if (types == 0) |
+ LOG(WARNING) << "Expecting a non-zero bitmap; group = " << group_name; |
+ provider_types |= types; |
+ } |
} |
+ return provider_types; |
} |
bool AutocompleteFieldTrial::InDisallowInlineHQPFieldTrial() { |