blob: ac022b27f5c901c7cf8aef3b55e9ea4248d336c4 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/password_manager/core/browser/password_manager_client_helper.h"
#include "components/password_manager/core/browser/password_bubble_experiment.h"
#include "components/password_manager/core/browser/password_manager.h"
#include "components/password_manager/core/common/password_manager_pref_names.h"
#include "components/prefs/pref_service.h"
namespace password_manager {
PasswordManagerClientHelper::PasswordManagerClientHelper(
PasswordManagerClientHelperDelegate* delegate)
: delegate_(delegate) {
DCHECK(delegate_);
}
PasswordManagerClientHelper::~PasswordManagerClientHelper() {}
void PasswordManagerClientHelper::NotifyUserCouldBeAutoSignedIn(
std::unique_ptr<autofill::PasswordForm> form) {
possible_auto_sign_in_ = std::move(form);
}
void PasswordManagerClientHelper::NotifySuccessfulLoginWithExistingPassword(
const autofill::PasswordForm& form) {
if (!possible_auto_sign_in_)
return;
if (possible_auto_sign_in_->username_value == form.username_value &&
possible_auto_sign_in_->password_value == form.password_value &&
possible_auto_sign_in_->origin == form.origin) {
// Check if it is necessary to prompt user to enable auto sign-in.
if (ShouldPromptToEnableAutoSignIn()) {
delegate_->PromptUserToEnableAutosignin();
}
}
possible_auto_sign_in_.reset();
}
void PasswordManagerClientHelper::OnCredentialsChosen(
const PasswordManagerClient::CredentialsCallback& callback,
bool one_local_credential,
const autofill::PasswordForm* form) {
callback.Run(form);
// If a site gets back a credential some navigations are likely to occur. They
// shouldn't trigger the autofill password manager.
if (form)
delegate_->GetPasswordManager()->DropFormManagers();
if (form && one_local_credential) {
if (ShouldPromptToEnableAutoSignIn()) {
delegate_->PromptUserToEnableAutosignin();
}
}
}
void PasswordManagerClientHelper::NotifyStorePasswordCalled() {
// If a site stores a credential the autofill password manager shouldn't kick
// in.
delegate_->GetPasswordManager()->DropFormManagers();
}
void PasswordManagerClientHelper::NotifyUserAutoSignin() {
// If a site gets back a credential some navigations are likely to occur. They
// shouldn't trigger the autofill password manager.
delegate_->GetPasswordManager()->DropFormManagers();
}
bool PasswordManagerClientHelper::ShouldPromptToEnableAutoSignIn() const {
if (!password_bubble_experiment::ShouldShowAutoSignInPromptFirstRunExperience(
delegate_->GetPrefs()) ||
!delegate_->GetPrefs()->GetBoolean(
password_manager::prefs::kCredentialsEnableAutosignin) ||
delegate_->IsIncognito())
return false;
return true;
}
} // namespace password_manager