Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(308)

Unified Diff: components/password_manager/core/browser/password_autofill_manager.cc

Issue 962673004: [Autofill/Autocomplete Feature] Substring matching instead of prefix matching. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/password_manager/core/browser/password_autofill_manager.cc
diff --git a/components/password_manager/core/browser/password_autofill_manager.cc b/components/password_manager/core/browser/password_autofill_manager.cc
index 15d5f7e3c8da005d4853f4dc3a8e78098bcaaebb..496ac70aa38ab1c02c51ecb901cdc8cedb4a0b77 100644
--- a/components/password_manager/core/browser/password_autofill_manager.cc
+++ b/components/password_manager/core/browser/password_autofill_manager.cc
@@ -15,6 +15,7 @@
#include "components/autofill/core/browser/suggestion.h"
#include "components/autofill/core/common/autofill_constants.h"
#include "components/autofill/core/common/autofill_data_validation.h"
+#include "components/autofill/core/common/autofill_util.h"
#include "components/password_manager/core/browser/affiliation_utils.h"
#include "components/password_manager/core/browser/password_manager_driver.h"
#include "components/strings/grit/components_strings.h"
@@ -57,41 +58,52 @@ base::string16 GetHumanReadableRealm(const std::string& signon_realm) {
return base::UTF8ToUTF16(signon_realm);
}
+// Use this to check if a given suggestion matches the current contents of a
+// field.
+bool DoesSuggestionMatchContents(const base::string16& field_suggestion,
+ const base::string16& field_contents) {
+ return StartsWith(field_suggestion, field_contents, false) ||
vabr (Chromium) 2015/03/30 14:51:04 Looking at the definition of IsContentsPrefixOfSug
Pritam Nikam 2015/03/30 17:35:48 IMO, substring matching is still behind "enable-su
vabr (Chromium) 2015/03/31 09:38:07 Acknowledged. (Also now it is needed also behind t
+ (autofill::IsFeatureSubstringMatchEnabled() &&
+ autofill::IsContentsPrefixOfSuggestionToken(field_suggestion,
+ field_contents, false));
+}
+
+// If |field_suggestion| matches |field_content|, creates a Suggestion out of it
+// and appends to |suggestions|.
+void AppendSuggestionIfMatching(
+ const base::string16& field_suggestion,
+ const base::string16& field_contents,
+ const std::string& signon_realm,
+ bool show_all,
+ std::vector<autofill::Suggestion>* suggestions) {
+ if (show_all ||
+ DoesSuggestionMatchContents(field_suggestion, field_contents)) {
+ autofill::Suggestion suggestion(ReplaceEmptyUsername(field_suggestion));
+ suggestion.label = GetHumanReadableRealm(signon_realm);
+ suggestion.frontend_id = autofill::POPUP_ITEM_ID_PASSWORD_ENTRY;
+ suggestions->push_back(suggestion);
+ }
+}
+
// This function attempts to fill |suggestions| and |realms| form |fill_data|
// based on |current_username|. Unless |show_all| is true, it only picks
-// suggestions where the username has |current_username| as a prefix.
+// suggestions where the username matches |current_username|.
void GetSuggestions(const autofill::PasswordFormFillData& fill_data,
const base::string16& current_username,
std::vector<autofill::Suggestion>* suggestions,
bool show_all) {
- if (show_all ||
- StartsWith(fill_data.username_field.value, current_username, false)) {
- autofill::Suggestion suggestion(
- ReplaceEmptyUsername(fill_data.username_field.value));
- suggestion.label = GetHumanReadableRealm(fill_data.preferred_realm);
- suggestion.frontend_id = autofill::POPUP_ITEM_ID_PASSWORD_ENTRY;
- suggestions->push_back(suggestion);
- }
+ AppendSuggestionIfMatching(fill_data.username_field.value, current_username,
+ fill_data.preferred_realm, show_all, suggestions);
for (const auto& login : fill_data.additional_logins) {
- if (show_all || StartsWith(login.first, current_username, false)) {
- autofill::Suggestion suggestion(ReplaceEmptyUsername(login.first));
- suggestion.label = GetHumanReadableRealm(login.second.realm);
- suggestion.frontend_id = autofill::POPUP_ITEM_ID_PASSWORD_ENTRY;
- suggestions->push_back(suggestion);
- }
+ AppendSuggestionIfMatching(login.first, current_username,
+ login.second.realm, show_all, suggestions);
}
for (const auto& usernames : fill_data.other_possible_usernames) {
for (size_t i = 0; i < usernames.second.size(); ++i) {
- if (show_all ||
- StartsWith(usernames.second[i], current_username, false)) {
- autofill::Suggestion suggestion(
- ReplaceEmptyUsername(usernames.second[i]));
- suggestion.label = GetHumanReadableRealm(usernames.first.realm);
- suggestion.frontend_id = autofill::POPUP_ITEM_ID_PASSWORD_ENTRY;
- suggestions->push_back(suggestion);
- }
+ AppendSuggestionIfMatching(usernames.second[i], current_username,
+ usernames.first.realm, show_all, suggestions);
}
}
}

Powered by Google App Engine
This is Rietveld 408576698