| Index: chrome/browser/omnibox/omnibox_field_trial.cc
|
| diff --git a/chrome/browser/omnibox/omnibox_field_trial.cc b/chrome/browser/omnibox/omnibox_field_trial.cc
|
| index 09c2d1a72638da218e1c89c055ff345124d21b2d..83b9143b73f6ac2e006944d6bfd49dc5a302a5c9 100644
|
| --- a/chrome/browser/omnibox/omnibox_field_trial.cc
|
| +++ b/chrome/browser/omnibox/omnibox_field_trial.cc
|
| @@ -22,7 +22,10 @@ const char kHUPCreateShorterMatchFieldTrialName[] =
|
| "OmniboxHUPCreateShorterMatch";
|
| const char kStopTimerFieldTrialName[] = "OmniboxStopTimer";
|
| const char kShortcutsScoringFieldTrialName[] = "OmniboxShortcutsScoring";
|
| -const char kSearchHistoryFieldTrialName[] = "OmniboxSearchHistory";
|
| +const char kBundledExperimentFieldTrialName[] = "OmniboxBundledExperimentV1";
|
| +
|
| +// Rule names used by the bundled experiment.
|
| +const char kSearchHistoryRule[] = "SearchHistory";
|
|
|
| // The autocomplete dynamic field trial name prefix. Each field trial is
|
| // configured dynamically and is retrieved automatically by Chrome during
|
| @@ -218,12 +221,53 @@ bool OmniboxFieldTrial::ShortcutsScoringMaxRelevance(int* max_relevance) {
|
| return true;
|
| }
|
|
|
| -bool OmniboxFieldTrial::SearchHistoryPreventInlining() {
|
| - return (base::FieldTrialList::FindFullName(kSearchHistoryFieldTrialName) ==
|
| - "PreventInlining");
|
| +bool OmniboxFieldTrial::SearchHistoryPreventInlining(
|
| + AutocompleteInput::PageClassification current_page_classification) {
|
| + return OmniboxFieldTrial::GetValueForRuleInContext(
|
| + kSearchHistoryRule, current_page_classification) == "PreventInlining";
|
| +}
|
| +
|
| +bool OmniboxFieldTrial::SearchHistoryDisable(
|
| + AutocompleteInput::PageClassification current_page_classification) {
|
| + return OmniboxFieldTrial::GetValueForRuleInContext(
|
| + kSearchHistoryRule, current_page_classification) == "Disable";
|
| }
|
|
|
| -bool OmniboxFieldTrial::SearchHistoryDisable() {
|
| - return (base::FieldTrialList::FindFullName(kSearchHistoryFieldTrialName) ==
|
| - "Disable");
|
| +// Background and implementation details:
|
| +//
|
| +// Each experiment group in any field trial can come with an optional set of
|
| +// parameters (key-value pairs). In the bundled omnibox experiment
|
| +// (kBundledExperimentFieldTrialName), each experiment group comes with a
|
| +// list of parameters in the form:
|
| +// key=<Rule>:<AutocompleteInput::PageClassification (as an int)>
|
| +// value=<arbitrary string>
|
| +// The AutocompleteInput::PageClassification can also be "*", which means
|
| +// this rule applies in all page classification contexts.
|
| +// One example parameter is
|
| +// key=SearchHistory:6
|
| +// value=PreventInlining
|
| +// This means in page classification context 6 (a search result page doing
|
| +// search term replacement), the SearchHistory experiment should
|
| +// PreventInlining.
|
| +//
|
| +// In short, this function tries to find the value associated with key
|
| +// |rule|:|page_classification|, failing that it looks up |rule|:*,
|
| +// and failing that it returns the empty string.
|
| +std::string OmniboxFieldTrial::GetValueForRuleInContext(
|
| + const std::string& rule,
|
| + AutocompleteInput::PageClassification page_classification) {
|
| + std::map<std::string, std::string> params;
|
| + if (!chrome_variations::GetVariationParams(kBundledExperimentFieldTrialName,
|
| + ¶ms)) {
|
| + return std::string();
|
| + }
|
| + // Look up rule in this exact context.
|
| + std::map<std::string, std::string>::iterator it =
|
| + params.find(rule + ":" + base::IntToString(
|
| + static_cast<int>(page_classification)));
|
| + if (it != params.end())
|
| + return it->second;
|
| + // Look up rule in the global context.
|
| + it = params.find(rule + ":*");
|
| + return (it != params.end()) ? it->second : std::string();
|
| }
|
|
|