diff options
author | hfung@chromium.org <hfung@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-05 14:21:54 +0000 |
---|---|---|
committer | hfung@chromium.org <hfung@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-05 14:21:54 +0000 |
commit | 360a2f116c0b2c9f6ce4e4e414e5dfdbf8b41bac (patch) | |
tree | 6bcaa7d1872f52d6f82dce2c4f08456676ee31f6 /chrome/browser/omnibox | |
parent | 99bcf0225b93f9a2820a7c1f5fd4e9b1ad9f2923 (diff) | |
download | chromium_src-360a2f116c0b2c9f6ce4e4e414e5dfdbf8b41bac.zip chromium_src-360a2f116c0b2c9f6ce4e4e414e5dfdbf8b41bac.tar.gz chromium_src-360a2f116c0b2c9f6ce4e4e414e5dfdbf8b41bac.tar.bz2 |
Don't demote top match for certain match types.
BUG=
Review URL: https://codereview.chromium.org/55413002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@232979 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/omnibox')
-rw-r--r-- | chrome/browser/omnibox/omnibox_field_trial.cc | 29 | ||||
-rw-r--r-- | chrome/browser/omnibox/omnibox_field_trial.h | 10 | ||||
-rw-r--r-- | chrome/browser/omnibox/omnibox_field_trial_unittest.cc | 28 |
3 files changed, 66 insertions, 1 deletions
diff --git a/chrome/browser/omnibox/omnibox_field_trial.cc b/chrome/browser/omnibox/omnibox_field_trial.cc index e2c7144..6b9510b 100644 --- a/chrome/browser/omnibox/omnibox_field_trial.cc +++ b/chrome/browser/omnibox/omnibox_field_trial.cc @@ -254,7 +254,7 @@ void OmniboxFieldTrial::GetDemotionsByType( for (base::StringPairs::const_iterator it = kv_pairs.begin(); it != kv_pairs.end(); ++it) { // This is a best-effort conversion; we trust the hand-crafted parameters - // downloaded from the server to be perfect. There's no need for handle + // downloaded from the server to be perfect. There's no need to handle // errors smartly. int k, v; base::StringToInt(it->first, &k); @@ -265,6 +265,32 @@ void OmniboxFieldTrial::GetDemotionsByType( } } +OmniboxFieldTrial::UndemotableTopMatchTypes +OmniboxFieldTrial::GetUndemotableTopTypes( + AutocompleteInput::PageClassification current_page_classification) { + UndemotableTopMatchTypes undemotable_types; + const std::string types_rule = + OmniboxFieldTrial::GetValueForRuleInContext( + kUndemotableTopTypeRule, + current_page_classification); + // The value of the UndemotableTopTypes rule is a comma-separated list of + // AutocompleteMatchType::Type enums represented as an integer. The + // DemoteByType rule does not apply to the top match if the type of the top + // match is in this list. + std::vector<std::string> types; + base::SplitString(types_rule, ',', &types); + for (std::vector<std::string>::const_iterator it = types.begin(); + it != types.end(); ++it) { + // This is a best-effort conversion; we trust the hand-crafted parameters + // downloaded from the server to be perfect. There's no need to handle + // errors smartly. + int t; + base::StringToInt(*it, &t); + undemotable_types.insert(static_cast<AutocompleteMatchType::Type>(t)); + } + return undemotable_types; +} + bool OmniboxFieldTrial::ReorderForLegalDefaultMatch( AutocompleteInput::PageClassification current_page_classification) { return OmniboxFieldTrial::GetValueForRuleInContext( @@ -278,6 +304,7 @@ const char OmniboxFieldTrial::kShortcutsScoringMaxRelevanceRule[] = "ShortcutsScoringMaxRelevance"; const char OmniboxFieldTrial::kSearchHistoryRule[] = "SearchHistory"; const char OmniboxFieldTrial::kDemoteByTypeRule[] = "DemoteByType"; +const char OmniboxFieldTrial::kUndemotableTopTypeRule[] = "UndemotableTopTypes"; const char OmniboxFieldTrial::kReorderForLegalDefaultMatchRule[] = "ReorderForLegalDefaultMatch"; const char OmniboxFieldTrial::kReorderForLegalDefaultMatchRuleEnabled[] = diff --git a/chrome/browser/omnibox/omnibox_field_trial.h b/chrome/browser/omnibox/omnibox_field_trial.h index 50b8701..1c9f80e 100644 --- a/chrome/browser/omnibox/omnibox_field_trial.h +++ b/chrome/browser/omnibox/omnibox_field_trial.h @@ -6,6 +6,7 @@ #define CHROME_BROWSER_OMNIBOX_OMNIBOX_FIELD_TRIAL_H_ #include <map> +#include <set> #include <string> #include <vector> @@ -22,6 +23,9 @@ class OmniboxFieldTrial { // given number. Omitted types are assumed to have multipliers of 1.0. typedef std::map<AutocompleteMatchType::Type, float> DemotionMultipliers; + // A set of types that should not be demoted when they are the top match. + typedef std::set<AutocompleteMatchType::Type> UndemotableTopMatchTypes; + // Creates the static field trial groups. // *** MUST NOT BE CALLED MORE THAN ONCE. *** static void ActivateStaticTrials(); @@ -148,6 +152,11 @@ class OmniboxFieldTrial { AutocompleteInput::PageClassification current_page_classification, DemotionMultipliers* demotions_by_type); + // Get the set of types that should not be demoted if they are the top + // match. + static UndemotableTopMatchTypes GetUndemotableTopTypes( + AutocompleteInput::PageClassification current_page_classification); + // --------------------------------------------------------- // For the ReorderForLegalDefaultMatch experiment that's part of the // bundled omnibox field trial. @@ -168,6 +177,7 @@ class OmniboxFieldTrial { static const char kShortcutsScoringMaxRelevanceRule[]; static const char kSearchHistoryRule[]; static const char kDemoteByTypeRule[]; + static const char kUndemotableTopTypeRule[]; static const char kReorderForLegalDefaultMatchRule[]; // Rule values. static const char kReorderForLegalDefaultMatchRuleEnabled[]; diff --git a/chrome/browser/omnibox/omnibox_field_trial_unittest.cc b/chrome/browser/omnibox/omnibox_field_trial_unittest.cc index 82522b6..edf222b 100644 --- a/chrome/browser/omnibox/omnibox_field_trial_unittest.cc +++ b/chrome/browser/omnibox/omnibox_field_trial_unittest.cc @@ -188,6 +188,34 @@ TEST_F(OmniboxFieldTrialTest, GetDemotionsByTypeWithFallback) { VerifyDemotion(demotions_by_type, AutocompleteMatchType::HISTORY_URL, 0.25); } +TEST_F(OmniboxFieldTrialTest, GetUndemotableTopTypes) { + { + std::map<std::string, std::string> params; + const std::string rule(OmniboxFieldTrial::kUndemotableTopTypeRule); + params[rule + ":1:*"] = "1,3"; + params[rule + ":3:*"] = "5"; + params[rule + ":*:*"] = "2"; + ASSERT_TRUE(chrome_variations::AssociateVariationParams( + OmniboxFieldTrial::kBundledExperimentFieldTrialName, "A", params)); + } + base::FieldTrialList::CreateFieldTrial( + OmniboxFieldTrial::kBundledExperimentFieldTrialName, "A"); + OmniboxFieldTrial::UndemotableTopMatchTypes undemotable_types; + undemotable_types = OmniboxFieldTrial::GetUndemotableTopTypes( + AutocompleteInput::NEW_TAB_PAGE); + ASSERT_EQ(2u, undemotable_types.size()); + ASSERT_EQ(1u, undemotable_types.count(AutocompleteMatchType::HISTORY_URL)); + ASSERT_EQ(1u, undemotable_types.count(AutocompleteMatchType::HISTORY_BODY)); + undemotable_types = OmniboxFieldTrial::GetUndemotableTopTypes( + AutocompleteInput::HOME_PAGE); + ASSERT_EQ(1u, undemotable_types.size()); + ASSERT_EQ(1u, undemotable_types.count(AutocompleteMatchType::NAVSUGGEST)); + undemotable_types = OmniboxFieldTrial::GetUndemotableTopTypes( + AutocompleteInput::BLANK); + ASSERT_EQ(1u, undemotable_types.size()); + ASSERT_EQ(1u, undemotable_types.count(AutocompleteMatchType::HISTORY_TITLE)); +} + TEST_F(OmniboxFieldTrialTest, GetValueForRuleInContext) { // This test starts with Instant Extended off (the default state), then // enables Instant Extended and tests again on the same rules. |