#ifndef DEVICE_FIDO_VIRTUAL_FIDO_DEVICE_FACTORY_H_
#define DEVICE_FIDO_VIRTUAL_FIDO_DEVICE_FACTORY_H_
#include <memory>
#include <utility>
#include <vector>
#include "base/memory/scoped_refptr.h"
#include "device/fido/fido_constants.h"
#include "device/fido/fido_discovery_factory.h"
#include "device/fido/fido_transport_protocol.h"
#include "device/fido/virtual_ctap2_device.h"
#include "device/fido/virtual_fido_device.h"
#include "device/fido/virtual_fido_device_discovery.h"
namespace device {
namespace test {
class VirtualFidoDeviceFactory : public device::FidoDiscoveryFactory {
public:
VirtualFidoDeviceFactory();
VirtualFidoDeviceFactory(const VirtualFidoDeviceFactory&) = delete;
VirtualFidoDeviceFactory& operator=(const VirtualFidoDeviceFactory&) = delete;
~VirtualFidoDeviceFactory() override;
void SetTransport(FidoTransportProtocol transport);
void SetSupportedProtocol(ProtocolVersion supported_protocol);
void SetCtap2Config(const VirtualCtap2Device::Config& config);
VirtualFidoDevice::State* mutable_state();
scoped_refptr<VirtualFidoDeviceDiscovery::Trace> trace();
protected:
std::vector<std::unique_ptr<FidoDiscoveryBase>> Create(
FidoTransportProtocol transport) override;
bool IsTestOverride() override;
private:
ProtocolVersion supported_protocol_ = ProtocolVersion::kU2f;
FidoTransportProtocol transport_ =
FidoTransportProtocol::kUsbHumanInterfaceDevice;
VirtualCtap2Device::Config ctap2_config_;
scoped_refptr<VirtualFidoDevice::State> state_ = new VirtualFidoDevice::State;
scoped_refptr<VirtualFidoDeviceDiscovery::Trace> trace_ =
new VirtualFidoDeviceDiscovery::Trace;
};
}
}
#endif