| Index: chrome/browser/extensions/api/bluetooth_socket/bluetooth_socket_api.cc
|
| diff --git a/chrome/browser/extensions/api/bluetooth_socket/bluetooth_socket_api.cc b/chrome/browser/extensions/api/bluetooth_socket/bluetooth_socket_api.cc
|
| deleted file mode 100644
|
| index cbd8f834a38e05c0719ac6931a1382cb7df641c6..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/extensions/api/bluetooth_socket/bluetooth_socket_api.cc
|
| +++ /dev/null
|
| @@ -1,678 +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/bluetooth_socket/bluetooth_socket_api.h"
|
| -
|
| -#include <stdint.h>
|
| -
|
| -#include "chrome/browser/extensions/api/bluetooth_socket/bluetooth_api_socket.h"
|
| -#include "chrome/browser/extensions/api/bluetooth_socket/bluetooth_socket_event_dispatcher.h"
|
| -#include "chrome/common/extensions/api/bluetooth/bluetooth_manifest_data.h"
|
| -#include "content/public/browser/browser_context.h"
|
| -#include "content/public/browser/browser_thread.h"
|
| -#include "device/bluetooth/bluetooth_adapter.h"
|
| -#include "device/bluetooth/bluetooth_adapter_factory.h"
|
| -#include "device/bluetooth/bluetooth_device.h"
|
| -#include "device/bluetooth/bluetooth_socket.h"
|
| -#include "extensions/common/permissions/permissions_data.h"
|
| -#include "net/base/io_buffer.h"
|
| -
|
| -using content::BrowserThread;
|
| -using extensions::BluetoothApiSocket;
|
| -using extensions::api::bluetooth_socket::ListenOptions;
|
| -using extensions::api::bluetooth_socket::SocketInfo;
|
| -using extensions::api::bluetooth_socket::SocketProperties;
|
| -
|
| -namespace {
|
| -
|
| -const char kDeviceNotFoundError[] = "Device not found";
|
| -const char kInvalidPsmError[] = "Invalid PSM";
|
| -const char kInvalidUuidError[] = "Invalid UUID";
|
| -const char kPermissionDeniedError[] = "Permission denied";
|
| -const char kSocketNotFoundError[] = "Socket not found";
|
| -
|
| -linked_ptr<SocketInfo> CreateSocketInfo(int socket_id,
|
| - BluetoothApiSocket* socket) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BluetoothApiSocket::kThreadId));
|
| - linked_ptr<SocketInfo> socket_info(new SocketInfo());
|
| - // This represents what we know about the socket, and does not call through
|
| - // to the system.
|
| - socket_info->socket_id = socket_id;
|
| - if (socket->name()) {
|
| - socket_info->name.reset(new std::string(*socket->name()));
|
| - }
|
| - socket_info->persistent = socket->persistent();
|
| - if (socket->buffer_size() > 0) {
|
| - socket_info->buffer_size.reset(new int(socket->buffer_size()));
|
| - }
|
| - socket_info->paused = socket->paused();
|
| - socket_info->connected = socket->IsConnected();
|
| -
|
| - if (socket->IsConnected())
|
| - socket_info->address.reset(new std::string(socket->device_address()));
|
| - socket_info->uuid.reset(new std::string(socket->uuid().canonical_value()));
|
| -
|
| - return socket_info;
|
| -}
|
| -
|
| -void SetSocketProperties(BluetoothApiSocket* socket,
|
| - SocketProperties* properties) {
|
| - if (properties->name.get()) {
|
| - socket->set_name(*properties->name.get());
|
| - }
|
| - if (properties->persistent.get()) {
|
| - socket->set_persistent(*properties->persistent.get());
|
| - }
|
| - if (properties->buffer_size.get()) {
|
| - // buffer size is validated when issuing the actual Recv operation
|
| - // on the socket.
|
| - socket->set_buffer_size(*properties->buffer_size.get());
|
| - }
|
| -}
|
| -
|
| -extensions::api::BluetoothSocketEventDispatcher* GetSocketEventDispatcher(
|
| - content::BrowserContext* browser_context) {
|
| - extensions::api::BluetoothSocketEventDispatcher* socket_event_dispatcher =
|
| - extensions::api::BluetoothSocketEventDispatcher::Get(browser_context);
|
| - DCHECK(socket_event_dispatcher)
|
| - << "There is no socket event dispatcher. "
|
| - "If this assertion is failing during a test, then it is likely that "
|
| - "TestExtensionSystem is failing to provide an instance of "
|
| - "BluetoothSocketEventDispatcher.";
|
| - return socket_event_dispatcher;
|
| -}
|
| -
|
| -// Returns |true| if |psm| is a valid PSM.
|
| -// Per the Bluetooth specification, the PSM field must be at least two octets in
|
| -// length, with least significant bit of the least significant octet equal to
|
| -// '1' and the least significant bit of the most significant octet equal to '0'.
|
| -bool IsValidPsm(int psm) {
|
| - if (psm <= 0)
|
| - return false;
|
| -
|
| - std::vector<int16_t> octets;
|
| - while (psm > 0) {
|
| - octets.push_back(psm & 0xFF);
|
| - psm = psm >> 8;
|
| - }
|
| -
|
| - if (octets.size() < 2U)
|
| - return false;
|
| -
|
| - // The least significant bit of the least significant octet must be '1'.
|
| - if ((octets.front() & 0x01) != 1)
|
| - return false;
|
| -
|
| - // The least significant bit of the most significant octet must be '0'.
|
| - if ((octets.back() & 0x01) != 0)
|
| - return false;
|
| -
|
| - return true;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -namespace extensions {
|
| -namespace api {
|
| -
|
| -BluetoothSocketAsyncApiFunction::BluetoothSocketAsyncApiFunction() {}
|
| -
|
| -BluetoothSocketAsyncApiFunction::~BluetoothSocketAsyncApiFunction() {}
|
| -
|
| -bool BluetoothSocketAsyncApiFunction::RunAsync() {
|
| - if (!PrePrepare() || !Prepare()) {
|
| - return false;
|
| - }
|
| - AsyncWorkStart();
|
| - return true;
|
| -}
|
| -
|
| -bool BluetoothSocketAsyncApiFunction::PrePrepare() {
|
| - if (!BluetoothManifestData::CheckSocketPermitted(extension())) {
|
| - error_ = kPermissionDeniedError;
|
| - return false;
|
| - }
|
| -
|
| - manager_ = ApiResourceManager<BluetoothApiSocket>::Get(browser_context());
|
| - DCHECK(manager_)
|
| - << "There is no socket manager. "
|
| - "If this assertion is failing during a test, then it is likely that "
|
| - "TestExtensionSystem is failing to provide an instance of "
|
| - "ApiResourceManager<BluetoothApiSocket>.";
|
| - return manager_ != NULL;
|
| -}
|
| -
|
| -bool BluetoothSocketAsyncApiFunction::Respond() { return error_.empty(); }
|
| -
|
| -void BluetoothSocketAsyncApiFunction::AsyncWorkCompleted() {
|
| - SendResponse(Respond());
|
| -}
|
| -
|
| -void BluetoothSocketAsyncApiFunction::Work() {}
|
| -
|
| -void BluetoothSocketAsyncApiFunction::AsyncWorkStart() {
|
| - Work();
|
| - AsyncWorkCompleted();
|
| -}
|
| -
|
| -int BluetoothSocketAsyncApiFunction::AddSocket(BluetoothApiSocket* socket) {
|
| - return manager_->Add(socket);
|
| -}
|
| -
|
| -content::BrowserThread::ID
|
| -BluetoothSocketAsyncApiFunction::work_thread_id() const {
|
| - return BluetoothApiSocket::kThreadId;
|
| -}
|
| -
|
| -BluetoothApiSocket* BluetoothSocketAsyncApiFunction::GetSocket(
|
| - int api_resource_id) {
|
| - return manager_->Get(extension_id(), api_resource_id);
|
| -}
|
| -
|
| -void BluetoothSocketAsyncApiFunction::RemoveSocket(int api_resource_id) {
|
| - manager_->Remove(extension_id(), api_resource_id);
|
| -}
|
| -
|
| -base::hash_set<int>* BluetoothSocketAsyncApiFunction::GetSocketIds() {
|
| - return manager_->GetResourceIds(extension_id());
|
| -}
|
| -
|
| -BluetoothSocketCreateFunction::BluetoothSocketCreateFunction() {}
|
| -
|
| -BluetoothSocketCreateFunction::~BluetoothSocketCreateFunction() {}
|
| -
|
| -bool BluetoothSocketCreateFunction::Prepare() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| -
|
| - params_ = bluetooth_socket::Create::Params::Create(*args_);
|
| - EXTENSION_FUNCTION_VALIDATE(params_.get());
|
| - return true;
|
| -}
|
| -
|
| -void BluetoothSocketCreateFunction::Work() {
|
| - DCHECK(BrowserThread::CurrentlyOn(work_thread_id()));
|
| -
|
| - BluetoothApiSocket* socket = new BluetoothApiSocket(extension_id());
|
| -
|
| - bluetooth_socket::SocketProperties* properties =
|
| - params_.get()->properties.get();
|
| - if (properties) {
|
| - SetSocketProperties(socket, properties);
|
| - }
|
| -
|
| - bluetooth_socket::CreateInfo create_info;
|
| - create_info.socket_id = AddSocket(socket);
|
| - results_ = bluetooth_socket::Create::Results::Create(create_info);
|
| - AsyncWorkCompleted();
|
| -}
|
| -
|
| -BluetoothSocketUpdateFunction::BluetoothSocketUpdateFunction() {}
|
| -
|
| -BluetoothSocketUpdateFunction::~BluetoothSocketUpdateFunction() {}
|
| -
|
| -bool BluetoothSocketUpdateFunction::Prepare() {
|
| - params_ = bluetooth_socket::Update::Params::Create(*args_);
|
| - EXTENSION_FUNCTION_VALIDATE(params_.get());
|
| - return true;
|
| -}
|
| -
|
| -void BluetoothSocketUpdateFunction::Work() {
|
| - BluetoothApiSocket* socket = GetSocket(params_->socket_id);
|
| - if (!socket) {
|
| - error_ = kSocketNotFoundError;
|
| - return;
|
| - }
|
| -
|
| - SetSocketProperties(socket, ¶ms_.get()->properties);
|
| - results_ = bluetooth_socket::Update::Results::Create();
|
| -}
|
| -
|
| -BluetoothSocketSetPausedFunction::BluetoothSocketSetPausedFunction()
|
| - : socket_event_dispatcher_(NULL) {}
|
| -
|
| -BluetoothSocketSetPausedFunction::~BluetoothSocketSetPausedFunction() {}
|
| -
|
| -bool BluetoothSocketSetPausedFunction::Prepare() {
|
| - params_ = bluetooth_socket::SetPaused::Params::Create(*args_);
|
| - EXTENSION_FUNCTION_VALIDATE(params_.get());
|
| -
|
| - socket_event_dispatcher_ = GetSocketEventDispatcher(browser_context());
|
| - return socket_event_dispatcher_ != NULL;
|
| -}
|
| -
|
| -void BluetoothSocketSetPausedFunction::Work() {
|
| - BluetoothApiSocket* socket = GetSocket(params_->socket_id);
|
| - if (!socket) {
|
| - error_ = kSocketNotFoundError;
|
| - return;
|
| - }
|
| -
|
| - if (socket->paused() != params_->paused) {
|
| - socket->set_paused(params_->paused);
|
| - if (!params_->paused) {
|
| - socket_event_dispatcher_->OnSocketResume(extension_id(),
|
| - params_->socket_id);
|
| - }
|
| - }
|
| -
|
| - results_ = bluetooth_socket::SetPaused::Results::Create();
|
| -}
|
| -
|
| -BluetoothSocketListenFunction::BluetoothSocketListenFunction() {}
|
| -
|
| -BluetoothSocketListenFunction::~BluetoothSocketListenFunction() {}
|
| -
|
| -bool BluetoothSocketListenFunction::Prepare() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - if (!CreateParams())
|
| - return false;
|
| - socket_event_dispatcher_ = GetSocketEventDispatcher(browser_context());
|
| - return socket_event_dispatcher_ != NULL;
|
| -}
|
| -
|
| -void BluetoothSocketListenFunction::AsyncWorkStart() {
|
| - DCHECK(BrowserThread::CurrentlyOn(work_thread_id()));
|
| - device::BluetoothAdapterFactory::GetAdapter(
|
| - base::Bind(&BluetoothSocketListenFunction::OnGetAdapter, this));
|
| -}
|
| -
|
| -void BluetoothSocketListenFunction::OnGetAdapter(
|
| - scoped_refptr<device::BluetoothAdapter> adapter) {
|
| - DCHECK(BrowserThread::CurrentlyOn(work_thread_id()));
|
| - BluetoothApiSocket* socket = GetSocket(socket_id());
|
| - if (!socket) {
|
| - error_ = kSocketNotFoundError;
|
| - AsyncWorkCompleted();
|
| - return;
|
| - }
|
| -
|
| - device::BluetoothUUID bluetooth_uuid(uuid());
|
| - if (!bluetooth_uuid.IsValid()) {
|
| - error_ = kInvalidUuidError;
|
| - AsyncWorkCompleted();
|
| - return;
|
| - }
|
| -
|
| - BluetoothPermissionRequest param(uuid());
|
| - if (!BluetoothManifestData::CheckRequest(extension(), param)) {
|
| - error_ = kPermissionDeniedError;
|
| - AsyncWorkCompleted();
|
| - return;
|
| - }
|
| -
|
| - scoped_ptr<std::string> name;
|
| - if (socket->name())
|
| - name.reset(new std::string(*socket->name()));
|
| -
|
| - CreateService(
|
| - adapter,
|
| - bluetooth_uuid,
|
| - name.Pass(),
|
| - base::Bind(&BluetoothSocketListenFunction::OnCreateService, this),
|
| - base::Bind(&BluetoothSocketListenFunction::OnCreateServiceError, this));
|
| -}
|
| -
|
| -
|
| -void BluetoothSocketListenFunction::OnCreateService(
|
| - scoped_refptr<device::BluetoothSocket> socket) {
|
| - DCHECK(BrowserThread::CurrentlyOn(work_thread_id()));
|
| -
|
| - // Fetch the socket again since this is not a reference-counted object, and
|
| - // it may have gone away in the meantime (we check earlier to avoid making
|
| - // a connection in the case of an obvious programming error).
|
| - BluetoothApiSocket* api_socket = GetSocket(socket_id());
|
| - if (!api_socket) {
|
| - error_ = kSocketNotFoundError;
|
| - AsyncWorkCompleted();
|
| - return;
|
| - }
|
| -
|
| - api_socket->AdoptListeningSocket(socket,
|
| - device::BluetoothUUID(uuid()));
|
| - socket_event_dispatcher_->OnSocketListen(extension_id(), socket_id());
|
| -
|
| - CreateResults();
|
| - AsyncWorkCompleted();
|
| -}
|
| -
|
| -void BluetoothSocketListenFunction::OnCreateServiceError(
|
| - const std::string& message) {
|
| - DCHECK(BrowserThread::CurrentlyOn(work_thread_id()));
|
| - error_ = message;
|
| - AsyncWorkCompleted();
|
| -}
|
| -
|
| -BluetoothSocketListenUsingRfcommFunction::
|
| - BluetoothSocketListenUsingRfcommFunction() {}
|
| -
|
| -BluetoothSocketListenUsingRfcommFunction::
|
| - ~BluetoothSocketListenUsingRfcommFunction() {}
|
| -
|
| -int BluetoothSocketListenUsingRfcommFunction::socket_id() const {
|
| - return params_->socket_id;
|
| -}
|
| -
|
| -const std::string& BluetoothSocketListenUsingRfcommFunction::uuid() const {
|
| - return params_->uuid;
|
| -}
|
| -
|
| -bool BluetoothSocketListenUsingRfcommFunction::CreateParams() {
|
| - params_ = bluetooth_socket::ListenUsingRfcomm::Params::Create(*args_);
|
| - EXTENSION_FUNCTION_VALIDATE(params_.get());
|
| - return true;
|
| -}
|
| -
|
| -void BluetoothSocketListenUsingRfcommFunction::CreateService(
|
| - scoped_refptr<device::BluetoothAdapter> adapter,
|
| - const device::BluetoothUUID& uuid,
|
| - scoped_ptr<std::string> name,
|
| - const device::BluetoothAdapter::CreateServiceCallback& callback,
|
| - const device::BluetoothAdapter::CreateServiceErrorCallback&
|
| - error_callback) {
|
| - device::BluetoothAdapter::ServiceOptions service_options;
|
| - service_options.name = name.Pass();
|
| -
|
| - ListenOptions* options = params_->options.get();
|
| - if (options) {
|
| - if (options->channel.get())
|
| - service_options.channel.reset(new int(*(options->channel)));
|
| - }
|
| -
|
| - adapter->CreateRfcommService(uuid, service_options, callback, error_callback);
|
| -}
|
| -
|
| -void BluetoothSocketListenUsingRfcommFunction::CreateResults() {
|
| - results_ = bluetooth_socket::ListenUsingRfcomm::Results::Create();
|
| -}
|
| -
|
| -BluetoothSocketListenUsingL2capFunction::
|
| - BluetoothSocketListenUsingL2capFunction() {}
|
| -
|
| -BluetoothSocketListenUsingL2capFunction::
|
| - ~BluetoothSocketListenUsingL2capFunction() {}
|
| -
|
| -int BluetoothSocketListenUsingL2capFunction::socket_id() const {
|
| - return params_->socket_id;
|
| -}
|
| -
|
| -const std::string& BluetoothSocketListenUsingL2capFunction::uuid() const {
|
| - return params_->uuid;
|
| -}
|
| -
|
| -bool BluetoothSocketListenUsingL2capFunction::CreateParams() {
|
| - params_ = bluetooth_socket::ListenUsingL2cap::Params::Create(*args_);
|
| - EXTENSION_FUNCTION_VALIDATE(params_.get());
|
| - return true;
|
| -}
|
| -
|
| -void BluetoothSocketListenUsingL2capFunction::CreateService(
|
| - scoped_refptr<device::BluetoothAdapter> adapter,
|
| - const device::BluetoothUUID& uuid,
|
| - scoped_ptr<std::string> name,
|
| - const device::BluetoothAdapter::CreateServiceCallback& callback,
|
| - const device::BluetoothAdapter::CreateServiceErrorCallback&
|
| - error_callback) {
|
| - device::BluetoothAdapter::ServiceOptions service_options;
|
| - service_options.name = name.Pass();
|
| -
|
| - ListenOptions* options = params_->options.get();
|
| - if (options) {
|
| - if (options->psm) {
|
| - int psm = *options->psm;
|
| - if (!IsValidPsm(psm)) {
|
| - error_callback.Run(kInvalidPsmError);
|
| - return;
|
| - }
|
| -
|
| - service_options.psm.reset(new int(psm));
|
| - }
|
| - }
|
| -
|
| - adapter->CreateL2capService(uuid, service_options, callback, error_callback);
|
| -}
|
| -
|
| -void BluetoothSocketListenUsingL2capFunction::CreateResults() {
|
| - results_ = bluetooth_socket::ListenUsingL2cap::Results::Create();
|
| -}
|
| -
|
| -BluetoothSocketAbstractConnectFunction::
|
| - BluetoothSocketAbstractConnectFunction() {}
|
| -
|
| -BluetoothSocketAbstractConnectFunction::
|
| - ~BluetoothSocketAbstractConnectFunction() {}
|
| -
|
| -bool BluetoothSocketAbstractConnectFunction::Prepare() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - params_ = bluetooth_socket::Connect::Params::Create(*args_);
|
| - EXTENSION_FUNCTION_VALIDATE(params_.get());
|
| -
|
| - socket_event_dispatcher_ = GetSocketEventDispatcher(browser_context());
|
| - return socket_event_dispatcher_ != NULL;
|
| -}
|
| -
|
| -void BluetoothSocketAbstractConnectFunction::AsyncWorkStart() {
|
| - DCHECK(BrowserThread::CurrentlyOn(work_thread_id()));
|
| - device::BluetoothAdapterFactory::GetAdapter(
|
| - base::Bind(&BluetoothSocketAbstractConnectFunction::OnGetAdapter, this));
|
| -}
|
| -
|
| -void BluetoothSocketAbstractConnectFunction::OnGetAdapter(
|
| - scoped_refptr<device::BluetoothAdapter> adapter) {
|
| - DCHECK(BrowserThread::CurrentlyOn(work_thread_id()));
|
| - BluetoothApiSocket* socket = GetSocket(params_->socket_id);
|
| - if (!socket) {
|
| - error_ = kSocketNotFoundError;
|
| - AsyncWorkCompleted();
|
| - return;
|
| - }
|
| -
|
| - device::BluetoothDevice* device = adapter->GetDevice(params_->address);
|
| - if (!device) {
|
| - error_ = kDeviceNotFoundError;
|
| - AsyncWorkCompleted();
|
| - return;
|
| - }
|
| -
|
| - device::BluetoothUUID uuid(params_->uuid);
|
| - if (!uuid.IsValid()) {
|
| - error_ = kInvalidUuidError;
|
| - AsyncWorkCompleted();
|
| - return;
|
| - }
|
| -
|
| - BluetoothPermissionRequest param(params_->uuid);
|
| - if (!BluetoothManifestData::CheckRequest(extension(), param)) {
|
| - error_ = kPermissionDeniedError;
|
| - AsyncWorkCompleted();
|
| - return;
|
| - }
|
| -
|
| - ConnectToService(device, uuid);
|
| -}
|
| -
|
| -void BluetoothSocketAbstractConnectFunction::OnConnect(
|
| - scoped_refptr<device::BluetoothSocket> socket) {
|
| - DCHECK(BrowserThread::CurrentlyOn(work_thread_id()));
|
| -
|
| - // Fetch the socket again since this is not a reference-counted object, and
|
| - // it may have gone away in the meantime (we check earlier to avoid making
|
| - // a connection in the case of an obvious programming error).
|
| - BluetoothApiSocket* api_socket = GetSocket(params_->socket_id);
|
| - if (!api_socket) {
|
| - error_ = kSocketNotFoundError;
|
| - AsyncWorkCompleted();
|
| - return;
|
| - }
|
| -
|
| - api_socket->AdoptConnectedSocket(socket,
|
| - params_->address,
|
| - device::BluetoothUUID(params_->uuid));
|
| - socket_event_dispatcher_->OnSocketConnect(extension_id(),
|
| - params_->socket_id);
|
| -
|
| - results_ = bluetooth_socket::Connect::Results::Create();
|
| - AsyncWorkCompleted();
|
| -}
|
| -
|
| -void BluetoothSocketAbstractConnectFunction::OnConnectError(
|
| - const std::string& message) {
|
| - DCHECK(BrowserThread::CurrentlyOn(work_thread_id()));
|
| - error_ = message;
|
| - AsyncWorkCompleted();
|
| -}
|
| -
|
| -BluetoothSocketConnectFunction::BluetoothSocketConnectFunction() {}
|
| -
|
| -BluetoothSocketConnectFunction::~BluetoothSocketConnectFunction() {}
|
| -
|
| -void BluetoothSocketConnectFunction::ConnectToService(
|
| - device::BluetoothDevice* device,
|
| - const device::BluetoothUUID& uuid) {
|
| - device->ConnectToService(
|
| - uuid,
|
| - base::Bind(&BluetoothSocketConnectFunction::OnConnect, this),
|
| - base::Bind(&BluetoothSocketConnectFunction::OnConnectError, this));
|
| -}
|
| -
|
| -BluetoothSocketDisconnectFunction::BluetoothSocketDisconnectFunction() {}
|
| -
|
| -BluetoothSocketDisconnectFunction::~BluetoothSocketDisconnectFunction() {}
|
| -
|
| -bool BluetoothSocketDisconnectFunction::Prepare() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - params_ = bluetooth_socket::Disconnect::Params::Create(*args_);
|
| - EXTENSION_FUNCTION_VALIDATE(params_.get());
|
| - return true;
|
| -}
|
| -
|
| -void BluetoothSocketDisconnectFunction::AsyncWorkStart() {
|
| - DCHECK(BrowserThread::CurrentlyOn(work_thread_id()));
|
| - BluetoothApiSocket* socket = GetSocket(params_->socket_id);
|
| - if (!socket) {
|
| - error_ = kSocketNotFoundError;
|
| - AsyncWorkCompleted();
|
| - return;
|
| - }
|
| -
|
| - socket->Disconnect(base::Bind(&BluetoothSocketDisconnectFunction::OnSuccess,
|
| - this));
|
| -}
|
| -
|
| -void BluetoothSocketDisconnectFunction::OnSuccess() {
|
| - DCHECK(BrowserThread::CurrentlyOn(work_thread_id()));
|
| - results_ = bluetooth_socket::Disconnect::Results::Create();
|
| - AsyncWorkCompleted();
|
| -}
|
| -
|
| -BluetoothSocketCloseFunction::BluetoothSocketCloseFunction() {}
|
| -
|
| -BluetoothSocketCloseFunction::~BluetoothSocketCloseFunction() {}
|
| -
|
| -bool BluetoothSocketCloseFunction::Prepare() {
|
| - params_ = bluetooth_socket::Close::Params::Create(*args_);
|
| - EXTENSION_FUNCTION_VALIDATE(params_.get());
|
| - return true;
|
| -}
|
| -
|
| -void BluetoothSocketCloseFunction::Work() {
|
| - BluetoothApiSocket* socket = GetSocket(params_->socket_id);
|
| - if (!socket) {
|
| - error_ = kSocketNotFoundError;
|
| - return;
|
| - }
|
| -
|
| - RemoveSocket(params_->socket_id);
|
| - results_ = bluetooth_socket::Close::Results::Create();
|
| -}
|
| -
|
| -BluetoothSocketSendFunction::BluetoothSocketSendFunction()
|
| - : io_buffer_size_(0) {}
|
| -
|
| -BluetoothSocketSendFunction::~BluetoothSocketSendFunction() {}
|
| -
|
| -bool BluetoothSocketSendFunction::Prepare() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - params_ = bluetooth_socket::Send::Params::Create(*args_);
|
| - EXTENSION_FUNCTION_VALIDATE(params_.get());
|
| -
|
| - io_buffer_size_ = params_->data.size();
|
| - io_buffer_ = new net::WrappedIOBuffer(params_->data.data());
|
| - return true;
|
| -}
|
| -
|
| -void BluetoothSocketSendFunction::AsyncWorkStart() {
|
| - DCHECK(BrowserThread::CurrentlyOn(work_thread_id()));
|
| - BluetoothApiSocket* socket = GetSocket(params_->socket_id);
|
| - if (!socket) {
|
| - error_ = kSocketNotFoundError;
|
| - return;
|
| - }
|
| -
|
| - socket->Send(io_buffer_,
|
| - io_buffer_size_,
|
| - base::Bind(&BluetoothSocketSendFunction::OnSuccess, this),
|
| - base::Bind(&BluetoothSocketSendFunction::OnError, this));
|
| -}
|
| -
|
| -void BluetoothSocketSendFunction::OnSuccess(int bytes_sent) {
|
| - DCHECK(BrowserThread::CurrentlyOn(work_thread_id()));
|
| - results_ = bluetooth_socket::Send::Results::Create(bytes_sent);
|
| - AsyncWorkCompleted();
|
| -}
|
| -
|
| -void BluetoothSocketSendFunction::OnError(
|
| - BluetoothApiSocket::ErrorReason reason,
|
| - const std::string& message) {
|
| - DCHECK(BrowserThread::CurrentlyOn(work_thread_id()));
|
| - error_ = message;
|
| - AsyncWorkCompleted();
|
| -}
|
| -
|
| -BluetoothSocketGetInfoFunction::BluetoothSocketGetInfoFunction() {}
|
| -
|
| -BluetoothSocketGetInfoFunction::~BluetoothSocketGetInfoFunction() {}
|
| -
|
| -bool BluetoothSocketGetInfoFunction::Prepare() {
|
| - params_ = bluetooth_socket::GetInfo::Params::Create(*args_);
|
| - EXTENSION_FUNCTION_VALIDATE(params_.get());
|
| - return true;
|
| -}
|
| -
|
| -void BluetoothSocketGetInfoFunction::Work() {
|
| - BluetoothApiSocket* socket = GetSocket(params_->socket_id);
|
| - if (!socket) {
|
| - error_ = kSocketNotFoundError;
|
| - return;
|
| - }
|
| -
|
| - linked_ptr<bluetooth_socket::SocketInfo> socket_info =
|
| - CreateSocketInfo(params_->socket_id, socket);
|
| - results_ = bluetooth_socket::GetInfo::Results::Create(*socket_info);
|
| -}
|
| -
|
| -BluetoothSocketGetSocketsFunction::BluetoothSocketGetSocketsFunction() {}
|
| -
|
| -BluetoothSocketGetSocketsFunction::~BluetoothSocketGetSocketsFunction() {}
|
| -
|
| -bool BluetoothSocketGetSocketsFunction::Prepare() { return true; }
|
| -
|
| -void BluetoothSocketGetSocketsFunction::Work() {
|
| - std::vector<linked_ptr<bluetooth_socket::SocketInfo> > socket_infos;
|
| - base::hash_set<int>* resource_ids = GetSocketIds();
|
| - if (resource_ids != NULL) {
|
| - for (base::hash_set<int>::iterator it = resource_ids->begin();
|
| - it != resource_ids->end();
|
| - ++it) {
|
| - int socket_id = *it;
|
| - BluetoothApiSocket* socket = GetSocket(socket_id);
|
| - if (socket) {
|
| - socket_infos.push_back(CreateSocketInfo(socket_id, socket));
|
| - }
|
| - }
|
| - }
|
| - results_ = bluetooth_socket::GetSockets::Results::Create(socket_infos);
|
| -}
|
| -
|
| -} // namespace api
|
| -} // namespace extensions
|
|
|