// 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_HID_HID_API_H_
#define EXTENSIONS_BROWSER_API_HID_HID_API_H_
#include <string>
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "extensions/browser/api/api_resource_manager.h"
#include "extensions/browser/api/async_api_function.h"
#include "extensions/browser/api/hid/hid_connection_resource.h"
#include "extensions/browser/api/hid/hid_device_manager.h"
#include "extensions/common/api/hid.h"
namespace net {
class IOBuffer;
} // namespace net
namespace extensions {
class HidAsyncApiFunction : public AsyncApiFunction {
public:
HidAsyncApiFunction();
virtual bool PrePrepare() OVERRIDE;
virtual bool Respond() OVERRIDE;
protected:
virtual ~HidAsyncApiFunction();
HidConnectionResource* GetHidConnectionResource(int api_resource_id);
void RemoveHidConnectionResource(int api_resource_id);
void CompleteWithError(const std::string& error);
HidDeviceManager* device_manager_;
ApiResourceManager<HidConnectionResource>* connection_manager_;
private:
DISALLOW_COPY_AND_ASSIGN(HidAsyncApiFunction);
};
class HidGetDevicesFunction : public HidAsyncApiFunction {
public:
DECLARE_EXTENSION_FUNCTION("hid.getDevices", HID_GETDEVICES);
HidGetDevicesFunction();
protected:
virtual bool Prepare() OVERRIDE;
virtual void AsyncWorkStart() OVERRIDE;
virtual ~HidGetDevicesFunction();
scoped_ptr<core_api::hid::GetDevices::Params> parameters_;
private:
DISALLOW_COPY_AND_ASSIGN(HidGetDevicesFunction);
};
class HidConnectFunction : public HidAsyncApiFunction {
public:
DECLARE_EXTENSION_FUNCTION("hid.connect", HID_CONNECT);
HidConnectFunction();
protected:
virtual bool Prepare() OVERRIDE;
virtual void AsyncWorkStart() OVERRIDE;
private:
virtual ~HidConnectFunction();
scoped_ptr<core_api::hid::Connect::Params> parameters_;
DISALLOW_COPY_AND_ASSIGN(HidConnectFunction);
};
class HidDisconnectFunction : public HidAsyncApiFunction {
public:
DECLARE_EXTENSION_FUNCTION("hid.disconnect", HID_DISCONNECT);
HidDisconnectFunction();
protected:
virtual bool Prepare() OVERRIDE;
virtual void AsyncWorkStart() OVERRIDE;
private:
virtual ~HidDisconnectFunction();
scoped_ptr<core_api::hid::Disconnect::Params> parameters_;
DISALLOW_COPY_AND_ASSIGN(HidDisconnectFunction);
};
class HidReceiveFunction : public HidAsyncApiFunction {
public:
DECLARE_EXTENSION_FUNCTION("hid.receive", HID_RECEIVE);
HidReceiveFunction();
protected:
virtual bool Prepare() OVERRIDE;
virtual void AsyncWorkStart() OVERRIDE;
private:
virtual ~HidReceiveFunction();
void OnFinished(bool success,
scoped_refptr<net::IOBuffer> buffer,
size_t size);
scoped_ptr<core_api::hid::Receive::Params> parameters_;
DISALLOW_COPY_AND_ASSIGN(HidReceiveFunction);
};
class HidSendFunction : public HidAsyncApiFunction {
public:
DECLARE_EXTENSION_FUNCTION("hid.send", HID_SEND);
HidSendFunction();
protected:
virtual bool Prepare() OVERRIDE;
virtual void AsyncWorkStart() OVERRIDE;
private:
virtual ~HidSendFunction();
void OnFinished(bool success);
scoped_ptr<core_api::hid::Send::Params> parameters_;
DISALLOW_COPY_AND_ASSIGN(HidSendFunction);
};
class HidReceiveFeatureReportFunction : public HidAsyncApiFunction {
public:
DECLARE_EXTENSION_FUNCTION("hid.receiveFeatureReport",
HID_RECEIVEFEATUREREPORT);
HidReceiveFeatureReportFunction();
protected:
virtual bool Prepare() OVERRIDE;
virtual void AsyncWorkStart() OVERRIDE;
private:
virtual ~HidReceiveFeatureReportFunction();
void OnFinished(bool success,
scoped_refptr<net::IOBuffer> buffer,
size_t size);
scoped_ptr<core_api::hid::ReceiveFeatureReport::Params> parameters_;
DISALLOW_COPY_AND_ASSIGN(HidReceiveFeatureReportFunction);
};
class HidSendFeatureReportFunction : public HidAsyncApiFunction {
public:
DECLARE_EXTENSION_FUNCTION("hid.sendFeatureReport", HID_SENDFEATUREREPORT);
HidSendFeatureReportFunction();
protected:
virtual bool Prepare() OVERRIDE;
virtual void AsyncWorkStart() OVERRIDE;
private:
virtual ~HidSendFeatureReportFunction();
void OnFinished(bool success);
scoped_ptr<core_api::hid::SendFeatureReport::Params> parameters_;
DISALLOW_COPY_AND_ASSIGN(HidSendFeatureReportFunction);
};
} // namespace extensions
#endif // EXTENSIONS_BROWSER_API_HID_HID_API_H_