AuthenticatorCoordinatorClient.h [plain text]
#pragma once
#if ENABLE(WEB_AUTHN)
#include "ExceptionData.h"
#include <wtf/CompletionHandler.h>
#include <wtf/HashMap.h>
#include <wtf/WeakPtr.h>
namespace WebCore {
class DeferredPromise;
struct PublicKeyCredentialCreationOptions;
struct PublicKeyCredentialData;
struct PublicKeyCredentialRequestOptions;
using RequestCompletionHandler = CompletionHandler<void(const WebCore::PublicKeyCredentialData&, const WebCore::ExceptionData&)>;
using QueryCompletionHandler = CompletionHandler<void(bool)>;
class WEBCORE_EXPORT AuthenticatorCoordinatorClient : public CanMakeWeakPtr<AuthenticatorCoordinatorClient> {
WTF_MAKE_FAST_ALLOCATED;
WTF_MAKE_NONCOPYABLE(AuthenticatorCoordinatorClient);
public:
AuthenticatorCoordinatorClient() = default;
virtual ~AuthenticatorCoordinatorClient() = default;
virtual void makeCredential(const Vector<uint8_t>& hash, const PublicKeyCredentialCreationOptions&, RequestCompletionHandler&&) = 0;
virtual void getAssertion(const Vector<uint8_t>& hash, const PublicKeyCredentialRequestOptions&, RequestCompletionHandler&&) = 0;
virtual void isUserVerifyingPlatformAuthenticatorAvailable(QueryCompletionHandler&&) = 0;
void requestReply(const WebCore::PublicKeyCredentialData&, const WebCore::ExceptionData&);
void isUserVerifyingPlatformAuthenticatorAvailableReply(uint64_t messageId, bool);
protected:
bool setRequestCompletionHandler(RequestCompletionHandler&&);
uint64_t addQueryCompletionHandler(QueryCompletionHandler&&);
private:
RequestCompletionHandler m_pendingCompletionHandler;
uint64_t m_accumulatedMessageId { 1 };
HashMap<uint64_t, QueryCompletionHandler> m_pendingQueryCompletionHandlers;
};
}
#endif // ENABLE(WEB_AUTHN)