blob: 8d620b57f4e724e8831caee07031a0b62657fea0 [file] [log] [blame]
// Copyright (c) 2014 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/credential_manager_password_form_manager.h"
#include <memory>
#include <utility>
#include "base/bind.h"
#include "base/callback.h"
#include "base/macros.h"
#include "base/threading/sequenced_task_runner_handle.h"
#include "components/autofill/core/common/password_form.h"
#include "components/password_manager/core/browser/form_saver_impl.h"
#include "components/password_manager/core/browser/password_manager_client.h"
#include "components/password_manager/core/browser/password_store.h"
using autofill::PasswordForm;
namespace password_manager {
CredentialManagerPasswordFormManager::CredentialManagerPasswordFormManager(
PasswordManagerClient* client,
std::unique_ptr<PasswordForm> saved_form,
CredentialManagerPasswordFormManagerDelegate* delegate,
std::unique_ptr<FormSaver> form_saver,
std::unique_ptr<FormFetcher> form_fetcher)
: NewPasswordFormManager(client,
std::move(saved_form),
std::move(form_fetcher),
(form_saver ? std::move(form_saver)
: std::make_unique<FormSaverImpl>(
client->GetPasswordStore()))),
delegate_(delegate) {}
CredentialManagerPasswordFormManager::~CredentialManagerPasswordFormManager() =
default;
void CredentialManagerPasswordFormManager::OnFetchCompleted() {
NewPasswordFormManager::OnFetchCompleted();
CreatePendingCredentials();
// Notify the delegate. This might result in deleting |this|, while
// OnFetchCompleted is being called from FormFetcherImpl, owned by |this|. If
// done directly, once OnFetchCompleted returns, the FormFetcherImpl will be
// used after free. Therefore the call is posted to a separate task.
base::SequencedTaskRunnerHandle::Get()->PostTask(
FROM_HERE,
base::BindOnce(&CredentialManagerPasswordFormManager::NotifyDelegate,
weak_factory_.GetWeakPtr()));
}
metrics_util::CredentialSourceType
CredentialManagerPasswordFormManager::GetCredentialSource() {
return metrics_util::CredentialSourceType::kCredentialManagementAPI;
}
void CredentialManagerPasswordFormManager::NotifyDelegate() {
delegate_->OnProvisionalSaveComplete();
}
} // namespace password_manager