| 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 8723dfced1d23186e30ecacc1d72487a2d90f73e..01e37c4106b3a1ed38761d6540259bfc9dda855d 100644
|
| --- a/chrome/browser/password_manager/chrome_password_manager_client.cc
|
| +++ b/chrome/browser/password_manager/chrome_password_manager_client.cc
|
| @@ -387,6 +387,7 @@ void ChromePasswordManagerClient::NotifyStorePasswordCalled() {
|
| // If a site stores a credential the autofill password manager shouldn't kick
|
| // in.
|
| password_manager_.DropFormManagers();
|
| + was_store_ever_called_ = true;
|
| }
|
|
|
| void ChromePasswordManagerClient::AutomaticPasswordSave(
|
| @@ -478,8 +479,6 @@ ChromePasswordManagerClient::GetMetricsRecorder() {
|
| return metrics_recorder_.value();
|
| }
|
|
|
| -// TODO(crbug.com/706392): Fix password reuse detection for Android.
|
| -#if !defined(OS_ANDROID)
|
| void ChromePasswordManagerClient::DidFinishNavigation(
|
| content::NavigationHandle* navigation_handle) {
|
| if (!navigation_handle->IsInMainFrame() || !navigation_handle->HasCommitted())
|
| @@ -491,6 +490,14 @@ void ChromePasswordManagerClient::DidFinishNavigation(
|
| metrics_recorder_.reset();
|
| }
|
|
|
| + // From this point on, the CredentialManagerImpl will service API calls in the
|
| + // context of the new WebContents::GetLastCommittedURL, which may very well be
|
| + // cross-origin. Disconnect existing client, and drop pending requests.
|
| + if (!navigation_handle->IsSameDocument())
|
| + credential_manager_impl_.DisconnectBinding();
|
| +
|
| +// TODO(crbug.com/706392): Fix password reuse detection for Android.
|
| +#if !defined(OS_ANDROID)
|
| password_reuse_detection_manager_.DidNavigateMainFrame(GetMainFrameURL());
|
| // After some navigations RenderViewHost persists and just adding the observer
|
| // will cause multiple call of OnInputEvent. Since Widget API doesn't allow to
|
| @@ -499,8 +506,10 @@ void ChromePasswordManagerClient::DidFinishNavigation(
|
| web_contents()->GetRenderViewHost()->GetWidget()->RemoveInputEventObserver(
|
| this);
|
| web_contents()->GetRenderViewHost()->GetWidget()->AddInputEventObserver(this);
|
| +#endif
|
| }
|
|
|
| +#if !defined(OS_ANDROID)
|
| void ChromePasswordManagerClient::OnInputEvent(
|
| const blink::WebInputEvent& event) {
|
| if (event.GetType() != blink::WebInputEvent::kChar)
|
| @@ -741,8 +750,7 @@ const password_manager::LogManager* ChromePasswordManagerClient::GetLogManager()
|
|
|
| // static
|
| void ChromePasswordManagerClient::BindCredentialManager(
|
| - const service_manager::BindSourceInfo& source_info,
|
| - password_manager::mojom::CredentialManagerRequest request,
|
| + password_manager::mojom::CredentialManagerAssociatedRequest request,
|
| content::RenderFrameHost* render_frame_host) {
|
| // Only valid for the main frame.
|
| if (render_frame_host->GetParent())
|
| @@ -752,6 +760,11 @@ void ChromePasswordManagerClient::BindCredentialManager(
|
| content::WebContents::FromRenderFrameHost(render_frame_host);
|
| DCHECK(web_contents);
|
|
|
| + // Only valid for the currently committed RenderFrameHost, and not, e.g. old
|
| + // zombie RFH's being swapped out following cross-origin navigations.
|
| + if (web_contents->GetMainFrame() != render_frame_host)
|
| + return;
|
| +
|
| ChromePasswordManagerClient* instance =
|
| ChromePasswordManagerClient::FromWebContents(web_contents);
|
|
|
|
|