chromium/services/device/usb/webusb_descriptors.h

// Copyright 2015 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_USB_WEBUSB_DESCRIPTORS_H_
#define SERVICES_DEVICE_USB_WEBUSB_DESCRIPTORS_H_

#include <stdint.h>

#include <optional>

#include "base/containers/span.h"
#include "base/functional/callback_forward.h"
#include "base/memory/scoped_refptr.h"

class GURL;

namespace device {

class UsbDeviceHandle;

struct WebUsbPlatformCapabilityDescriptor {};

bool ParseWebUsbUrlDescriptor(base::span<const uint8_t> bytes, GURL* output);

void ReadWebUsbLandingPage(
    uint8_t vendor_code,
    uint8_t landing_page_id,
    scoped_refptr<UsbDeviceHandle> device_handle,
    base::OnceCallback<void(const GURL& landing_page)> callback);

void ReadWebUsbCapabilityDescriptor(
    scoped_refptr<UsbDeviceHandle> device_handle,
    base::OnceCallback<void(
        const std::optional<WebUsbPlatformCapabilityDescriptor>& descriptor)>
        callback);

void ReadWebUsbDescriptors(
    scoped_refptr<UsbDeviceHandle> device_handle,
    base::OnceCallback<void(const GURL& landing_page)> callback);

}  // namespace device

#endif  // SERVICES_DEVICE_USB_WEBUSB_DESCRIPTORS_H_