#ifndef COMPONENTS_DEVICE_REAUTH_DEVICE_AUTHENTICATOR_COMMON_H_
#define COMPONENTS_DEVICE_REAUTH_DEVICE_AUTHENTICATOR_COMMON_H_
#include <optional>
#include "base/gtest_prod_util.h"
#include "base/memory/weak_ptr.h"
#include "components/device_reauth/device_authenticator.h"
#include "components/keyed_service/core/keyed_service.h"
class DeviceAuthenticatorProxy : public KeyedService {
public:
DeviceAuthenticatorProxy();
~DeviceAuthenticatorProxy() override;
std::optional<base::TimeTicks> GetLastGoodAuthTimestamp() {
return last_good_auth_timestamp_;
}
void UpdateLastGoodAuthTimestamp() {
last_good_auth_timestamp_ = base::TimeTicks::Now();
}
base::WeakPtr<DeviceAuthenticatorProxy> GetWeakPtr() {
return weak_ptr_factory_.GetWeakPtr();
}
private:
std::optional<base::TimeTicks> last_good_auth_timestamp_;
base::WeakPtrFactory<DeviceAuthenticatorProxy> weak_ptr_factory_{this};
};
class DeviceAuthenticatorCommon : public device_reauth::DeviceAuthenticator {
public:
DeviceAuthenticatorCommon(DeviceAuthenticatorProxy* proxy,
base::TimeDelta auth_validity_period,
const std::string& auth_result_histogram);
protected:
~DeviceAuthenticatorCommon() override;
bool NeedsToAuthenticate() const;
void RecordAuthenticationTimeIfSuccessful(bool success);
void RecordAuthResultSkipped();
private:
FRIEND_TEST_ALL_PREFIXES(ChromeDeviceAuthenticatorFactoryTest,
NeedAuthentication);
base::WeakPtr<DeviceAuthenticatorProxy> device_authenticator_proxy_;
base::TimeDelta auth_validity_period_;
std::string auth_result_histogram_;
};
#endif