#ifndef CHROME_BROWSER_ASH_AUTH_LEGACY_FINGERPRINT_ENGINE_H_
#define CHROME_BROWSER_ASH_AUTH_LEGACY_FINGERPRINT_ENGINE_H_
#include <memory>
#include <optional>
#include "base/functional/callback_forward.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/notreached.h"
#include "chrome/browser/ash/login/quick_unlock/quick_unlock_utils.h"
#include "chromeos/ash/components/login/auth/public/auth_callbacks.h"
class AccountId;
class PrefService;
namespace ash {
class UserContext;
class AuthPerformer;
class LegacyFingerprintEngine {
public:
enum class Purpose { kAny, kUnlock, kWebAuthn };
explicit LegacyFingerprintEngine(ash::AuthPerformer* auth_performer);
LegacyFingerprintEngine(const LegacyFingerprintEngine&) = delete;
LegacyFingerprintEngine& operator=(const LegacyFingerprintEngine&) = delete;
virtual ~LegacyFingerprintEngine();
LegacyFingerprintEngine::Purpose FromQuickUnlockPurpose(
quick_unlock::Purpose purpose) const;
quick_unlock::Purpose ToQuickUnlockPurpose(
LegacyFingerprintEngine::Purpose purpose) const;
bool IsFingerprintDisabledByPolicy(
const PrefService& pref_service,
LegacyFingerprintEngine::Purpose purpose) const;
bool IsFingerprintEnabled(const PrefService& pref_service,
LegacyFingerprintEngine::Purpose purpose) const;
bool IsFingerprintAvailable(Purpose purpose, const AccountId& account_id);
void PrepareLegacyFingerprintFactor(std::unique_ptr<UserContext> user_context,
AuthOperationCallback callback);
void TerminateLegacyFingerprintFactor(
std::unique_ptr<UserContext> user_context,
AuthOperationCallback callback);
private:
const raw_ptr<AuthPerformer> auth_performer_;
base::WeakPtrFactory<LegacyFingerprintEngine> weak_factory_{this};
};
}
#endif