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 80392991c52f996d95743a3daab91cdd69e6fb07..442d9d953fd396e0c9a558defb37353f4f3ec784 100644 |
--- a/chrome/browser/password_manager/password_manager.cc |
+++ b/chrome/browser/password_manager/password_manager.cc |
@@ -14,6 +14,8 @@ |
#include "chrome/browser/password_manager/password_form_manager.h" |
#include "chrome/browser/password_manager/password_manager_delegate.h" |
#include "chrome/browser/password_manager/password_manager_metrics_util.h" |
+#include "chrome/browser/password_manager/password_store.h" |
+#include "chrome/browser/password_manager/password_store_factory.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/ui/passwords/manage_passwords_bubble_ui_controller.h" |
#include "chrome/common/chrome_switches.h" |
@@ -263,6 +265,8 @@ bool PasswordManager::OnMessageReceived(const IPC::Message& message) { |
OnPasswordFormsRendered) |
IPC_MESSAGE_HANDLER(AutofillHostMsg_PasswordFormSubmitted, |
OnPasswordFormSubmitted) |
+ IPC_MESSAGE_HANDLER(AutofillHostMsg_RemovePasswordSuggestion, |
+ OnRemovePasswordSuggestion) |
IPC_MESSAGE_UNHANDLED(handled = false) |
IPC_END_MESSAGE_MAP() |
return handled; |
@@ -302,6 +306,71 @@ void PasswordManager::OnPasswordFormsParsed( |
} |
} |
+void PasswordManager::OnRemovePasswordSuggestion( |
+ const PasswordForm& password_form, |
+ std::vector<PasswordForm> updated_password_forms) { |
+ scoped_refptr<PasswordStore> password_store = |
+ PasswordStoreFactory::GetForProfile(delegate_->GetProfile(), |
+ Profile::EXPLICIT_ACCESS); |
+ |
+ ManagePasswordsBubbleUIController* manage_passwords_bubble_ui_controller = |
+ ManagePasswordsBubbleUIController::FromWebContents(web_contents()); |
+ if (manage_passwords_bubble_ui_controller) { |
+ manage_passwords_bubble_ui_controller->RemoveFromBestMatches(password_form); |
+ } |
+ |
+ // Deleting the PasswordFormManager for the current |password_form| to avoid |
+ // that we have two PasswordFormManager for it: |
+ // AutofillHostMsg_PasswordFormsParsed is going to be recived in the near |
vabr (Chromium)
2014/03/07 23:43:36
typos: recived, genrate
riadh.chtara
2014/03/14 17:16:08
Done.
|
+ // future to update the current form and this is going to genrate a new |
+ // PasswordFormManager |
vabr (Chromium)
2014/03/07 23:43:36
Please end sentences with a full stop.
riadh.chtara
2014/03/14 17:16:08
Done.
|
+ |
+ std::vector<PasswordFormManager*> not_yet_updated; |
+ bool removed = false; |
+ for (ScopedVector<PasswordFormManager>::iterator iter = |
+ pending_login_managers_.begin(); |
+ iter != pending_login_managers_.end(); |
+ iter++) { |
vabr (Chromium)
2014/03/07 23:43:36
nit: prefer prefix increment ++iter to postfix ite
riadh.chtara
2014/03/14 17:16:08
Done.
|
+ |
+ if ((*iter)->DoesManage(password_form, |
+ PasswordFormManager::ACTION_MATCH_REQUIRED)) { |
+ if (!removed) { |
+ (*iter)->RemoveAndUpdate(password_form.username_value); |
+ removed = true; |
+ } else { |
+ (*iter)->Update(password_form.username_value); |
+ } |
+ } else { |
+ not_yet_updated.push_back(*iter); |
+ } |
+ } |
+ |
+ if (removed) { |
+ for (std::vector<PasswordFormManager*>::iterator pfm = |
vabr (Chromium)
2014/03/07 23:43:36
Please do not use abbreviations like 'pfm' or 'pf'
riadh.chtara
2014/03/14 17:16:08
Done.
|
+ not_yet_updated.begin(); |
+ pfm != not_yet_updated.end(); |
+ pfm++) { |
+ for (std::vector<PasswordForm>::iterator pf = |
+ updated_password_forms.begin(); |
+ pf != updated_password_forms.end();) { |
+ if ((*pfm) |
+ ->DoesManage(*pf, PasswordFormManager::ACTION_MATCH_REQUIRED)) { |
+ |
+ (*pfm)->Update(password_form.username_value); |
+ pf = updated_password_forms.erase(pf); |
vabr (Chromium)
2014/03/07 23:43:36
Single element deleting in vector is most of the t
riadh.chtara
2014/03/14 17:16:08
Done.
|
+ |
vabr (Chromium)
2014/03/07 23:43:36
nit: remove blank line
riadh.chtara
2014/03/14 17:16:08
Done.
|
+ } else { |
+ pf++; |
+ |
+ } |
+ |
+ } |
+ } |
+ |
+ } |
+} |
+ |
+ |
bool PasswordManager::ShouldShowSavePasswordInfoBar() const { |
return provisional_save_manager_->IsNewLogin() && |
!provisional_save_manager_->HasGeneratedPassword() && |