#ifndef NET_DEVICE_BOUND_SESSIONS_REGISTRATION_FETCHER_H_
#define NET_DEVICE_BOUND_SESSIONS_REGISTRATION_FETCHER_H_
#include <optional>
#include <string>
#include "base/functional/callback_forward.h"
#include "components/unexportable_keys/unexportable_key_service.h"
#include "net/base/isolation_info.h"
#include "net/base/net_errors.h"
#include "net/base/net_export.h"
#include "net/device_bound_sessions/registration_fetcher_param.h"
#include "net/device_bound_sessions/registration_result.h"
#include "net/device_bound_sessions/session.h"
#include "net/device_bound_sessions/session_error.h"
#include "net/http/http_response_headers.h"
#include "net/log/net_log_source.h"
#include "url/gurl.h"
namespace net {
class URLRequestContext;
}
namespace unexportable_keys {
class UnexportableKeyService;
}
namespace net::device_bound_sessions {
class SessionService;
class RegistrationRequestParam;
class NET_EXPORT RegistrationFetcher {
public:
using RegistrationCompleteCallback =
base::OnceCallback<void(RegistrationFetcher*, RegistrationResult)>;
using FetcherType =
base::RepeatingCallback<void(RegistrationCompleteCallback)>;
using RegistrationToken = std::string;
static std::unique_ptr<RegistrationFetcher> CreateFetcher(
RegistrationRequestParam& request_params,
SessionService& session_service,
unexportable_keys::UnexportableKeyService& key_service,
const URLRequestContext* context,
const IsolationInfo& isolation_info,
std::optional<NetLogSource> net_log_source,
const std::optional<url::Origin>& original_request_initiator);
virtual void StartCreateTokenAndFetch(
RegistrationRequestParam& registration_params,
base::span<const crypto::SignatureVerifier::SignatureAlgorithm>
supported_algos,
RegistrationCompleteCallback callback) = 0;
virtual void StartFetchWithExistingKey(
RegistrationRequestParam& request_params,
unexportable_keys::UnexportableKeyId key_id,
RegistrationCompleteCallback callback) = 0;
virtual void StartFetchWithFederatedKey(
RegistrationRequestParam& request_params,
unexportable_keys::UnexportableKeyId key_id,
const GURL& provider_url,
RegistrationCompleteCallback callback) = 0;
static void CreateRegistrationTokenAsyncForTesting(
unexportable_keys::UnexportableKeyService& unexportable_key_service,
std::string challenge,
std::optional<std::string> authorization,
base::OnceCallback<void(std::optional<RegistrationToken>)> callback);
static void SetFetcherForTesting(FetcherType* fetcher);
virtual ~RegistrationFetcher() = default;
};
}
#endif