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

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

Issue 331593008: Only consider PasswordFromManager which HasCompletedMatching when provisionally saving passwords (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Test added Created 6 years, 5 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_manager.cc
diff --git a/components/password_manager/core/browser/password_manager.cc b/components/password_manager/core/browser/password_manager.cc
index 0ca48b3d5aba57c8d604ba4d14c71c2ae0d9acaf..74dd6ec386a0cced638b7f0e567ca7fb2842c72f 100644
--- a/components/password_manager/core/browser/password_manager.cc
+++ b/components/password_manager/core/browser/password_manager.cc
@@ -149,11 +149,19 @@ void PasswordManager::ProvisionallySavePassword(const PasswordForm& form) {
scoped_ptr<PasswordFormManager> manager;
ScopedVector<PasswordFormManager>::iterator matched_manager_it =
pending_login_managers_.end();
+ // A "successful candidate" is a PasswordFormManager which DoesManage(form).
+ // We keep track of them for UMA.
+ bool successful_candidates_found = false;
engedy 2014/07/11 17:05:36 nit: I would rename this to |has_found_matching_ma
vabr (Chromium) 2014/07/11 18:15:48 Done.
for (ScopedVector<PasswordFormManager>::iterator iter =
pending_login_managers_.begin();
iter != pending_login_managers_.end();
++iter) {
PasswordFormManager::MatchResultMask result = (*iter)->DoesManage(form);
+ if (result != PasswordFormManager::RESULT_NO_MATCH) {
engedy 2014/07/11 17:05:36 I wonder if it would make the control flow more re
vabr (Chromium) 2014/07/11 18:15:48 Done.
+ successful_candidates_found = true;
+ if (!(*iter)->HasCompletedMatching())
+ continue;
+ }
if (result == PasswordFormManager::RESULT_COMPLETE_MATCH) {
// If we find a manager that exactly matches the submitted form including
// the action URL, exit the loop.
@@ -180,20 +188,18 @@ void PasswordManager::ProvisionallySavePassword(const PasswordForm& form) {
// |manager|.
manager.reset(*matched_manager_it);
pending_login_managers_.weak_erase(matched_manager_it);
+ } else if (successful_candidates_found) {
+ // We found some managers, but none finished matching yet. The user has
+ // tried to submit credentials before we had time to even find matching
+ // results for the given form and autofill. If this is the case, we just
+ // give up.
+ RecordFailure(MATCHING_NOT_COMPLETE, form.origin.host(), logger.get());
+ return;
} else {
RecordFailure(NO_MATCHING_FORM, form.origin.host(), logger.get());
return;
}
- // If we found a manager but it didn't finish matching yet, the user has
- // tried to submit credentials before we had time to even find matching
- // results for the given form and autofill. If this is the case, we just
- // give up.
- if (!manager->HasCompletedMatching()) {
- RecordFailure(MATCHING_NOT_COMPLETE, form.origin.host(), logger.get());
- return;
- }
-
// Also get out of here if the user told us to 'never remember' passwords for
// this form.
if (manager->IsBlacklisted()) {
@@ -262,7 +268,7 @@ void PasswordManager::RecordFailure(ProvisionalSaveFailure failure,
logger->LogMessage(Logger::STRING_EMPTY_PASSWORD);
break;
case MATCHING_NOT_COMPLETE:
- logger->LogMessage(Logger::STRING_NO_FORM_MANAGER);
+ logger->LogMessage(Logger::STRING_MATCHING_NOT_COMPLETE);
break;
case NO_MATCHING_FORM:
logger->LogMessage(Logger::STRING_NO_MATCHING_FORM);

Powered by Google App Engine
This is Rietveld 408576698