| Index: chrome/browser/extensions/api/hid/hid_api.cc
|
| diff --git a/chrome/browser/extensions/api/hid/hid_api.cc b/chrome/browser/extensions/api/hid/hid_api.cc
|
| deleted file mode 100644
|
| index 2462384e80e46955d324318897cd8aab4641f522..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/extensions/api/hid/hid_api.cc
|
| +++ /dev/null
|
| @@ -1,303 +0,0 @@
|
| -// 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.
|
| -
|
| -#include "chrome/browser/extensions/api/hid/hid_api.h"
|
| -
|
| -#include <string>
|
| -#include <vector>
|
| -
|
| -#include "chrome/common/extensions/api/hid.h"
|
| -#include "device/hid/hid_connection.h"
|
| -#include "device/hid/hid_device_info.h"
|
| -#include "device/hid/hid_service.h"
|
| -#include "extensions/browser/api/api_resource_manager.h"
|
| -#include "extensions/common/permissions/permissions_data.h"
|
| -#include "extensions/common/permissions/usb_device_permission.h"
|
| -#include "net/base/io_buffer.h"
|
| -
|
| -namespace hid = extensions::api::hid;
|
| -
|
| -using device::HidConnection;
|
| -using device::HidDeviceInfo;
|
| -using device::HidService;
|
| -
|
| -namespace {
|
| -
|
| -const char kErrorPermissionDenied[] = "Permission to access device was denied.";
|
| -const char kErrorInvalidDeviceId[] = "Invalid HID device ID.";
|
| -const char kErrorFailedToOpenDevice[] = "Failed to open HID device.";
|
| -const char kErrorConnectionNotFound[] = "Connection not established.";
|
| -const char kErrorTransfer[] = "Transfer failed.";
|
| -
|
| -base::Value* PopulateHidConnection(int connection_id,
|
| - scoped_refptr<HidConnection> connection) {
|
| - hid::HidConnectInfo connection_value;
|
| - connection_value.connection_id = connection_id;
|
| - return connection_value.ToValue().release();
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -namespace extensions {
|
| -
|
| -HidAsyncApiFunction::HidAsyncApiFunction()
|
| - : device_manager_(NULL), connection_manager_(NULL) {}
|
| -
|
| -HidAsyncApiFunction::~HidAsyncApiFunction() {}
|
| -
|
| -bool HidAsyncApiFunction::PrePrepare() {
|
| - device_manager_ = HidDeviceManager::Get(browser_context());
|
| - DCHECK(device_manager_);
|
| - connection_manager_ =
|
| - ApiResourceManager<HidConnectionResource>::Get(browser_context());
|
| - DCHECK(connection_manager_);
|
| - set_work_thread_id(content::BrowserThread::FILE);
|
| - return true;
|
| -}
|
| -
|
| -bool HidAsyncApiFunction::Respond() { return error_.empty(); }
|
| -
|
| -HidConnectionResource* HidAsyncApiFunction::GetHidConnectionResource(
|
| - int api_resource_id) {
|
| - return connection_manager_->Get(extension_->id(), api_resource_id);
|
| -}
|
| -
|
| -void HidAsyncApiFunction::RemoveHidConnectionResource(int api_resource_id) {
|
| - connection_manager_->Remove(extension_->id(), api_resource_id);
|
| -}
|
| -
|
| -void HidAsyncApiFunction::CompleteWithError(const std::string& error) {
|
| - SetError(error);
|
| - AsyncWorkCompleted();
|
| -}
|
| -
|
| -HidGetDevicesFunction::HidGetDevicesFunction() {}
|
| -
|
| -HidGetDevicesFunction::~HidGetDevicesFunction() {}
|
| -
|
| -bool HidGetDevicesFunction::Prepare() {
|
| - parameters_ = hid::GetDevices::Params::Create(*args_);
|
| - EXTENSION_FUNCTION_VALIDATE(parameters_.get());
|
| - return true;
|
| -}
|
| -
|
| -void HidGetDevicesFunction::AsyncWorkStart() {
|
| - const uint16_t vendor_id = parameters_->options.vendor_id;
|
| - const uint16_t product_id = parameters_->options.product_id;
|
| - UsbDevicePermission::CheckParam param(
|
| - vendor_id, product_id, UsbDevicePermissionData::UNSPECIFIED_INTERFACE);
|
| - if (!GetExtension()->permissions_data()->CheckAPIPermissionWithParam(
|
| - APIPermission::kUsbDevice, ¶m)) {
|
| - LOG(WARNING) << "Insufficient permissions to access device.";
|
| - CompleteWithError(kErrorPermissionDenied);
|
| - return;
|
| - }
|
| -
|
| - SetResult(device_manager_->GetApiDevices(vendor_id, product_id).release());
|
| - AsyncWorkCompleted();
|
| -}
|
| -
|
| -HidConnectFunction::HidConnectFunction() {}
|
| -
|
| -HidConnectFunction::~HidConnectFunction() {}
|
| -
|
| -bool HidConnectFunction::Prepare() {
|
| - parameters_ = hid::Connect::Params::Create(*args_);
|
| - EXTENSION_FUNCTION_VALIDATE(parameters_.get());
|
| - return true;
|
| -}
|
| -
|
| -void HidConnectFunction::AsyncWorkStart() {
|
| - device::HidDeviceInfo device_info;
|
| - if (!device_manager_->GetDeviceInfo(parameters_->device_id, &device_info)) {
|
| - CompleteWithError(kErrorInvalidDeviceId);
|
| - return;
|
| - }
|
| -
|
| - UsbDevicePermission::CheckParam param(
|
| - device_info.vendor_id,
|
| - device_info.product_id,
|
| - UsbDevicePermissionData::UNSPECIFIED_INTERFACE);
|
| - if (!GetExtension()->permissions_data()->CheckAPIPermissionWithParam(
|
| - APIPermission::kUsbDevice, ¶m)) {
|
| - LOG(WARNING) << "Insufficient permissions to access device.";
|
| - CompleteWithError(kErrorPermissionDenied);
|
| - return;
|
| - }
|
| -
|
| - HidService* hid_service = HidService::GetInstance();
|
| - DCHECK(hid_service);
|
| - scoped_refptr<HidConnection> connection =
|
| - hid_service->Connect(device_info.device_id);
|
| - if (!connection) {
|
| - CompleteWithError(kErrorFailedToOpenDevice);
|
| - return;
|
| - }
|
| - int connection_id = connection_manager_->Add(
|
| - new HidConnectionResource(extension_->id(), connection));
|
| - SetResult(PopulateHidConnection(connection_id, connection));
|
| - AsyncWorkCompleted();
|
| -}
|
| -
|
| -HidDisconnectFunction::HidDisconnectFunction() {}
|
| -
|
| -HidDisconnectFunction::~HidDisconnectFunction() {}
|
| -
|
| -bool HidDisconnectFunction::Prepare() {
|
| - parameters_ = hid::Disconnect::Params::Create(*args_);
|
| - EXTENSION_FUNCTION_VALIDATE(parameters_.get());
|
| - return true;
|
| -}
|
| -
|
| -void HidDisconnectFunction::AsyncWorkStart() {
|
| - int connection_id = parameters_->connection_id;
|
| - HidConnectionResource* resource =
|
| - connection_manager_->Get(extension_->id(), connection_id);
|
| - if (!resource) {
|
| - CompleteWithError(kErrorConnectionNotFound);
|
| - return;
|
| - }
|
| - connection_manager_->Remove(extension_->id(), connection_id);
|
| - AsyncWorkCompleted();
|
| -}
|
| -
|
| -HidReceiveFunction::HidReceiveFunction() {}
|
| -
|
| -HidReceiveFunction::~HidReceiveFunction() {}
|
| -
|
| -bool HidReceiveFunction::Prepare() {
|
| - parameters_ = hid::Receive::Params::Create(*args_);
|
| - EXTENSION_FUNCTION_VALIDATE(parameters_.get());
|
| - return true;
|
| -}
|
| -
|
| -void HidReceiveFunction::AsyncWorkStart() {
|
| - int connection_id = parameters_->connection_id;
|
| - HidConnectionResource* resource =
|
| - connection_manager_->Get(extension_->id(), connection_id);
|
| - if (!resource) {
|
| - CompleteWithError(kErrorConnectionNotFound);
|
| - return;
|
| - }
|
| -
|
| - buffer_ = new net::IOBufferWithSize(parameters_->size);
|
| - resource->connection()->Read(
|
| - buffer_, base::Bind(&HidReceiveFunction::OnFinished, this));
|
| -}
|
| -
|
| -void HidReceiveFunction::OnFinished(bool success, size_t bytes) {
|
| - if (!success) {
|
| - CompleteWithError(kErrorTransfer);
|
| - return;
|
| - }
|
| -
|
| - SetResult(base::BinaryValue::CreateWithCopiedBuffer(buffer_->data(), bytes));
|
| - AsyncWorkCompleted();
|
| -}
|
| -
|
| -HidSendFunction::HidSendFunction() {}
|
| -
|
| -HidSendFunction::~HidSendFunction() {}
|
| -
|
| -bool HidSendFunction::Prepare() {
|
| - parameters_ = hid::Send::Params::Create(*args_);
|
| - EXTENSION_FUNCTION_VALIDATE(parameters_.get());
|
| - return true;
|
| -}
|
| -
|
| -void HidSendFunction::AsyncWorkStart() {
|
| - int connection_id = parameters_->connection_id;
|
| - HidConnectionResource* resource =
|
| - connection_manager_->Get(extension_->id(), connection_id);
|
| - if (!resource) {
|
| - CompleteWithError(kErrorConnectionNotFound);
|
| - return;
|
| - }
|
| -
|
| - scoped_refptr<net::IOBufferWithSize> buffer(
|
| - new net::IOBufferWithSize(parameters_->data.size()));
|
| - memcpy(buffer->data(), parameters_->data.c_str(), parameters_->data.size());
|
| - resource->connection()->Write(static_cast<uint8_t>(parameters_->report_id),
|
| - buffer,
|
| - base::Bind(&HidSendFunction::OnFinished, this));
|
| -}
|
| -
|
| -void HidSendFunction::OnFinished(bool success, size_t bytes) {
|
| - if (!success) {
|
| - CompleteWithError(kErrorTransfer);
|
| - return;
|
| - }
|
| - AsyncWorkCompleted();
|
| -}
|
| -
|
| -HidReceiveFeatureReportFunction::HidReceiveFeatureReportFunction() {}
|
| -
|
| -HidReceiveFeatureReportFunction::~HidReceiveFeatureReportFunction() {}
|
| -
|
| -bool HidReceiveFeatureReportFunction::Prepare() {
|
| - parameters_ = hid::ReceiveFeatureReport::Params::Create(*args_);
|
| - EXTENSION_FUNCTION_VALIDATE(parameters_.get());
|
| - return true;
|
| -}
|
| -
|
| -void HidReceiveFeatureReportFunction::AsyncWorkStart() {
|
| - int connection_id = parameters_->connection_id;
|
| - HidConnectionResource* resource =
|
| - connection_manager_->Get(extension_->id(), connection_id);
|
| - if (!resource) {
|
| - CompleteWithError(kErrorConnectionNotFound);
|
| - return;
|
| - }
|
| - buffer_ = new net::IOBufferWithSize(parameters_->size);
|
| - resource->connection()->GetFeatureReport(
|
| - static_cast<uint8_t>(parameters_->report_id),
|
| - buffer_,
|
| - base::Bind(&HidReceiveFeatureReportFunction::OnFinished, this));
|
| -}
|
| -
|
| -void HidReceiveFeatureReportFunction::OnFinished(bool success, size_t bytes) {
|
| - if (!success) {
|
| - CompleteWithError(kErrorTransfer);
|
| - return;
|
| - }
|
| -
|
| - SetResult(base::BinaryValue::CreateWithCopiedBuffer(buffer_->data(), bytes));
|
| - AsyncWorkCompleted();
|
| -}
|
| -
|
| -HidSendFeatureReportFunction::HidSendFeatureReportFunction() {}
|
| -
|
| -HidSendFeatureReportFunction::~HidSendFeatureReportFunction() {}
|
| -
|
| -bool HidSendFeatureReportFunction::Prepare() {
|
| - parameters_ = hid::SendFeatureReport::Params::Create(*args_);
|
| - EXTENSION_FUNCTION_VALIDATE(parameters_.get());
|
| - return true;
|
| -}
|
| -
|
| -void HidSendFeatureReportFunction::AsyncWorkStart() {
|
| - int connection_id = parameters_->connection_id;
|
| - HidConnectionResource* resource =
|
| - connection_manager_->Get(extension_->id(), connection_id);
|
| - if (!resource) {
|
| - CompleteWithError(kErrorConnectionNotFound);
|
| - return;
|
| - }
|
| - scoped_refptr<net::IOBufferWithSize> buffer(
|
| - new net::IOBufferWithSize(parameters_->data.size()));
|
| - resource->connection()->SendFeatureReport(
|
| - static_cast<uint8_t>(parameters_->report_id),
|
| - buffer,
|
| - base::Bind(&HidSendFeatureReportFunction::OnFinished, this));
|
| -}
|
| -
|
| -void HidSendFeatureReportFunction::OnFinished(bool success, size_t bytes) {
|
| - if (!success) {
|
| - CompleteWithError(kErrorTransfer);
|
| - return;
|
| - }
|
| - AsyncWorkCompleted();
|
| -}
|
| -
|
| -} // namespace extensions
|
|
|