// 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 #include #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); void RecordDeviceLastUsed(); private: DevicePermissionsManager* device_permissions_manager_; scoped_refptr permission_entry_; }; class UsbConnectionFunction : public UIThreadExtensionFunction { protected: UsbConnectionFunction(); ~UsbConnectionFunction() override; scoped_refptr GetDeviceHandle( const extensions::core_api::usb::ConnectionHandle& handle); void ReleaseDeviceHandle( const extensions::core_api::usb::ConnectionHandle& handle); }; class UsbTransferFunction : public UsbConnectionFunction { protected: UsbTransferFunction(); ~UsbTransferFunction() override; void OnCompleted(device::UsbTransferStatus status, scoped_refptr 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>& devices); void OnRequestAccessComplete(scoped_refptr device, bool success); void OnDeviceOpened(scoped_refptr device_handle); void OpenComplete(); uint16_t vendor_id_; uint16_t product_id_; int interface_id_; scoped_ptr 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>& devices); std::vector 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>& devices); scoped_ptr prompt_; DISALLOW_COPY_AND_ASSIGN(UsbGetUserSelectedDevicesFunction); }; 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 OnRequestAccessComplete(scoped_refptr device, bool success); void OnDeviceOpened(scoped_refptr 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(); protected: ~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 UsbTransferFunction { public: DECLARE_EXTENSION_FUNCTION("usb.isochronousTransfer", USB_ISOCHRONOUSTRANSFER) UsbIsochronousTransferFunction(); private: ~UsbIsochronousTransferFunction() override; // ExtensionFunction: ResponseAction Run() override; 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 parameters_; DISALLOW_COPY_AND_ASSIGN(UsbResetDeviceFunction); }; } // namespace extensions #endif // EXTENSIONS_BROWSER_API_USB_USB_API_H_