blob: 3d1dec1a02db9008264807e52b7e57b2246e8658 [file] [log] [blame]
// Copyright 2014 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 EXTENSIONS_BROWSER_API_USB_USB_API_H_
#define EXTENSIONS_BROWSER_API_USB_USB_API_H_
#include <stddef.h>
#include <stdint.h>
#include <string>
#include <vector>
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "device/usb/usb_device.h"
#include "device/usb/usb_device_filter.h"
#include "device/usb/usb_device_handle.h"
#include "extensions/browser/api/api_resource_manager.h"
#include "extensions/browser/extension_function.h"
#include "extensions/common/api/usb.h"
#include "net/base/io_buffer.h"
namespace extensions {
class DevicePermissionEntry;
class DevicePermissions;
class DevicePermissionsPrompt;
class DevicePermissionsManager;
class UsbDeviceResource;
class UsbPermissionCheckingFunction : public UIThreadExtensionFunction {
protected:
UsbPermissionCheckingFunction();
~UsbPermissionCheckingFunction() override;
bool HasDevicePermission(scoped_refptr<device::UsbDevice> device);
void RecordDeviceLastUsed();
private:
DevicePermissionsManager* device_permissions_manager_;
scoped_refptr<DevicePermissionEntry> permission_entry_;
};
class UsbConnectionFunction : public UIThreadExtensionFunction {
protected:
UsbConnectionFunction();
~UsbConnectionFunction() override;
scoped_refptr<device::UsbDeviceHandle> GetDeviceHandle(
const extensions::api::usb::ConnectionHandle& handle);
void ReleaseDeviceHandle(
const extensions::api::usb::ConnectionHandle& handle);
};
class UsbTransferFunction : public UsbConnectionFunction {
protected:
UsbTransferFunction();
~UsbTransferFunction() override;
void OnCompleted(device::UsbTransferStatus status,
scoped_refptr<net::IOBuffer> data,
size_t length);
};
class UsbFindDevicesFunction : public UIThreadExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("usb.findDevices", USB_FINDDEVICES)
UsbFindDevicesFunction();
private:
~UsbFindDevicesFunction() override;
// ExtensionFunction:
ResponseAction Run() override;
void OnGetDevicesComplete(
const std::vector<scoped_refptr<device::UsbDevice>>& devices);
void OnDeviceOpened(scoped_refptr<device::UsbDeviceHandle> device_handle);
void OpenComplete();
uint16_t vendor_id_;
uint16_t product_id_;
scoped_ptr<base::ListValue> result_;
base::Closure barrier_;
DISALLOW_COPY_AND_ASSIGN(UsbFindDevicesFunction);
};
class UsbGetDevicesFunction : public UsbPermissionCheckingFunction {
public:
DECLARE_EXTENSION_FUNCTION("usb.getDevices", USB_GETDEVICES)
UsbGetDevicesFunction();
private:
~UsbGetDevicesFunction() override;
// ExtensionFunction:
ResponseAction Run() override;
void OnGetDevicesComplete(
const std::vector<scoped_refptr<device::UsbDevice>>& devices);
std::vector<device::UsbDeviceFilter> filters_;
DISALLOW_COPY_AND_ASSIGN(UsbGetDevicesFunction);
};
class UsbGetUserSelectedDevicesFunction : public UIThreadExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("usb.getUserSelectedDevices",
USB_GETUSERSELECTEDDEVICES)
UsbGetUserSelectedDevicesFunction();
private:
~UsbGetUserSelectedDevicesFunction() override;
// ExtensionFunction:
ResponseAction Run() override;
void OnDevicesChosen(
const std::vector<scoped_refptr<device::UsbDevice>>& devices);
scoped_ptr<DevicePermissionsPrompt> prompt_;
DISALLOW_COPY_AND_ASSIGN(UsbGetUserSelectedDevicesFunction);
};
class UsbGetConfigurationsFunction : public UsbPermissionCheckingFunction {
public:
DECLARE_EXTENSION_FUNCTION("usb.getConfigurations", USB_GETCONFIGURATIONS);
UsbGetConfigurationsFunction();
private:
~UsbGetConfigurationsFunction() override;
// ExtensionFunction:
ResponseAction Run() override;
DISALLOW_COPY_AND_ASSIGN(UsbGetConfigurationsFunction);
};
class UsbRequestAccessFunction : public UIThreadExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("usb.requestAccess", USB_REQUESTACCESS)
UsbRequestAccessFunction();
private:
~UsbRequestAccessFunction() override;
// ExtensionFunction:
ResponseAction Run() override;
DISALLOW_COPY_AND_ASSIGN(UsbRequestAccessFunction);
};
class UsbOpenDeviceFunction : public UsbPermissionCheckingFunction {
public:
DECLARE_EXTENSION_FUNCTION("usb.openDevice", USB_OPENDEVICE)
UsbOpenDeviceFunction();
private:
~UsbOpenDeviceFunction() override;
// ExtensionFunction:
ResponseAction Run() override;
void OnDeviceOpened(scoped_refptr<device::UsbDeviceHandle> device_handle);
DISALLOW_COPY_AND_ASSIGN(UsbOpenDeviceFunction);
};
class UsbSetConfigurationFunction : public UsbConnectionFunction {
public:
DECLARE_EXTENSION_FUNCTION("usb.setConfiguration", USB_SETCONFIGURATION)
UsbSetConfigurationFunction();
private:
~UsbSetConfigurationFunction() override;
// ExtensionFunction:
ResponseAction Run() override;
void OnComplete(bool success);
DISALLOW_COPY_AND_ASSIGN(UsbSetConfigurationFunction);
};
class UsbGetConfigurationFunction : public UsbConnectionFunction {
public:
DECLARE_EXTENSION_FUNCTION("usb.getConfiguration", USB_GETCONFIGURATION)
UsbGetConfigurationFunction();
private:
~UsbGetConfigurationFunction() override;
// ExtensionFunction:
ResponseAction Run() override;
DISALLOW_COPY_AND_ASSIGN(UsbGetConfigurationFunction);
};
class UsbListInterfacesFunction : public UsbConnectionFunction {
public:
DECLARE_EXTENSION_FUNCTION("usb.listInterfaces", USB_LISTINTERFACES)
UsbListInterfacesFunction();
private:
~UsbListInterfacesFunction() override;
// ExtensionFunction:
ResponseAction Run() override;
DISALLOW_COPY_AND_ASSIGN(UsbListInterfacesFunction);
};
class UsbCloseDeviceFunction : public UsbConnectionFunction {
public:
DECLARE_EXTENSION_FUNCTION("usb.closeDevice", USB_CLOSEDEVICE)
UsbCloseDeviceFunction();
private:
~UsbCloseDeviceFunction() override;
// ExtensionFunction:
ResponseAction Run() override;
DISALLOW_COPY_AND_ASSIGN(UsbCloseDeviceFunction);
};
class UsbClaimInterfaceFunction : public UsbConnectionFunction {
public:
DECLARE_EXTENSION_FUNCTION("usb.claimInterface", USB_CLAIMINTERFACE)
UsbClaimInterfaceFunction();
private:
~UsbClaimInterfaceFunction() override;
// ExtensionFunction:
ResponseAction Run() override;
void OnComplete(bool success);
DISALLOW_COPY_AND_ASSIGN(UsbClaimInterfaceFunction);
};
class UsbReleaseInterfaceFunction : public UsbConnectionFunction {
public:
DECLARE_EXTENSION_FUNCTION("usb.releaseInterface", USB_RELEASEINTERFACE)
UsbReleaseInterfaceFunction();
private:
~UsbReleaseInterfaceFunction() override;
// ExtensionFunction:
ResponseAction Run() override;
DISALLOW_COPY_AND_ASSIGN(UsbReleaseInterfaceFunction);
};
class UsbSetInterfaceAlternateSettingFunction : public UsbConnectionFunction {
public:
DECLARE_EXTENSION_FUNCTION("usb.setInterfaceAlternateSetting",
USB_SETINTERFACEALTERNATESETTING)
UsbSetInterfaceAlternateSettingFunction();
private:
~UsbSetInterfaceAlternateSettingFunction() override;
// ExtensionFunction:
ResponseAction Run() override;
void OnComplete(bool success);
DISALLOW_COPY_AND_ASSIGN(UsbSetInterfaceAlternateSettingFunction);
};
class UsbControlTransferFunction : public UsbTransferFunction {
public:
DECLARE_EXTENSION_FUNCTION("usb.controlTransfer", USB_CONTROLTRANSFER)
UsbControlTransferFunction();
private:
~UsbControlTransferFunction() override;
// ExtensionFunction:
ResponseAction Run() override;
DISALLOW_COPY_AND_ASSIGN(UsbControlTransferFunction);
};
class UsbBulkTransferFunction : public UsbTransferFunction {
public:
DECLARE_EXTENSION_FUNCTION("usb.bulkTransfer", USB_BULKTRANSFER)
UsbBulkTransferFunction();
private:
~UsbBulkTransferFunction() override;
// ExtensionFunction:
ResponseAction Run() override;
DISALLOW_COPY_AND_ASSIGN(UsbBulkTransferFunction);
};
class UsbInterruptTransferFunction : public UsbTransferFunction {
public:
DECLARE_EXTENSION_FUNCTION("usb.interruptTransfer", USB_INTERRUPTTRANSFER)
UsbInterruptTransferFunction();
private:
~UsbInterruptTransferFunction() override;
// ExtensionFunction:
ResponseAction Run() override;
DISALLOW_COPY_AND_ASSIGN(UsbInterruptTransferFunction);
};
class UsbIsochronousTransferFunction : public UsbConnectionFunction {
public:
DECLARE_EXTENSION_FUNCTION("usb.isochronousTransfer", USB_ISOCHRONOUSTRANSFER)
UsbIsochronousTransferFunction();
private:
~UsbIsochronousTransferFunction() override;
// ExtensionFunction:
ResponseAction Run() override;
void OnCompleted(
scoped_refptr<net::IOBuffer> data,
const std::vector<device::UsbDeviceHandle::IsochronousPacket>& packets);
DISALLOW_COPY_AND_ASSIGN(UsbIsochronousTransferFunction);
};
class UsbResetDeviceFunction : public UsbConnectionFunction {
public:
DECLARE_EXTENSION_FUNCTION("usb.resetDevice", USB_RESETDEVICE)
UsbResetDeviceFunction();
private:
~UsbResetDeviceFunction() override;
// ExtensionFunction:
ResponseAction Run() override;
void OnComplete(bool success);
scoped_ptr<extensions::api::usb::ResetDevice::Params> parameters_;
DISALLOW_COPY_AND_ASSIGN(UsbResetDeviceFunction);
};
} // namespace extensions
#endif // EXTENSIONS_BROWSER_API_USB_USB_API_H_