blob: ac44ed1766c9dad160e842671e238e82d72c17f8 [file] [log] [blame]
// Copyright 2017 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_U2F_FAKE_HID_IMPL_FOR_TESTING_H_
#define DEVICE_U2F_FAKE_HID_IMPL_FOR_TESTING_H_
#include <map>
#include <string>
#include <vector>
#include "base/bind.h"
#include "base/containers/span.h"
#include "base/memory/ptr_util.h"
#include "mojo/public/cpp/bindings/binding_set.h"
#include "mojo/public/cpp/bindings/interface_ptr_set.h"
#include "mojo/public/cpp/bindings/strong_binding.h"
#include "services/device/public/interfaces/hid.mojom.h"
#include "testing/gmock/include/gmock/gmock.h"
namespace device {
class MockHidConnection : public device::mojom::HidConnection {
public:
explicit MockHidConnection(device::mojom::HidDeviceInfoPtr device,
device::mojom::HidConnectionRequest request,
std::vector<uint8_t> connection_channel_id);
~MockHidConnection() override;
MOCK_METHOD1(ReadPtr, void(ReadCallback* callback));
MOCK_METHOD3(WritePtr,
void(uint8_t report_id,
const std::vector<uint8_t>& buffer,
WriteCallback* callback));
void Read(ReadCallback callback) override;
void Write(uint8_t report_id,
const std::vector<uint8_t>& buffer,
WriteCallback callback) override;
void GetFeatureReport(uint8_t report_id,
GetFeatureReportCallback callback) override;
void SendFeatureReport(uint8_t report_id,
const std::vector<uint8_t>& buffer,
SendFeatureReportCallback callback) override;
void SetNonce(base::span<uint8_t const> nonce);
const std::vector<uint8_t>& connection_channel_id() const {
return connection_channel_id_;
}
const std::vector<uint8_t>& nonce() const { return nonce_; }
private:
mojo::Binding<device::mojom::HidConnection> binding_;
device::mojom::HidDeviceInfoPtr device_;
std::vector<uint8_t> nonce_;
std::vector<uint8_t> connection_channel_id_;
};
class FakeHidConnection : public device::mojom::HidConnection {
public:
explicit FakeHidConnection(device::mojom::HidDeviceInfoPtr device);
~FakeHidConnection() override;
// device::mojom::HidConnection implemenation:
void Read(ReadCallback callback) override;
void Write(uint8_t report_id,
const std::vector<uint8_t>& buffer,
WriteCallback callback) override;
void GetFeatureReport(uint8_t report_id,
GetFeatureReportCallback callback) override;
void SendFeatureReport(uint8_t report_id,
const std::vector<uint8_t>& buffer,
SendFeatureReportCallback callback) override;
static bool mock_connection_error_;
private:
device::mojom::HidDeviceInfoPtr device_;
};
class FakeHidManager : public device::mojom::HidManager {
public:
FakeHidManager();
~FakeHidManager() override;
// device::mojom::HidManager implementation:
void GetDevicesAndSetClient(
device::mojom::HidManagerClientAssociatedPtrInfo client,
GetDevicesCallback callback) override;
void GetDevices(GetDevicesCallback callback) override;
void Connect(const std::string& device_guid,
ConnectCallback callback) override;
void AddBinding(mojo::ScopedMessagePipeHandle handle);
void AddBinding2(device::mojom::HidManagerRequest request);
void AddDevice(device::mojom::HidDeviceInfoPtr device);
void AddDeviceAndSetConnection(device::mojom::HidDeviceInfoPtr device,
device::mojom::HidConnectionPtr connection);
void RemoveDevice(const std::string device_guid);
private:
std::map<std::string, device::mojom::HidDeviceInfoPtr> devices_;
std::map<std::string, device::mojom::HidConnectionPtr> connections_;
mojo::AssociatedInterfacePtrSet<device::mojom::HidManagerClient> clients_;
mojo::BindingSet<device::mojom::HidManager> bindings_;
};
} // namespace device
#endif // DEVICE_U2F_FAKE_HID_IMPL_FOR_TESTING_H_