blob: 0d7fbd5eefa9070db648fbb921569c158aa81d8b [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_U2F_HID_DISCOVERY_H_
#define DEVICE_U2F_U2F_HID_DISCOVERY_H_
#include <memory>
#include <vector>
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "device/u2f/u2f_discovery.h"
#include "mojo/public/cpp/bindings/associated_binding.h"
#include "services/device/public/cpp/hid/hid_device_filter.h"
#include "services/device/public/interfaces/hid.mojom.h"
namespace service_manager {
class Connector;
}
namespace device {
// TODO(crbug/769631): Now the U2F is talking to HID via mojo, once the U2F
// servicification is unblocked, we'll move U2F back to //service/device/.
// Then it will talk to HID via C++ as part of servicifying U2F.
class U2fHidDiscovery : public U2fDiscovery, device::mojom::HidManagerClient {
public:
explicit U2fHidDiscovery(service_manager::Connector* connector);
~U2fHidDiscovery() override;
// U2fDiscovery:
void Start() override;
void Stop() override;
private:
// device::mojom::HidManagerClient implementation:
void DeviceAdded(device::mojom::HidDeviceInfoPtr device_info) override;
void DeviceRemoved(device::mojom::HidDeviceInfoPtr device_info) override;
void OnGetDevices(std::vector<device::mojom::HidDeviceInfoPtr> devices);
service_manager::Connector* connector_;
device::mojom::HidManagerPtr hid_manager_;
mojo::AssociatedBinding<device::mojom::HidManagerClient> binding_;
HidDeviceFilter filter_;
base::WeakPtrFactory<U2fHidDiscovery> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(U2fHidDiscovery);
};
} // namespace device
#endif // DEVICE_U2F_U2F_HID_DISCOVERY_H_