Index: chrome/browser/ui/passwords/manage_passwords_bubble_ui_controller.cc |
diff --git a/chrome/browser/ui/passwords/manage_passwords_bubble_ui_controller.cc b/chrome/browser/ui/passwords/manage_passwords_bubble_ui_controller.cc |
index bf79ffd7c1870e75c319d73a53d4297a233e7cd2..ee9b76b044331fb8c3f5b123f4f24739cdfc5ace 100644 |
--- a/chrome/browser/ui/passwords/manage_passwords_bubble_ui_controller.cc |
+++ b/chrome/browser/ui/passwords/manage_passwords_bubble_ui_controller.cc |
@@ -5,6 +5,7 @@ |
#include "chrome/browser/ui/passwords/manage_passwords_bubble_ui_controller.h" |
#include "chrome/browser/chrome_notification_types.h" |
+#include "chrome/browser/password_manager/password_store_factory.h" |
#include "chrome/browser/ui/browser_finder.h" |
#include "chrome/browser/ui/browser_window.h" |
#include "chrome/browser/ui/omnibox/location_bar.h" |
@@ -12,6 +13,16 @@ |
using autofill::PasswordFormMap; |
+namespace { |
+ |
+PasswordStore* GetPasswordStore(content::WebContents* web_contents) { |
+ return PasswordStoreFactory::GetForProfile( |
+ Profile::FromBrowserContext(web_contents->GetBrowserContext()), |
+ Profile::EXPLICIT_ACCESS).get(); |
+} |
+ |
+} // namespace |
+ |
DEFINE_WEB_CONTENTS_USER_DATA_KEY(ManagePasswordsBubbleUIController); |
ManagePasswordsBubbleUIController::ManagePasswordsBubbleUIController( |
@@ -20,8 +31,11 @@ ManagePasswordsBubbleUIController::ManagePasswordsBubbleUIController( |
manage_passwords_icon_to_be_shown_(false), |
password_to_be_saved_(false), |
manage_passwords_bubble_needs_showing_(false), |
- password_submitted_(false), |
- autofill_blocked_(false) {} |
+ autofill_blocked_(false) { |
+ PasswordStore* password_store = GetPasswordStore(web_contents); |
+ if (password_store) |
+ password_store->AddObserver(this); |
+} |
ManagePasswordsBubbleUIController::~ManagePasswordsBubbleUIController() {} |
@@ -40,10 +54,10 @@ void ManagePasswordsBubbleUIController::OnPasswordSubmitted( |
PasswordFormManager* form_manager) { |
form_manager_.reset(form_manager); |
password_form_map_ = form_manager_->best_matches(); |
+ origin_ = pending_credentials().origin; |
manage_passwords_icon_to_be_shown_ = true; |
password_to_be_saved_ = true; |
manage_passwords_bubble_needs_showing_ = true; |
- password_submitted_ = true; |
autofill_blocked_ = false; |
UpdateBubbleAndIconVisibility(); |
} |
@@ -51,10 +65,10 @@ void ManagePasswordsBubbleUIController::OnPasswordSubmitted( |
void ManagePasswordsBubbleUIController::OnPasswordAutofilled( |
const PasswordFormMap& password_form_map) { |
password_form_map_ = password_form_map; |
+ origin_ = password_form_map_.begin()->second->origin; |
manage_passwords_icon_to_be_shown_ = true; |
password_to_be_saved_ = false; |
manage_passwords_bubble_needs_showing_ = false; |
- password_submitted_ = false; |
autofill_blocked_ = false; |
UpdateBubbleAndIconVisibility(); |
} |
@@ -63,14 +77,34 @@ void ManagePasswordsBubbleUIController::OnBlacklistBlockedAutofill() { |
manage_passwords_icon_to_be_shown_ = true; |
password_to_be_saved_ = false; |
manage_passwords_bubble_needs_showing_ = false; |
- password_submitted_ = false; |
autofill_blocked_ = true; |
UpdateBubbleAndIconVisibility(); |
} |
-void ManagePasswordsBubbleUIController::RemoveFromBestMatches( |
- autofill::PasswordForm password_form) { |
- password_form_map_.erase(password_form.username_value); |
+void ManagePasswordsBubbleUIController::WebContentsDestroyed( |
+ content::WebContents* web_contents) { |
+ PasswordStore* password_store = GetPasswordStore(web_contents); |
+ if (password_store) |
+ password_store->RemoveObserver(this); |
+} |
+ |
+void ManagePasswordsBubbleUIController::OnLoginsChanged( |
+ const PasswordStoreChangeList& changes) { |
+ for (PasswordStoreChangeList::const_iterator it = changes.begin(); |
+ it != changes.end(); |
+ it++) { |
+ const autofill::PasswordForm& changed_form = it->form(); |
+ if (changed_form.origin != origin_) |
+ continue; |
+ |
+ if (it->type() == PasswordStoreChange::REMOVE) { |
+ password_form_map_.erase(changed_form.username_value); |
+ } else { |
+ autofill::PasswordForm* new_form = |
+ new autofill::PasswordForm(changed_form); |
+ password_form_map_[changed_form.username_value] = new_form; |
+ } |
+ } |
} |
void ManagePasswordsBubbleUIController::OnBubbleShown() { |
@@ -96,6 +130,6 @@ void ManagePasswordsBubbleUIController::DidNavigateMainFrame( |
manage_passwords_icon_to_be_shown_ = false; |
password_to_be_saved_ = false; |
manage_passwords_bubble_needs_showing_ = false; |
- password_submitted_ = false; |
UpdateBubbleAndIconVisibility(); |
} |
+ |
markusheintz_
2014/04/10 13:22:12
nit: remove
|