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

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

Issue 870513002: [PasswordManager] Improve detection of ignorable change password forms. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed review comments. Created 5 years, 10 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_form_manager.cc
diff --git a/components/password_manager/core/browser/password_form_manager.cc b/components/password_manager/core/browser/password_form_manager.cc
index 096257b8d1a3114a819949087cb7350fd5c5c466..de3b4b82a9cafd3470423688f4a6ee062f9c957d 100644
--- a/components/password_manager/core/browser/password_form_manager.cc
+++ b/components/password_manager/core/browser/password_form_manager.cc
@@ -376,19 +376,6 @@ void PasswordFormManager::FetchMatchingLoginsFromPasswordStore(
logger->LogMessage(Logger::STRING_FETCH_LOGINS_METHOD);
}
- // Do not autofill on sign-up or change password forms (until we have some
- // working change password functionality).
- if (!observed_form_.new_password_element.empty()) {
- if (logger)
- logger->LogMessage(Logger::STRING_FORM_NOT_AUTOFILLED);
- client_->AutofillResultsComputed();
- // There is no point in looking for the credentials in the store when they
- // won't be autofilled, so pretend there were none.
- std::vector<autofill::PasswordForm*> dummy_results;
- OnGetPasswordStoreResults(dummy_results);
- return;
- }
-
PasswordStore* password_store = client_->GetPasswordStore();
if (!password_store) {
if (logger)
@@ -403,11 +390,12 @@ bool PasswordFormManager::HasCompletedMatching() const {
return state_ == POST_MATCHING_PHASE;
}
-bool PasswordFormManager::IsIgnorableChangePasswordForm() const {
- bool is_change_password_form = !observed_form_.new_password_element.empty() &&
- !observed_form_.password_element.empty();
- bool is_username_certainly_correct = observed_form_.username_marked_by_site;
- return is_change_password_form && !is_username_certainly_correct;
+bool PasswordFormManager::IsIgnorableChangePasswordForm(
+ const autofill::PasswordForm& candidate) const {
+ bool is_change_password_form = !candidate.new_password_element.empty() &&
+ !candidate.password_element.empty();
+ return is_change_password_form && !candidate.username_marked_by_site &&
+ !HasMatchingCredentialsInStore(candidate);
}
void PasswordFormManager::OnRequestDone(
@@ -551,6 +539,19 @@ void PasswordFormManager::ProcessFrame(
manager_action_ = kManagerActionNone;
else
manager_action_ = kManagerActionAutofilled;
+
+ // Do not autofill on sign-up or change password forms (until we have some
vabr (Chromium) 2015/02/10 18:54:56 Could you move the whole added block above line 53
Pritam Nikam 2015/02/19 11:18:47 Done.
+ // working change password functionality).
+ if (!observed_form_.new_password_element.empty()) {
+ scoped_ptr<BrowserSavePasswordProgressLogger> logger;
vabr (Chromium) 2015/02/10 18:54:56 You only need the |logger| in the if-block below,
Pritam Nikam 2015/02/19 11:18:47 Done.
+ if (client_->IsLoggingActive()) {
+ logger.reset(new BrowserSavePasswordProgressLogger(client_));
+ logger->LogMessage(Logger::STRING_FORM_NOT_AUTOFILLED);
+ }
+ client_->AutofillResultsComputed();
vabr (Chromium) 2015/02/10 18:54:57 Remove this line. AutofillResultsComputed has alre
Pritam Nikam 2015/02/19 11:18:47 Done.
+ return;
+ }
+
password_manager_->Autofill(driver.get(), observed_form_, best_matches_,
*preferred_match_, wait_for_username);
}
@@ -868,4 +869,14 @@ void PasswordFormManager::SubmitFailed() {
LogPasswordGenerationSubmissionEvent(PASSWORD_SUBMISSION_FAILED);
}
+bool PasswordFormManager::HasMatchingCredentialsInStore(
+ const autofill::PasswordForm& candidate) const {
+ for (auto match : best_matches_) {
+ if (match.second->username_value == candidate.username_value &&
+ match.second->password_value == candidate.password_value)
+ return true;
+ }
+ return false;
+}
+
} // namespace password_manager

Powered by Google App Engine
This is Rietveld 408576698