Index: chrome/browser/omnibox/omnibox_field_trial.h |
diff --git a/chrome/browser/omnibox/omnibox_field_trial.h b/chrome/browser/omnibox/omnibox_field_trial.h |
deleted file mode 100644 |
index 0dc26a1142df40b2187ae37dd5d204c47a8dcc70..0000000000000000000000000000000000000000 |
--- a/chrome/browser/omnibox/omnibox_field_trial.h |
+++ /dev/null |
@@ -1,347 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef CHROME_BROWSER_OMNIBOX_OMNIBOX_FIELD_TRIAL_H_ |
-#define CHROME_BROWSER_OMNIBOX_OMNIBOX_FIELD_TRIAL_H_ |
- |
-#include <map> |
-#include <string> |
-#include <vector> |
- |
-#include "base/basictypes.h" |
-#include "base/gtest_prod_util.h" |
-#include "components/metrics/proto/omnibox_event.pb.h" |
-#include "components/omnibox/autocomplete_match_type.h" |
- |
-namespace base { |
-class TimeDelta; |
-} |
- |
-// The set of parameters customizing the HUP scoring. |
-struct HUPScoringParams { |
- // A set of parameters describing how to cap a given count score. First, |
- // we apply a half-life based decay of the given count and then find the |
- // maximum relevance score in the corresponding bucket list. |
- class ScoreBuckets { |
- public: |
- // (decayed_count, max_relevance) pair. |
- typedef std::pair<double, int> CountMaxRelevance; |
- |
- ScoreBuckets(); |
- ~ScoreBuckets(); |
- |
- // Computes a half-life time decay given the |elapsed_time|. |
- double HalfLifeTimeDecay(const base::TimeDelta& elapsed_time) const; |
- |
- int relevance_cap() const { return relevance_cap_; } |
- void set_relevance_cap(int relevance_cap) { |
- relevance_cap_ = relevance_cap; |
- } |
- |
- int half_life_days() const { return half_life_days_; } |
- void set_half_life_days(int half_life_days) { |
- half_life_days_ = half_life_days; |
- } |
- |
- std::vector<CountMaxRelevance>& buckets() { return buckets_; } |
- const std::vector<CountMaxRelevance>& buckets() const { return buckets_; } |
- |
- private: |
- // History matches with relevance score greater or equal to |relevance_cap_| |
- // are not affected by this experiment. |
- // Set to -1, if there is no relevance cap in place and all matches are |
- // subject to demotion. |
- int relevance_cap_; |
- |
- // Half life time for a decayed count as measured since the last visit. |
- // Set to -1 if not used. |
- int half_life_days_; |
- |
- // The relevance score caps for given decayed count values. |
- // Each pair (decayed_count, max_score) indicates what the maximum relevance |
- // score is of a decayed count equal or greater than decayed_count. |
- // |
- // Consider this example: |
- // [(1, 1000), (0.5, 500), (0, 100)] |
- // If decayed count is 2 (which is >= 1), the corresponding match's maximum |
- // relevance will be capped at 1000. In case of 0.5, the score is capped |
- // at 500. Anything below 0.5 is capped at 100. |
- // |
- // This list is sorted by the pair's first element in descending order. |
- std::vector<CountMaxRelevance> buckets_; |
- }; |
- |
- HUPScoringParams() : experimental_scoring_enabled(false) {} |
- |
- bool experimental_scoring_enabled; |
- |
- ScoreBuckets typed_count_buckets; |
- |
- // Used only when the typed count is 0. |
- ScoreBuckets visited_count_buckets; |
-}; |
- |
-// This class manages the Omnibox field trials. |
-class OmniboxFieldTrial { |
- public: |
- // A mapping that contains multipliers indicating that matches of the |
- // specified type should have their relevance score multiplied by the |
- // given number. Omitted types are assumed to have multipliers of 1.0. |
- typedef std::map<AutocompleteMatchType::Type, float> DemotionMultipliers; |
- |
- // Activates all dynamic field trials. The main difference between |
- // the autocomplete dynamic and static field trials is that the former |
- // don't require any code changes on the Chrome side as they are controlled |
- // on the server side. Chrome binary simply propagates all necessary |
- // information through the X-Client-Data header. |
- // This method may be called multiple times. |
- static void ActivateDynamicTrials(); |
- |
- // Returns a bitmap containing AutocompleteProvider::Type values |
- // that should be disabled in AutocompleteController. |
- // This method simply goes over all autocomplete dynamic field trial groups |
- // and looks for group names like "ProvidersDisabled_NNN" where NNN is |
- // an integer corresponding to a bitmap mask. All extracted bitmaps |
- // are OR-ed together and returned as the final result. |
- static int GetDisabledProviderTypes(); |
- |
- // Returns whether the user is in any dynamic field trial where the |
- // group has a the prefix |group_prefix|. |
- static bool HasDynamicFieldTrialGroupPrefix(const char *group_prefix); |
- |
- // --------------------------------------------------------- |
- // For the suggest field trial. |
- |
- // Populates |field_trial_hash| with hashes of the active suggest field trial |
- // names, if any. |
- static void GetActiveSuggestFieldTrialHashes( |
- std::vector<uint32>* field_trial_hash); |
- |
- // --------------------------------------------------------- |
- // For the AutocompleteController "stop timer" field trial. |
- |
- // Returns the duration to be used for the AutocompleteController's stop |
- // timer. Returns the default value of 1.5 seconds if the stop timer |
- // override experiment isn't active or if parsing the experiment-provided |
- // duration fails. |
- static base::TimeDelta StopTimerFieldTrialDuration(); |
- |
- // --------------------------------------------------------- |
- // For the ZeroSuggestProvider field trial. |
- |
- // Returns whether the user is in any field trial where the |
- // ZeroSuggestProvider should be used to get suggestions when the |
- // user clicks on the omnibox but has not typed anything yet. |
- static bool InZeroSuggestFieldTrial(); |
- |
- // Returns whether the user is in a ZeroSuggest field trial, but should |
- // show most visited URL instead. This is used to compare metrics of |
- // ZeroSuggest and most visited suggestions. |
- static bool InZeroSuggestMostVisitedFieldTrial(); |
- |
- // Returns whether the user is in a ZeroSuggest field trial and URL-based |
- // suggestions can continue to appear after the user has started typing. |
- static bool InZeroSuggestAfterTypingFieldTrial(); |
- |
- // Returns whether the user is in a ZeroSuggest field trial, but should |
- // show recently searched-for queries instead. |
- static bool InZeroSuggestPersonalizedFieldTrial(); |
- |
- // --------------------------------------------------------- |
- // For the ShortcutsScoringMaxRelevance experiment that's part of the |
- // bundled omnibox field trial. |
- |
- // If the user is in an experiment group that, given the provided |
- // |current_page_classification| context, changes the maximum relevance |
- // ShortcutsProvider::CalculateScore() is supposed to assign, extract |
- // that maximum relevance score and put in in |max_relevance|. Returns |
- // true on a successful extraction. CalculateScore()'s return value is |
- // a product of this maximum relevance score and some attenuating factors |
- // that are all between 0 and 1. (Note that Shortcuts results may have |
- // their scores reduced later if the assigned score is higher than allowed |
- // for non-inlineable results. Shortcuts results are not allowed to be |
- // inlined.) |
- static bool ShortcutsScoringMaxRelevance( |
- metrics::OmniboxEventProto::PageClassification |
- current_page_classification, |
- int* max_relevance); |
- |
- // --------------------------------------------------------- |
- // For the SearchHistory experiment that's part of the bundled omnibox |
- // field trial. |
- |
- // Returns true if the user is in the experiment group that, given the |
- // provided |current_page_classification| context, scores search history |
- // query suggestions less aggressively so that they don't inline. |
- static bool SearchHistoryPreventInlining( |
- metrics::OmniboxEventProto::PageClassification |
- current_page_classification); |
- |
- // Returns true if the user is in the experiment group that, given the |
- // provided |current_page_classification| context, disables all query |
- // suggestions from search history. |
- static bool SearchHistoryDisable( |
- metrics::OmniboxEventProto::PageClassification |
- current_page_classification); |
- |
- // --------------------------------------------------------- |
- // For the DemoteByType experiment that's part of the bundled omnibox field |
- // trial. |
- |
- // If the user is in an experiment group that, in the provided |
- // |current_page_classification| context, demotes the relevance scores |
- // of certain types of matches, populates the |demotions_by_type| map |
- // appropriately. Otherwise, sets |demotions_by_type| to its default |
- // value based on the context. |
- static void GetDemotionsByType( |
- metrics::OmniboxEventProto::PageClassification |
- current_page_classification, |
- DemotionMultipliers* demotions_by_type); |
- |
- // --------------------------------------------------------- |
- // For the HistoryURL provider new scoring experiment that is part of the |
- // bundled omnibox field trial. |
- |
- // Initializes the HUP |scoring_params| based on the active HUP scoring |
- // experiment. If there is no such experiment, this function simply sets |
- // |scoring_params|->experimental_scoring_enabled to false. |
- static void GetExperimentalHUPScoringParams(HUPScoringParams* scoring_params); |
- |
- // For the HQPBookmarkValue experiment that's part of the |
- // bundled omnibox field trial. |
- |
- // Returns the value an untyped visit to a bookmark should receive. |
- // Compare this value with the default of 1 for non-bookmarked untyped |
- // visits to pages and the default of 20 for typed visits. Returns |
- // 10 if the bookmark value experiment isn't active. |
- static int HQPBookmarkValue(); |
- |
- // --------------------------------------------------------- |
- // For the HQPAllowMatchInTLD experiment that's part of the |
- // bundled omnibox field trial. |
- |
- // Returns true if HQP should allow an input term to match in the |
- // top level domain (e.g., .com) of a URL. Returns false if the |
- // allow match in TLD experiment isn't active. |
- static bool HQPAllowMatchInTLDValue(); |
- |
- // --------------------------------------------------------- |
- // For the HQPAllowMatchInScheme experiment that's part of the |
- // bundled omnibox field trial. |
- |
- // Returns true if HQP should allow an input term to match in the |
- // scheme (e.g., http://) of a URL. Returns false if the allow |
- // match in scheme experiment isn't active. |
- static bool HQPAllowMatchInSchemeValue(); |
- |
- // --------------------------------------------------------- |
- // For the BookmarksIndexURLs experiment that's part of the |
- // bundled omnibox field trial. |
- |
- // Returns true if BookmarkIndex should index the URL of bookmarks |
- // (not only the titles) and search for / mark matches in the URLs, |
- // and BookmarkProvider should score bookmarks based on both the |
- // matches in bookmark title and URL. Returns false if the bookmarks |
- // index URLs experiment isn't active. |
- static bool BookmarksIndexURLsValue(); |
- |
- // --------------------------------------------------------- |
- // For the DisableInlining experiment that's part of the bundled omnibox |
- // field trial. |
- |
- // Returns true if AutocompleteResult should prevent any suggestion with |
- // a non-empty |inline_autocomplete| from being the default match. In |
- // other words, prevent an inline autocompletion from appearing as the |
- // top suggestion / within the omnibox itself, reordering matches as |
- // necessary to make this true. Returns false if the experiment isn't |
- // active. |
- static bool DisableInlining(); |
- |
- // --------------------------------------------------------- |
- // For the AnswersInSuggest experiment that's part of the bundled omnibox |
- // field trial. |
- |
- // Returns true if the AnswersInSuggest feature should be enabled causing |
- // query responses such as current weather conditions or stock quotes |
- // to be provided in the Omnibox suggestion list. Considers both the |
- // field trial state as well as the overriding command-line flags. |
- static bool EnableAnswersInSuggest(); |
- |
- // --------------------------------------------------------- |
- // For the AddUWYTMatchEvenIfPromotedURLs experiment that's part of the |
- // bundled omnibox field trial. |
- |
- // Returns true if HistoryURL Provider should add the URL-what-you-typed match |
- // (if valid and reasonable) even if the provider has good inline |
- // autocompletions to offer. Normally HistoryURL does not add the UWYT match |
- // if there are good inline autocompletions, as the user could simply hit |
- // backspace to delete the completion and get the what-you-typed match. |
- // However, for the disabling inlining experiment we want to have the UWYT |
- // always explicitly displayed at an option if possible. Returns false if |
- // the experiment isn't active. |
- static bool AddUWYTMatchEvenIfPromotedURLs(); |
- |
- // --------------------------------------------------------- |
- // For the DisplayHintTextWhenPossible experiment that's part of the |
- // bundled omnibox field trial. |
- |
- // Returns true if the omnibox should display hint text (Search |
- // <search engine> or type URL) when possible (i.e., the omnibox |
- // is otherwise non-empty). |
- static bool DisplayHintTextWhenPossible(); |
- |
- // --------------------------------------------------------- |
- // Exposed publicly for the sake of unittests. |
- static const char kBundledExperimentFieldTrialName[]; |
- // Rule names used by the bundled experiment. |
- static const char kShortcutsScoringMaxRelevanceRule[]; |
- static const char kSearchHistoryRule[]; |
- static const char kDemoteByTypeRule[]; |
- static const char kHQPBookmarkValueRule[]; |
- static const char kHQPDiscountFrecencyWhenFewVisitsRule[]; |
- static const char kHQPAllowMatchInTLDRule[]; |
- static const char kHQPAllowMatchInSchemeRule[]; |
- static const char kZeroSuggestRule[]; |
- static const char kZeroSuggestVariantRule[]; |
- static const char kBookmarksIndexURLsRule[]; |
- static const char kDisableInliningRule[]; |
- static const char kAnswersInSuggestRule[]; |
- static const char kAddUWYTMatchEvenIfPromotedURLsRule[]; |
- static const char kDisplayHintTextWhenPossibleRule[]; |
- |
- // Parameter names used by the HUP new scoring experiments. |
- static const char kHUPNewScoringEnabledParam[]; |
- static const char kHUPNewScoringTypedCountRelevanceCapParam[]; |
- static const char kHUPNewScoringTypedCountHalfLifeTimeParam[]; |
- static const char kHUPNewScoringTypedCountScoreBucketsParam[]; |
- static const char kHUPNewScoringVisitedCountRelevanceCapParam[]; |
- static const char kHUPNewScoringVisitedCountHalfLifeTimeParam[]; |
- static const char kHUPNewScoringVisitedCountScoreBucketsParam[]; |
- |
- private: |
- friend class OmniboxFieldTrialTest; |
- |
- // The bundled omnibox experiment comes with a set of parameters |
- // (key-value pairs). Each key indicates a certain rule that applies in |
- // a certain context. The value indicates what the consequences of |
- // applying the rule are. For example, the value of a SearchHistory rule |
- // in the context of a search results page might indicate that we should |
- // prevent search history matches from inlining. |
- // |
- // This function returns the value associated with the |rule| that applies |
- // in the current context (which currently consists of |page_classification| |
- // and whether Instant Extended is enabled). If no such rule exists in the |
- // current context, fall back to the rule in various wildcard contexts and |
- // return its value if found. If the rule remains unfound in the global |
- // context, returns the empty string. For more details, including how we |
- // prioritize different wildcard contexts, see the implementation. How to |
- // interpret the value is left to the caller; this is rule-dependent. |
- static std::string GetValueForRuleInContext( |
- const std::string& rule, |
- metrics::OmniboxEventProto::PageClassification page_classification); |
- |
- DISALLOW_IMPLICIT_CONSTRUCTORS(OmniboxFieldTrial); |
-}; |
- |
-#endif // CHROME_BROWSER_OMNIBOX_OMNIBOX_FIELD_TRIAL_H_ |