| 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() {
|
|
|