// services/device/public/mojom/input_service.mojom-blink-test-utils.h is auto generated by mojom_bindings_generator.py, do not edit

// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SERVICES_DEVICE_PUBLIC_MOJOM_INPUT_SERVICE_MOJOM_BLINK_TEST_UTILS_H_
#define SERVICES_DEVICE_PUBLIC_MOJOM_INPUT_SERVICE_MOJOM_BLINK_TEST_UTILS_H_

#include "services/device/public/mojom/input_service.mojom-blink.h"
#include "third_party/blink/public/platform/web_common.h"


namespace device::mojom::blink {


class BLINK_PLATFORM_EXPORT InputDeviceManagerClientInterceptorForTesting : public InputDeviceManagerClient {
  virtual InputDeviceManagerClient* GetForwardingInterface() = 0;
  void InputDeviceAdded(InputDeviceInfoPtr device_info) override;
  void InputDeviceRemoved(const WTF::String& id) override;
};
class BLINK_PLATFORM_EXPORT InputDeviceManagerClientAsyncWaiter {
 public:
  explicit InputDeviceManagerClientAsyncWaiter(InputDeviceManagerClient* proxy);

  InputDeviceManagerClientAsyncWaiter(const InputDeviceManagerClientAsyncWaiter&) = delete;
  InputDeviceManagerClientAsyncWaiter& operator=(const InputDeviceManagerClientAsyncWaiter&) = delete;

  ~InputDeviceManagerClientAsyncWaiter();

 private:
  InputDeviceManagerClient* const proxy_;
};


class BLINK_PLATFORM_EXPORT InputDeviceManagerInterceptorForTesting : public InputDeviceManager {
  virtual InputDeviceManager* GetForwardingInterface() = 0;
  void GetDevicesAndSetClient(::mojo::PendingAssociatedRemote<InputDeviceManagerClient> client, GetDevicesAndSetClientCallback callback) override;
  void GetDevices(GetDevicesCallback callback) override;
};
class BLINK_PLATFORM_EXPORT InputDeviceManagerAsyncWaiter {
 public:
  explicit InputDeviceManagerAsyncWaiter(InputDeviceManager* proxy);

  InputDeviceManagerAsyncWaiter(const InputDeviceManagerAsyncWaiter&) = delete;
  InputDeviceManagerAsyncWaiter& operator=(const InputDeviceManagerAsyncWaiter&) = delete;

  ~InputDeviceManagerAsyncWaiter();
  void GetDevicesAndSetClient(
      ::mojo::PendingAssociatedRemote<InputDeviceManagerClient> client, WTF::Vector<InputDeviceInfoPtr>* out_devices);
  WTF::Vector<InputDeviceInfoPtr> GetDevicesAndSetClient(::mojo::PendingAssociatedRemote<InputDeviceManagerClient> client);
  void GetDevices(
      WTF::Vector<InputDeviceInfoPtr>* out_devices);
  WTF::Vector<InputDeviceInfoPtr> GetDevices();

 private:
  InputDeviceManager* const proxy_;
};




}  // device::mojom::blink

#endif  // SERVICES_DEVICE_PUBLIC_MOJOM_INPUT_SERVICE_MOJOM_BLINK_TEST_UTILS_H_