virtual_fido_device_discovery.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. // Copyright 2020 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. //
  5. #ifndef DEVICE_FIDO_VIRTUAL_FIDO_DEVICE_DISCOVERY_H_
  6. #define DEVICE_FIDO_VIRTUAL_FIDO_DEVICE_DISCOVERY_H_
  7. #include "base/memory/scoped_refptr.h"
  8. #include "base/memory/weak_ptr.h"
  9. #include "device/fido/fido_discovery_factory.h"
  10. #include "device/fido/virtual_ctap2_device.h"
  11. namespace device::test {
  12. // A FidoDeviceDiscovery that always vends a single |VirtualFidoDevice|.
  13. class VirtualFidoDeviceDiscovery
  14. : public FidoDeviceDiscovery,
  15. public base::SupportsWeakPtr<VirtualFidoDeviceDiscovery> {
  16. public:
  17. // Trace contains a history of the discovery objects that have been created by
  18. // a given factory. VirtualFidoDeviceDiscovery gets a reference to this object
  19. // and keeps its information up to date.
  20. struct Trace : public base::RefCounted<Trace> {
  21. Trace();
  22. Trace(const Trace&) = delete;
  23. Trace& operator=(const Trace&) = delete;
  24. struct Discovery {
  25. bool is_stopped = false;
  26. bool is_destroyed = false;
  27. };
  28. std::vector<Discovery> discoveries;
  29. private:
  30. friend class base::RefCounted<Trace>;
  31. ~Trace();
  32. };
  33. VirtualFidoDeviceDiscovery(
  34. scoped_refptr<Trace> trace,
  35. size_t trace_index,
  36. FidoTransportProtocol transport,
  37. scoped_refptr<VirtualFidoDevice::State> state,
  38. ProtocolVersion supported_protocol,
  39. const VirtualCtap2Device::Config& ctap2_config,
  40. std::unique_ptr<EventStream<bool>> disconnect_events);
  41. ~VirtualFidoDeviceDiscovery() override;
  42. VirtualFidoDeviceDiscovery(const VirtualFidoDeviceDiscovery& other) = delete;
  43. VirtualFidoDeviceDiscovery& operator=(
  44. const VirtualFidoDeviceDiscovery& other) = delete;
  45. protected:
  46. void StartInternal() override;
  47. bool MaybeStop() override;
  48. private:
  49. void Disconnect(bool _);
  50. scoped_refptr<Trace> trace_;
  51. const size_t trace_index_;
  52. scoped_refptr<VirtualFidoDevice::State> state_;
  53. const ProtocolVersion supported_protocol_;
  54. const VirtualCtap2Device::Config ctap2_config_;
  55. std::unique_ptr<EventStream<bool>> disconnect_events_;
  56. std::string id_;
  57. };
  58. } // namespace device::test
  59. #endif // DEVICE_FIDO_VIRTUAL_FIDO_DEVICE_DISCOVERY_H_