Index: chrome/browser/password_manager/chrome_password_manager_client.cc |
diff --git a/chrome/browser/password_manager/chrome_password_manager_client.cc b/chrome/browser/password_manager/chrome_password_manager_client.cc |
index 22a725914159216f6c6a9283a9d582b5faec9ce6..b58bec683aa34fa45328eedddd0695b6f2b75ebd 100644 |
--- a/chrome/browser/password_manager/chrome_password_manager_client.cc |
+++ b/chrome/browser/password_manager/chrome_password_manager_client.cc |
@@ -144,6 +144,7 @@ ChromePasswordManagerClient::ChromePasswordManagerClient( |
: content::WebContentsObserver(web_contents), |
profile_(Profile::FromBrowserContext(web_contents->GetBrowserContext())), |
password_manager_(this), |
+ password_reuse_detection_manager_(this), |
driver_factory_(nullptr), |
credential_manager_impl_(web_contents, this), |
password_manager_client_bindings_(web_contents, this), |
@@ -377,6 +378,28 @@ void ChromePasswordManagerClient::HidePasswordGenerationPopup() { |
popup_controller_->HideAndDestroy(); |
} |
+void ChromePasswordManagerClient::DidNavigateMainFrame( |
+ const content::LoadCommittedDetails& details, |
+ const content::FrameNavigateParams& params) { |
+ password_reuse_detection_manager_.DidNavigateMainFrame(); |
+ // After some navigations RenderViewHost persists and just adding the observer |
+ // will cause multiple call of OnInputEvent. Since Widget API doesn't allow to |
+ // check whether the observer is already added, the observer is removed and |
+ // added again, to ensure that it is added only once. |
+ web_contents()->GetRenderViewHost()->GetWidget()->RemoveInputEventObserver( |
+ this); |
+ web_contents()->GetRenderViewHost()->GetWidget()->AddInputEventObserver(this); |
+} |
+ |
+void ChromePasswordManagerClient::OnInputEvent( |
+ const blink::WebInputEvent& event) { |
+ if (event.type != blink::WebInputEvent::Char) |
+ return; |
+ const blink::WebKeyboardEvent& key_event = |
+ static_cast<const blink::WebKeyboardEvent&>(event); |
+ password_reuse_detection_manager_.OnKeyPressed(key_event.text); |
+} |
+ |
PrefService* ChromePasswordManagerClient::GetPrefs() { |
return profile_->GetPrefs(); |
} |