Chromium Code Reviews| 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 44e766660ead2209857df440c279c8a45a6b0a3a..a5bddb54b1e9c112596954f998a805cdec9eb21b 100644 |
| --- a/components/autofill/core/browser/autocomplete_history_manager.cc |
| +++ b/components/autofill/core/browser/autocomplete_history_manager.cc |
| @@ -9,6 +9,7 @@ |
| #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" |
| @@ -16,6 +17,7 @@ |
| #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 { |
| @@ -82,7 +84,30 @@ 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() || pending_query_prefix_.empty()) { |
| + SendSuggestions(&suggestions); |
| + } else { |
| + std::vector<base::string16> preferred_suggestions; |
| + std::vector<base::string16> substring_matched_suggestions; |
| + for (base::string16 suggestion : suggestions) { |
|
please use gerrit instead
2015/06/29 22:06:28
const base::string16&
Pritam Nikam
2015/06/30 15:05:50
Done.
|
| + if (StartsWith(suggestion, pending_query_prefix_, false)) { |
| + preferred_suggestions.push_back(suggestion); |
| + } else if (ContainsTokenThatStartsWith(suggestion, pending_query_prefix_, |
| + false)) { |
| + substring_matched_suggestions.push_back(suggestion); |
| + } |
| + } |
| + |
| + // Prefix matches should precede other token matches. |
| + if (IsFeatureSubstringMatchEnabled()) { |
| + preferred_suggestions.insert(preferred_suggestions.end(), |
| + substring_matched_suggestions.begin(), |
| + substring_matched_suggestions.end()); |
| + } |
| + |
| + SendSuggestions(&preferred_suggestions); |
| + } |
| } |
| void AutocompleteHistoryManager::OnGetAutocompleteSuggestions( |
| @@ -103,8 +128,14 @@ void AutocompleteHistoryManager::OnGetAutocompleteSuggestions( |
| } |
| if (database_.get()) { |
| + // TODO(pritam.nikam): Prensently there is unavailability of SQL solutions |
| + // to handle '_' along LIKE operator on Chromium Linux bot. Patterns like |
| + // '%s\_foo%' and '%[_]foo%' are not working. Revisit below code snippet in |
| + // future so that logic can be handled in SQL query instead. |
|
please use gerrit instead
2015/06/29 22:06:28
No need for "Revisit.." sentence and TODO marker.
Pritam Nikam
2015/06/30 15:05:50
With ESCAPE clause its working. I've modified |Aut
|
| + pending_query_prefix_ = prefix; |
| pending_query_handle_ = database_->GetFormValuesForElementName( |
| - name, prefix, kMaxAutocompleteMenuItems, this); |
| + name, IsFeatureSubstringMatchEnabled() ? base::string16() : prefix, |
| + kMaxAutocompleteMenuItems, this); |
| } |
| } |