WebAuthnProcess.cpp [plain text]
#include "config.h"
#include "WebAuthnProcess.h"
#if ENABLE(WEB_AUTHN)
#include "Logging.h"
#include "MockAuthenticatorManager.h"
#include "WebAuthnConnectionToWebProcess.h"
#include "WebAuthnProcessCreationParameters.h"
#include <wtf/text/AtomString.h>
namespace WebKit {
using namespace WebCore;
WebAuthnProcess::WebAuthnProcess(AuxiliaryProcessInitializationParameters&& parameters)
: m_authenticatorManager(makeUniqueRef<AuthenticatorManager>())
{
initialize(WTFMove(parameters));
m_authenticatorManager->enableModernWebAuthentication();
}
WebAuthnProcess::~WebAuthnProcess()
{
}
void WebAuthnProcess::createWebAuthnConnectionToWebProcess(ProcessIdentifier identifier, CompletionHandler<void(Optional<IPC::Attachment>&&)>&& completionHandler)
{
auto ipcConnection = createIPCConnectionPair();
if (!ipcConnection) {
completionHandler({ });
return;
}
auto newConnection = WebAuthnConnectionToWebProcess::create(*this, identifier, ipcConnection->first);
ASSERT(!m_webProcessConnections.contains(identifier));
m_webProcessConnections.add(identifier, WTFMove(newConnection));
completionHandler(WTFMove(ipcConnection->second));
}
void WebAuthnProcess::removeWebAuthnConnectionToWebProcess(WebAuthnConnectionToWebProcess& connection)
{
ASSERT(m_webProcessConnections.contains(connection.webProcessIdentifier()));
m_webProcessConnections.remove(connection.webProcessIdentifier());
}
void WebAuthnProcess::connectionToWebProcessClosed(IPC::Connection& connection)
{
}
bool WebAuthnProcess::shouldTerminate()
{
return m_webProcessConnections.isEmpty();
}
void WebAuthnProcess::didClose(IPC::Connection&)
{
ASSERT(RunLoop::isMain());
}
void WebAuthnProcess::lowMemoryHandler(Critical critical)
{
WTF::releaseFastMallocFreeMemory();
}
void WebAuthnProcess::initializeWebAuthnProcess(WebAuthnProcessCreationParameters&& parameters)
{
WTF::Thread::setCurrentThreadIsUserInitiated();
AtomString::init();
}
void WebAuthnProcess::prepareToSuspend(bool isSuspensionImminent, CompletionHandler<void()>&& completionHandler)
{
RELEASE_LOG(ProcessSuspension, "%p - WebAuthnProcess::prepareToSuspend(), isSuspensionImminent: %d", this, isSuspensionImminent);
lowMemoryHandler(Critical::Yes);
}
void WebAuthnProcess::processDidResume()
{
RELEASE_LOG(ProcessSuspension, "%p - WebAuthnProcess::processDidResume()", this);
resume();
}
void WebAuthnProcess::resume()
{
}
void WebAuthnProcess::processDidTransitionToForeground()
{
}
void WebAuthnProcess::processDidTransitionToBackground()
{
}
WebAuthnConnectionToWebProcess* WebAuthnProcess::webProcessConnection(ProcessIdentifier identifier) const
{
return m_webProcessConnections.get(identifier);
}
void WebAuthnProcess::setMockWebAuthenticationConfiguration(WebCore::MockWebAuthenticationConfiguration&& configuration)
{
if (!m_authenticatorManager->isMock()) {
m_authenticatorManager = makeUniqueRef<MockAuthenticatorManager>(WTFMove(configuration));
m_authenticatorManager->enableModernWebAuthentication();
return;
}
static_cast<MockAuthenticatorManager*>(&m_authenticatorManager)->setTestConfiguration(WTFMove(configuration));
}
}
#endif // ENABLE(WEB_AUTHN)