1 // Copyright 2019 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 SERVICES_DEVICE_PUBLIC_CPP_HID_FAKE_HID_MANAGER_H_
6 #define SERVICES_DEVICE_PUBLIC_CPP_HID_FAKE_HID_MANAGER_H_
7 
8 #include <map>
9 #include <string>
10 #include <vector>
11 
12 #include "mojo/public/cpp/bindings/pending_associated_remote.h"
13 #include "mojo/public/cpp/bindings/pending_remote.h"
14 #include "mojo/public/cpp/bindings/receiver_set.h"
15 #include "mojo/public/cpp/bindings/remote_set.h"
16 #include "services/device/public/mojom/hid.mojom.h"
17 
18 namespace device {
19 
20 class FakeHidConnection : public mojom::HidConnection {
21  public:
22   FakeHidConnection(
23       mojom::HidDeviceInfoPtr device,
24       mojo::PendingReceiver<mojom::HidConnection> receiver,
25       mojo::PendingRemote<mojom::HidConnectionClient> connection_client,
26       mojo::PendingRemote<mojom::HidConnectionWatcher> watcher);
27   FakeHidConnection(FakeHidConnection&) = delete;
28   FakeHidConnection& operator=(FakeHidConnection&) = delete;
29   ~FakeHidConnection() override;
30 
31   // mojom::HidConnection implementation:
32   void Read(ReadCallback callback) override;
33   void Write(uint8_t report_id,
34              const std::vector<uint8_t>& buffer,
35              WriteCallback callback) override;
36   void GetFeatureReport(uint8_t report_id,
37                         GetFeatureReportCallback callback) override;
38 
39   void SendFeatureReport(uint8_t report_id,
40                          const std::vector<uint8_t>& buffer,
41                          SendFeatureReportCallback callback) override;
42 
43  private:
44   mojo::Receiver<mojom::HidConnection> receiver_;
45   mojom::HidDeviceInfoPtr device_;
46   mojo::Remote<mojom::HidConnectionClient> client_;
47   mojo::Remote<mojom::HidConnectionWatcher> watcher_;
48 };
49 
50 class FakeHidManager : public mojom::HidManager {
51  public:
52   FakeHidManager();
53   FakeHidManager(FakeHidManager&) = delete;
54   FakeHidManager& operator=(FakeHidManager&) = delete;
55   ~FakeHidManager() override;
56 
57   void Bind(mojo::PendingReceiver<mojom::HidManager> receiver);
58 
59   // mojom::HidManager implementation:
60   void AddReceiver(mojo::PendingReceiver<mojom::HidManager> receiver) override;
61   void GetDevicesAndSetClient(
62       mojo::PendingAssociatedRemote<mojom::HidManagerClient> client,
63       GetDevicesCallback callback) override;
64   void GetDevices(GetDevicesCallback callback) override;
65   void Connect(
66       const std::string& device_guid,
67       mojo::PendingRemote<mojom::HidConnectionClient> connection_client,
68       mojo::PendingRemote<mojom::HidConnectionWatcher> watcher,
69       ConnectCallback callback) override;
70 
71   mojom::HidDeviceInfoPtr CreateAndAddDevice(
72       const std::string& physical_device_id,
73       uint16_t vendor_id,
74       uint16_t product_id,
75       const std::string& product_name,
76       const std::string& serial_number,
77       mojom::HidBusType bus_type);
78   mojom::HidDeviceInfoPtr CreateAndAddDeviceWithTopLevelUsage(
79       const std::string& physical_device_id,
80       uint16_t vendor_id,
81       uint16_t product_id,
82       const std::string& product_name,
83       const std::string& serial_number,
84       mojom::HidBusType bus_type,
85       uint16_t usage_page,
86       uint16_t usage);
87   void AddDevice(mojom::HidDeviceInfoPtr device);
88   void RemoveDevice(const std::string& guid);
89   void SimulateConnectionError();
90 
91  private:
92   std::map<std::string, mojom::HidDeviceInfoPtr> devices_;
93   mojo::AssociatedRemoteSet<mojom::HidManagerClient> clients_;
94   mojo::ReceiverSet<mojom::HidManager> receivers_;
95 };
96 
97 }  // namespace device
98 
99 #endif  // SERVICES_DEVICE_PUBLIC_CPP_HID_FAKE_HID_MANAGER_H_
100