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

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

Issue 293093002: Don't show "Save password" prompt for a failed login (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 6 years, 6 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 d481abf07db15322cd1f3c7c9d09ebbf7f462860..877f4b028fc4350d9ea376bacdbf2f9bd4f18c61 100644
--- a/components/password_manager/core/browser/password_manager.cc
+++ b/components/password_manager/core/browser/password_manager.cc
@@ -364,9 +364,9 @@ bool PasswordManager::ShouldPromptUserToSavePassword() const {
}
void PasswordManager::OnPasswordFormsRendered(
- const std::vector<PasswordForm>& visible_forms) {
+ const std::vector<PasswordForm>& visible_forms,
+ bool did_stop_loading) {
CreatePendingLoginManagers(visible_forms);
-
scoped_ptr<BrowserSavePasswordProgressLogger> logger;
if (client_->IsLoggingActive()) {
logger.reset(new BrowserSavePasswordProgressLogger(client_));
@@ -388,40 +388,52 @@ void PasswordManager::OnPasswordFormsRendered(
visible_forms.size());
}
+ // Record all visible forms from the frame.
+ all_visible_forms_.insert(all_visible_forms_.end(),
+ visible_forms.begin(),
+ visible_forms.end());
+
// If we see the login form again, then the login failed.
- for (size_t i = 0; i < visible_forms.size(); ++i) {
- // TODO(vabr): The similarity check is just action equality for now. If it
- // becomes more complex, it may make sense to consider modifying and using
- // PasswordFormManager::DoesManage for it.
- if (visible_forms[i].action.is_valid() &&
- provisional_save_manager_->pending_credentials().action ==
- visible_forms[i].action) {
- if (logger) {
- logger->LogPasswordForm(Logger::STRING_PASSWORD_FORM_REAPPEARED,
- visible_forms[i]);
- logger->LogMessage(Logger::STRING_DECISION_DROP);
+ if (did_stop_loading) {
+ for (size_t i = 0; i < all_visible_forms_.size(); ++i) {
+ // TODO(vabr): The similarity check is just action equality for now. If it
+ // becomes more complex, it may make sense to consider modifying and using
+ // PasswordFormManager::DoesManage for it.
+ if (all_visible_forms_[i].action.is_valid() &&
+ provisional_save_manager_->pending_credentials().action ==
+ all_visible_forms_[i].action) {
+ if (logger) {
+ logger->LogPasswordForm(Logger::STRING_PASSWORD_FORM_REAPPEARED,
+ visible_forms[i]);
+ logger->LogMessage(Logger::STRING_DECISION_DROP);
+ }
+ provisional_save_manager_->SubmitFailed();
+ provisional_save_manager_.reset();
+ // Clear all_visible_forms_ once we found the match.
+ all_visible_forms_.clear();
+ return;
}
- provisional_save_manager_->SubmitFailed();
- provisional_save_manager_.reset();
- return;
}
- }
- // Looks like a successful login attempt. Either show an infobar or
- // automatically save the login data. We prompt when the user hasn't already
- // given consent, either through previously accepting the infobar or by having
- // the browser generate the password.
- provisional_save_manager_->SubmitPassed();
+ // Clear all_visible_forms_ after checking all the visible forms.
+ all_visible_forms_.clear();
- if (ShouldPromptUserToSavePassword()) {
- if (logger)
- logger->LogMessage(Logger::STRING_DECISION_ASK);
- client_->PromptUserToSavePassword(provisional_save_manager_.release());
- } else {
- if (logger)
- logger->LogMessage(Logger::STRING_DECISION_SAVE);
- provisional_save_manager_->Save();
- provisional_save_manager_.reset();
+ // Looks like a successful login attempt. Either show an infobar or
+ // automatically save the login data. We prompt when the user hasn't
+ // already given consent, either through previously accepting the infobar
+ // or by having the browser generate the password.
+ provisional_save_manager_->SubmitPassed();
+
+ if (ShouldPromptUserToSavePassword()) {
+ if (logger)
+ logger->LogMessage(Logger::STRING_DECISION_ASK);
+ client_->PromptUserToSavePassword(provisional_save_manager_.release());
+ } else {
+ if (logger)
+ logger->LogMessage(Logger::STRING_DECISION_SAVE);
+ provisional_save_manager_->Save();
+ provisional_save_manager_.reset();
+ }
}
}

Powered by Google App Engine
This is Rietveld 408576698