Index: components/autofill/core/browser/autocomplete_history_manager.cc |
diff --git a/components/autofill/core/browser/autocomplete_history_manager.cc b/components/autofill/core/browser/autocomplete_history_manager.cc |
index 79d75b8c18d257b686c4121a9dbc5f7dedc8772a..8385d273c7bd7429777f9af1938957e18b991a72 100644 |
--- a/components/autofill/core/browser/autocomplete_history_manager.cc |
+++ b/components/autofill/core/browser/autocomplete_history_manager.cc |
@@ -9,12 +9,14 @@ |
#include "base/prefs/pref_service.h" |
#include "base/profiler/scoped_tracker.h" |
#include "base/strings/string16.h" |
+#include "base/strings/string_util.h" |
#include "base/strings/utf_string_conversions.h" |
#include "components/autofill/core/browser/autofill_client.h" |
#include "components/autofill/core/browser/autofill_driver.h" |
#include "components/autofill/core/browser/autofill_external_delegate.h" |
#include "components/autofill/core/browser/validation.h" |
#include "components/autofill/core/common/autofill_pref_names.h" |
+#include "components/autofill/core/common/autofill_util.h" |
#include "components/autofill/core/common/form_data.h" |
namespace autofill { |
@@ -81,7 +83,31 @@ void AutocompleteHistoryManager::OnWebDataServiceRequestDone( |
const WDResult<std::vector<base::string16> >* autofill_result = |
static_cast<const WDResult<std::vector<base::string16> >*>(result); |
std::vector<base::string16> suggestions = autofill_result->GetValue(); |
- SendSuggestions(&suggestions); |
+ |
+ if (!IsFeatureSubstringMatchEnabled() || user_input_.empty()) { |
+ SendSuggestions(&suggestions); |
+ } else { |
+ std::vector<base::string16> prefix_suggestions; |
+ std::vector<base::string16> substring_suggestions; |
+ for (base::string16 suggestion : suggestions) { |
+ // Populate all suggestions with prefix matched followed by substring |
+ // matched. |
+ if (StartsWith(suggestion, user_input_, false)) { |
+ prefix_suggestions.push_back(suggestion); |
+ } else if (IsContentsPrefixOfSuggestionToken(suggestion, user_input_, |
+ CASE_IGNORE)) { |
+ substring_suggestions.push_back(suggestion); |
+ } |
+ } |
+ |
+ // Now append substring matched suggestions to the prefix matched |
+ // suggestion list. |
+ for (base::string16 substring_match : substring_suggestions) { |
+ prefix_suggestions.push_back(substring_match); |
+ } |
+ |
+ SendSuggestions(&prefix_suggestions); |
+ } |
} |
void AutocompleteHistoryManager::OnGetAutocompleteSuggestions( |
@@ -101,8 +127,10 @@ void AutocompleteHistoryManager::OnGetAutocompleteSuggestions( |
} |
if (database_.get()) { |
+ user_input_ = prefix; |
pending_query_handle_ = database_->GetFormValuesForElementName( |
- name, prefix, kMaxAutocompleteMenuItems, this); |
+ name, IsFeatureSubstringMatchEnabled() ? base::string16() : prefix, |
+ kMaxAutocompleteMenuItems, this); |
} |
} |