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