blob: ad36259717ae406fb7ab830a0f444203d1bfaf69 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef DEVICE_FIDO_SCOPED_VIRTUAL_FIDO_DEVICE_H_
#define DEVICE_FIDO_SCOPED_VIRTUAL_FIDO_DEVICE_H_
#include <memory>
#include "base/macros.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"
namespace device {
namespace test {
// Creating a |ScopedVirtualFidoDevice| causes normal device discovery to be
// hijacked while the object is in scope. Instead a |VirtualFidoDevice| will
// always be discovered. This object pretends to be a HID device.
class ScopedVirtualFidoDevice
: public ::device::internal::ScopedFidoDiscoveryFactory {
public:
ScopedVirtualFidoDevice();
~ScopedVirtualFidoDevice() override;
// Sets the FidoTransportProtocol of the FidoDiscovery to be instantiated by
// this ScopedVirtualFidoDevice. The default is
// FidoTransportProtocol::kUsbHumanInterfaceDevice.
//
// The FidoTransportProtocol of the device instantiated by the FidoDiscovery
// must be set separately in mutable_state().
void SetTransport(FidoTransportProtocol transport);
void SetSupportedProtocol(ProtocolVersion supported_protocol);
// SetCtap2Config sets the configuration for |VirtualCtap2Device|s and sets
// the supported protocol to CTAP2.
void SetCtap2Config(const VirtualCtap2Device::Config& config);
VirtualFidoDevice::State* mutable_state();
protected:
std::unique_ptr<FidoDiscoveryBase> CreateFidoDiscovery(
FidoTransportProtocol transport,
::service_manager::Connector* connector) override;
private:
ProtocolVersion supported_protocol_ = ProtocolVersion::kU2f;
FidoTransportProtocol transport_ =
FidoTransportProtocol::kUsbHumanInterfaceDevice;
VirtualCtap2Device::Config ctap2_config_;
scoped_refptr<VirtualFidoDevice::State> state_;
DISALLOW_COPY_AND_ASSIGN(ScopedVirtualFidoDevice);
};
} // namespace test
} // namespace device
#endif // DEVICE_FIDO_SCOPED_VIRTUAL_FIDO_DEVICE_H_