#pragma once
#if ENABLE(WEB_AUTHN)
#include "AuxiliaryProcess.h"
#include "WebAuthnProcessMessages.h"
#include <wtf/Function.h>
#include <wtf/MemoryPressureHandler.h>
#include <wtf/UniqueRef.h>
#include <wtf/WeakPtr.h>
namespace WebCore {
struct MockWebAuthenticationConfiguration;
}
namespace WebKit {
class AuthenticatorManager;
class WebAuthnConnectionToWebProcess;
struct WebAuthnProcessCreationParameters;
class WebAuthnProcess : public AuxiliaryProcess, public ThreadSafeRefCounted<WebAuthnProcess>, public CanMakeWeakPtr<WebAuthnProcess> {
WTF_MAKE_NONCOPYABLE(WebAuthnProcess);
public:
explicit WebAuthnProcess(AuxiliaryProcessInitializationParameters&&);
~WebAuthnProcess();
static constexpr ProcessType processType = ProcessType::WebAuthn;
void removeWebAuthnConnectionToWebProcess(WebAuthnConnectionToWebProcess&);
void prepareToSuspend(bool isSuspensionImminent, CompletionHandler<void()>&&);
void processDidResume();
void resume();
void connectionToWebProcessClosed(IPC::Connection&);
WebAuthnConnectionToWebProcess* webProcessConnection(WebCore::ProcessIdentifier) const;
AuthenticatorManager& authenticatorManager() { return m_authenticatorManager.get(); }
void setMockWebAuthenticationConfiguration(WebCore::MockWebAuthenticationConfiguration&&);
private:
void lowMemoryHandler(Critical);
void initializeProcess(const AuxiliaryProcessInitializationParameters&) override;
void initializeProcessName(const AuxiliaryProcessInitializationParameters&) override;
void initializeSandbox(const AuxiliaryProcessInitializationParameters&, SandboxInitializationParameters&) override;
bool shouldTerminate() override;
void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override;
void didClose(IPC::Connection&) override;
void initializeWebAuthnProcess(WebAuthnProcessCreationParameters&&);
void createWebAuthnConnectionToWebProcess(WebCore::ProcessIdentifier, CompletionHandler<void(Optional<IPC::Attachment>&&)>&&);
void processDidTransitionToForeground();
void processDidTransitionToBackground();
HashMap<WebCore::ProcessIdentifier, Ref<WebAuthnConnectionToWebProcess>> m_webProcessConnections;
UniqueRef<AuthenticatorManager> m_authenticatorManager;
};
}
#endif // ENABLE(WEB_AUTHN)