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 73c54ef1461df217249b70870773d1dc8bcfb83c..7abefede12b5569f91f5fd4664dba641f7ec794f 100644 |
--- a/components/password_manager/core/browser/password_manager.cc |
+++ b/components/password_manager/core/browser/password_manager.cc |
@@ -340,7 +340,8 @@ bool PasswordManager::ShouldPromptUserToSavePassword() const { |
} |
void PasswordManager::OnPasswordFormsRendered( |
- const std::vector<PasswordForm>& visible_forms) { |
+ const std::vector<PasswordForm>& visible_forms, |
+ bool did_stop_loading) { |
scoped_ptr<BrowserSavePasswordProgressLogger> logger; |
if (client_->IsLoggingActive()) { |
logger.reset(new BrowserSavePasswordProgressLogger(client_)); |
@@ -362,40 +363,56 @@ void PasswordManager::OnPasswordFormsRendered( |
visible_forms.size()); |
} |
- // If we see the login form again, then the login failed. |
+ // Records all visible forms in the page. |
vabr (Chromium)
2014/05/23 12:18:36
page or frame?
|
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); |
+ all_visible_forms_.push_back(visible_forms[i]); |
vabr (Chromium)
2014/05/23 12:18:36
nit: consider using std::vector::insert
|
+ } |
+ |
+ // If we see the login form again, then the login failed. |
+ 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. |
+ while (all_visible_forms_.size()) { |
vabr (Chromium)
2014/05/23 12:18:36
Did you just mean all_visible_forms_.clear()?
Thi
|
+ all_visible_forms_.resize(all_visible_forms_.size() - 1); |
+ } |
+ 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 forms. |
+ while (all_visible_forms_.size()) { |
+ all_visible_forms_.resize(all_visible_forms_.size() - 1); |
+ } |
- 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(); |
+ } |
} |
} |