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 0c6c2a5ef43e7e3bf0e0a6e9b32c45ed4bf81b1f..f87366c64f68c728ad907c45a04e3e1cb6d413d8 100644 |
--- a/chrome/browser/autocomplete/autocomplete_field_trial.cc |
+++ b/chrome/browser/autocomplete/autocomplete_field_trial.cc |
@@ -7,6 +7,7 @@ |
#include <string> |
#include "base/metrics/field_trial.h" |
+#include "base/string_util.h" |
#include "base/stringprintf.h" |
#include "base/strings/string_number_conversions.h" |
#include "chrome/common/metrics/metrics_util.h" |
@@ -105,10 +106,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 +138,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 +268,38 @@ 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(); |
+ |
+ // Look for group names in form of "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)); |
+ const char kDisabledProviders[] = "DisabledProviders_"; |
+ if (!StartsWithASCII(group_name, kDisabledProviders, true)) |
+ continue; |
+ int types = 0; |
+ if (!base::StringToInt(base::StringPiece( |
+ group_name.substr(strlen(kDisabledProviders))), &types)) { |
+ LOG(WARNING) << "Malformed DisabledProviders string: " << group_name; |
+ continue; |
+ } |
+ if (types == 0) |
+ LOG(WARNING) << "Expecting a non-zero bitmap; group = " << group_name; |
+ else |
+ provider_types |= types; |
} |
+ return provider_types; |
} |
bool AutocompleteFieldTrial::InDisallowInlineHQPFieldTrial() { |