| 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);
|
| }
|
| }
|
|
|
|
|