fido_hid_discovery.h 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // Copyright 2017 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. #ifndef DEVICE_FIDO_HID_FIDO_HID_DISCOVERY_H_
  5. #define DEVICE_FIDO_HID_FIDO_HID_DISCOVERY_H_
  6. #include <memory>
  7. #include <vector>
  8. #include "base/callback.h"
  9. #include "base/component_export.h"
  10. #include "base/containers/flat_set.h"
  11. #include "base/memory/weak_ptr.h"
  12. #include "device/fido/fido_device_discovery.h"
  13. #include "mojo/public/cpp/bindings/associated_receiver.h"
  14. #include "mojo/public/cpp/bindings/pending_receiver.h"
  15. #include "mojo/public/cpp/bindings/remote.h"
  16. #include "services/device/public/cpp/hid/hid_device_filter.h"
  17. #include "services/device/public/mojom/hid.mojom-forward.h"
  18. namespace device {
  19. // VidPid represents an HID vendor and product ID pair.
  20. struct COMPONENT_EXPORT(DEVICE_FIDO) VidPid {
  21. uint16_t vid;
  22. uint16_t pid;
  23. };
  24. COMPONENT_EXPORT(DEVICE_FIDO)
  25. bool operator==(const VidPid& lhs, const VidPid& rhs);
  26. COMPONENT_EXPORT(DEVICE_FIDO)
  27. bool operator<(const VidPid& lhs, const VidPid& rhs);
  28. class COMPONENT_EXPORT(DEVICE_FIDO) FidoHidDiscovery
  29. : public FidoDeviceDiscovery,
  30. device::mojom::HidManagerClient {
  31. public:
  32. explicit FidoHidDiscovery(base::flat_set<VidPid> ignore_list = {});
  33. FidoHidDiscovery(const FidoHidDiscovery&) = delete;
  34. FidoHidDiscovery& operator=(const FidoHidDiscovery&) = delete;
  35. ~FidoHidDiscovery() override;
  36. // Sets a callback for this class to use when binding a HidManager receiver.
  37. using HidManagerBinder =
  38. base::RepeatingCallback<void(mojo::PendingReceiver<mojom::HidManager>)>;
  39. static void SetHidManagerBinder(HidManagerBinder binder);
  40. private:
  41. // FidoDeviceDiscovery:
  42. void StartInternal() override;
  43. // device::mojom::HidManagerClient implementation:
  44. void DeviceAdded(device::mojom::HidDeviceInfoPtr device_info) override;
  45. void DeviceRemoved(device::mojom::HidDeviceInfoPtr device_info) override;
  46. void DeviceChanged(device::mojom::HidDeviceInfoPtr device_info) override;
  47. void OnGetDevices(std::vector<device::mojom::HidDeviceInfoPtr> devices);
  48. mojo::Remote<device::mojom::HidManager> hid_manager_;
  49. mojo::AssociatedReceiver<device::mojom::HidManagerClient> receiver_{this};
  50. HidDeviceFilter filter_;
  51. base::flat_set<VidPid> ignore_list_;
  52. base::WeakPtrFactory<FidoHidDiscovery> weak_factory_{this};
  53. };
  54. } // namespace device
  55. #endif // DEVICE_FIDO_HID_FIDO_HID_DISCOVERY_H_