Index: chrome/browser/autocomplete/shortcuts_provider.cc |
diff --git a/chrome/browser/autocomplete/shortcuts_provider.cc b/chrome/browser/autocomplete/shortcuts_provider.cc |
index ae59d8e5b0fea0338eabb8227599da9659759d3f..1de8b5659c9ea0554a2405c659a41a606db6e865 100644 |
--- a/chrome/browser/autocomplete/shortcuts_provider.cc |
+++ b/chrome/browser/autocomplete/shortcuts_provider.cc |
@@ -25,6 +25,7 @@ |
#include "chrome/browser/history/history_service.h" |
#include "chrome/browser/history/history_service_factory.h" |
#include "chrome/browser/history/shortcuts_backend_factory.h" |
+#include "chrome/browser/omnibox/omnibox_field_trial.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/common/pref_names.h" |
#include "chrome/common/url_constants.h" |
@@ -53,7 +54,8 @@ ShortcutsProvider::ShortcutsProvider(AutocompleteProviderListener* listener, |
: AutocompleteProvider(listener, profile, |
AutocompleteProvider::TYPE_SHORTCUTS), |
languages_(profile_->GetPrefs()->GetString(prefs::kAcceptLanguages)), |
- initialized_(false) { |
+ initialized_(false), |
+ max_relevance_(AutocompleteResult::kLowestDefaultScore - 1) { |
scoped_refptr<history::ShortcutsBackend> backend = |
ShortcutsBackendFactory::GetForProfile(profile_); |
if (backend.get()) { |
@@ -61,6 +63,9 @@ ShortcutsProvider::ShortcutsProvider(AutocompleteProviderListener* listener, |
if (backend->initialized()) |
initialized_ = true; |
} |
+ int max_relevance; |
+ if (OmniboxFieldTrial::ShortcutsScoringMaxRelevance(&max_relevance)) |
+ max_relevance_ = max_relevance; |
} |
void ShortcutsProvider::Start(const AutocompleteInput& input, |
@@ -169,6 +174,16 @@ void ShortcutsProvider::GetMatches(const AutocompleteInput& input) { |
matches_.erase(matches_.begin() + AutocompleteProvider::kMaxMatches, |
matches_.end()); |
} |
+ // Reset relevance scores to guarantee no results are given an |
+ // inlineable score and all scores are decreasing (but not do assign |
+ // any scores below 1). |
+ int max_relevance = AutocompleteResult::kLowestDefaultScore - 1; |
+ for (ACMatches::iterator it = matches_.begin(); it != matches_.end(); ++it) { |
+ max_relevance = std::min(max_relevance, it->relevance); |
+ it->relevance = max_relevance; |
+ if (max_relevance > 1) |
+ max_relevance--; |
Peter Kasting
2013/06/20 00:06:28
Tiny nit: Use preincrement wherever you don't need
Mark P
2013/06/20 00:23:16
Done.
|
+ } |
} |
AutocompleteMatch ShortcutsProvider::ShortcutToACMatch( |
@@ -318,7 +333,6 @@ history::ShortcutsBackend::ShortcutMap::const_iterator |
backend->shortcuts_map().end(); |
} |
-// static |
int ShortcutsProvider::CalculateScore( |
const string16& terms, |
const history::ShortcutsBackend::Shortcut& shortcut) { |
@@ -331,7 +345,7 @@ int ShortcutsProvider::CalculateScore( |
// directly. This makes sense since the first characters typed are much more |
// important for determining how likely it is a user wants a particular |
// shortcut than are the remaining continued characters. |
- double base_score = (AutocompleteResult::kLowestDefaultScore - 1) * |
+ double base_score = max_relevance_ * |
sqrt(static_cast<double>(terms.length()) / shortcut.text.length()); |
// Then we decay this by half each week. |