blob: 2e3b7e528d0610150869a8db731000a2a681b304 [file] [log] [blame]
// Copyright 2021 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 CHROME_BROWSER_ASH_PCIE_PERIPHERAL_ASH_USB_DETECTOR_H_
#define CHROME_BROWSER_ASH_PCIE_PERIPHERAL_ASH_USB_DETECTOR_H_
#include "ash/public/cpp/ash_public_export.h"
#include "mojo/public/cpp/bindings/associated_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "services/device/public/mojom/usb_device.mojom.h"
#include "services/device/public/mojom/usb_manager.mojom.h"
#include "services/device/public/mojom/usb_manager_client.mojom.h"
namespace ash {
// Detects usb devices when they are connected and notifies ash. Similar to
// CrosUsbDetector and WebUsbDetector.
class ASH_PUBLIC_EXPORT AshUsbDetector
: public device::mojom::UsbDeviceManagerClient {
public:
AshUsbDetector();
~AshUsbDetector() override;
static AshUsbDetector* Get();
// Connect to the device manager to be notified of connection/removal.
// Used during browser startup, after connection errors and to setup a fake
// device manager during testing.
void ConnectToDeviceManager();
private:
friend class AshUsbDetectorTest;
int32_t GetOnDeviceCheckedCountForTesting();
// device::mojom::UsbDeviceManagerClient
void OnDeviceAdded(device::mojom::UsbDeviceInfoPtr device_info) override;
void OnDeviceRemoved(device::mojom::UsbDeviceInfoPtr device) override;
void OnListAttachedDevices(
std::vector<device::mojom::UsbDeviceInfoPtr> devices);
void OnDeviceChecked(device::mojom::UsbDeviceInfoPtr device_info,
bool allowed);
void OnDeviceManagerConnectionError();
void SetDeviceManagerForTesting(
mojo::PendingRemote<device::mojom::UsbDeviceManager> device_manager);
mojo::Remote<device::mojom::UsbDeviceManager> device_manager_;
mojo::AssociatedReceiver<device::mojom::UsbDeviceManagerClient>
client_receiver_{this};
int32_t on_device_checked_counter_for_testing_ = 0;
bool is_testing_ = false;
// WeakPtrFactory to use for callbacks.
base::WeakPtrFactory<AshUsbDetector> weak_ptr_factory_{this};
};
} // namespace ash
#endif // CHROME_BROWSER_ASH_PCIE_PERIPHERAL_ASH_USB_DETECTOR_H_