// Copyright (c) 2012 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_EXTENSIONS_API_USB_USB_API_H_ #define CHROME_BROWSER_EXTENSIONS_API_USB_USB_API_H_ #include #include "base/memory/ref_counted.h" #include "chrome/browser/extensions/api/api_function.h" #include "chrome/browser/extensions/api/api_resource_manager.h" #include "chrome/browser/usb/usb_device.h" #include "chrome/common/extensions/api/usb.h" #include "net/base/io_buffer.h" class UsbDevice; namespace extensions { class ApiResourceEventNotifier; class UsbDeviceResource; class UsbAsyncApiFunction : public AsyncApiFunction { public: UsbAsyncApiFunction(); protected: virtual ~UsbAsyncApiFunction(); virtual bool PrePrepare() OVERRIDE; virtual bool Respond() OVERRIDE; UsbDeviceResource* GetUsbDeviceResource(int api_resource_id); void RemoveUsbDeviceResource(int api_resource_id); void CompleteWithError(const std::string& error); ApiResourceManager* manager_; }; class UsbAsyncApiTransferFunction : public UsbAsyncApiFunction { protected: UsbAsyncApiTransferFunction(); virtual ~UsbAsyncApiTransferFunction(); bool ConvertDirectionSafely(const std::string& input, UsbDevice::TransferDirection* output); bool ConvertRequestTypeSafely(const std::string& input, UsbDevice::TransferRequestType* output); bool ConvertRecipientSafely(const std::string& input, UsbDevice::TransferRecipient* output); void OnCompleted(UsbTransferStatus status, scoped_refptr data, size_t length); }; class UsbFindDevicesFunction : public UsbAsyncApiFunction { public: DECLARE_EXTENSION_FUNCTION_NAME("usb.findDevices"); UsbFindDevicesFunction(); static void SetDeviceForTest(UsbDevice* device); protected: virtual ~UsbFindDevicesFunction(); virtual bool Prepare() OVERRIDE; virtual void AsyncWorkStart() OVERRIDE; void OnCompleted(UsbDevice* device); private: scoped_ptr parameters_; }; class UsbCloseDeviceFunction : public UsbAsyncApiFunction { public: DECLARE_EXTENSION_FUNCTION_NAME("usb.closeDevice"); UsbCloseDeviceFunction(); protected: virtual ~UsbCloseDeviceFunction(); virtual bool Prepare() OVERRIDE; virtual void AsyncWorkStart() OVERRIDE; void OnCompleted(); private: scoped_ptr parameters_; }; class UsbClaimInterfaceFunction : public UsbAsyncApiFunction { public: DECLARE_EXTENSION_FUNCTION_NAME("usb.claimInterface"); UsbClaimInterfaceFunction(); protected: virtual ~UsbClaimInterfaceFunction(); virtual bool Prepare() OVERRIDE; virtual void AsyncWorkStart() OVERRIDE; private: void OnCompleted(bool success); scoped_ptr parameters_; }; class UsbReleaseInterfaceFunction : public UsbAsyncApiFunction { public: DECLARE_EXTENSION_FUNCTION_NAME("usb.releaseInterface"); UsbReleaseInterfaceFunction(); protected: virtual ~UsbReleaseInterfaceFunction(); virtual bool Prepare() OVERRIDE; virtual void AsyncWorkStart() OVERRIDE; private: void OnCompleted(bool success); scoped_ptr parameters_; }; class UsbSetInterfaceAlternateSettingFunction : public UsbAsyncApiFunction { public: DECLARE_EXTENSION_FUNCTION_NAME("usb.setInterfaceAlternateSetting"); UsbSetInterfaceAlternateSettingFunction(); private: virtual ~UsbSetInterfaceAlternateSettingFunction(); virtual bool Prepare() OVERRIDE; virtual void AsyncWorkStart() OVERRIDE; void OnCompleted(bool success); scoped_ptr parameters_; }; class UsbControlTransferFunction : public UsbAsyncApiTransferFunction { public: DECLARE_EXTENSION_FUNCTION_NAME("usb.controlTransfer"); UsbControlTransferFunction(); protected: virtual ~UsbControlTransferFunction(); virtual bool Prepare() OVERRIDE; virtual void AsyncWorkStart() OVERRIDE; private: scoped_ptr parameters_; }; class UsbBulkTransferFunction : public UsbAsyncApiTransferFunction { public: DECLARE_EXTENSION_FUNCTION_NAME("usb.bulkTransfer"); UsbBulkTransferFunction(); protected: virtual ~UsbBulkTransferFunction(); virtual bool Prepare() OVERRIDE; virtual void AsyncWorkStart() OVERRIDE; private: scoped_ptr parameters_; }; class UsbInterruptTransferFunction : public UsbAsyncApiTransferFunction { public: DECLARE_EXTENSION_FUNCTION_NAME("usb.interruptTransfer"); UsbInterruptTransferFunction(); protected: virtual ~UsbInterruptTransferFunction(); virtual bool Prepare() OVERRIDE; virtual void AsyncWorkStart() OVERRIDE; private: scoped_ptr parameters_; }; class UsbIsochronousTransferFunction : public UsbAsyncApiTransferFunction { public: DECLARE_EXTENSION_FUNCTION_NAME("usb.isochronousTransfer"); UsbIsochronousTransferFunction(); protected: virtual ~UsbIsochronousTransferFunction(); virtual bool Prepare() OVERRIDE; virtual void AsyncWorkStart() OVERRIDE; private: scoped_ptr parameters_; }; } // namespace extensions #endif // CHROME_BROWSER_EXTENSIONS_API_USB_USB_API_H_