Chromium Code Reviews| Index: chrome/browser/password_manager/password_manager.cc |
| diff --git a/chrome/browser/password_manager/password_manager.cc b/chrome/browser/password_manager/password_manager.cc |
| index e1390aa09be408671479aae117df546c7ac0f052..d37da828811ee1f95da179efc2d35492f992772f 100644 |
| --- a/chrome/browser/password_manager/password_manager.cc |
| +++ b/chrome/browser/password_manager/password_manager.cc |
| @@ -210,6 +210,11 @@ void PasswordManager::ProvisionallySavePassword(const PasswordForm& form) { |
| provisional_save_manager_.swap(manager); |
| } |
| +void PasswordManager::AddSubmissionCallback( |
| + const PasswordSubmittedCallback& callback) { |
| + submission_callbacks_.push_back(callback); |
| +} |
| + |
| void PasswordManager::AddObserver(LoginModelObserver* observer) { |
| observers_.AddObserver(observer); |
| } |
| @@ -218,20 +223,13 @@ void PasswordManager::RemoveObserver(LoginModelObserver* observer) { |
| observers_.RemoveObserver(observer); |
| } |
| -void PasswordManager::DidNavigateAnyFrame( |
| +void PasswordManager::DidNavigateMainFrame( |
| const content::LoadCommittedDetails& details, |
| const content::FrameNavigateParams& params) { |
| - bool password_form_submitted = params.password_form.origin.is_valid(); |
| - |
| - // Try to save the password if one was submitted. |
| - if (password_form_submitted) |
| - ProvisionallySavePassword(params.password_form); |
| - |
| - // Clear data after submission or main frame navigation. We don't want |
| - // to clear data after subframe navigation as there might be password |
| - // forms on other frames that could be submitted. |
| - if (password_form_submitted || details.is_main_frame) |
| - pending_login_managers_.clear(); |
| + // Clear data after main frame navigation. We don't want to clear data after |
| + // subframe navigation as there might be password forms on other frames that |
| + // could be submitted. |
| + pending_login_managers_.clear(); |
| } |
| bool PasswordManager::OnMessageReceived(const IPC::Message& message) { |
| @@ -241,11 +239,20 @@ bool PasswordManager::OnMessageReceived(const IPC::Message& message) { |
| OnPasswordFormsParsed) |
| IPC_MESSAGE_HANDLER(AutofillHostMsg_PasswordFormsRendered, |
| OnPasswordFormsRendered) |
| + IPC_MESSAGE_HANDLER(AutofillHostMsg_PasswordFormSubmitted, |
| + OnPasswordFormSubmitted) |
| IPC_MESSAGE_UNHANDLED(handled = false) |
| IPC_END_MESSAGE_MAP() |
| return handled; |
| } |
| +void PasswordManager::OnPasswordFormSubmitted( |
| + const PasswordForm& password_form) { |
| + ProvisionallySavePassword(password_form); |
|
Ilya Sherman
2013/07/27 01:09:48
Should you be calling pending_login_managers_.clea
Garrett Casto
2013/08/03 00:38:42
I actually did this on purpose, though now that I
|
| + for (size_t i = 0; i < submission_callbacks_.size(); ++i) |
|
Ilya Sherman
2013/07/27 01:09:48
Optional nit: I prefer to always use curly braces
Garrett Casto
2013/08/03 00:38:42
Done.
|
| + submission_callbacks_[i].Run(password_form); |
| +} |
| + |
| void PasswordManager::OnPasswordFormsParsed( |
| const std::vector<PasswordForm>& forms) { |
| // Ask the SSLManager for current security. |
| @@ -311,7 +318,7 @@ void PasswordManager::OnPasswordFormsRendered( |
| if (provisional_save_manager_->HasGeneratedPassword()) |
| UMA_HISTOGRAM_COUNTS("PasswordGeneration.Submitted", 1); |
| - if(!CommandLine::ForCurrentProcess()->HasSwitch( |
| + if (!CommandLine::ForCurrentProcess()->HasSwitch( |
| switches::kEnableSavePasswordBubble)){ |
| if (ShouldShowSavePasswordInfoBar()) { |
| delegate_->AddSavePasswordInfoBarIfPermitted( |
| @@ -373,7 +380,7 @@ void PasswordManager::Autofill( |
| PossiblyInitializeUsernamesExperiment(best_matches); |
| switch (form_for_autofill.scheme) { |
| case PasswordForm::SCHEME_HTML: { |
| - // Note the check above is required because the observer_ for a non-HTML |
| + // Note the check above is required because the observers_ for a non-HTML |
| // schemed password form may have been freed, so we need to distinguish. |
| autofill::PasswordFormFillData fill_data; |
| InitPasswordFormFillData(form_for_autofill, |