| Index: chrome/browser/extensions/api/bluetooth/bluetooth_api.cc
|
| diff --git a/chrome/browser/extensions/api/bluetooth/bluetooth_api.cc b/chrome/browser/extensions/api/bluetooth/bluetooth_api.cc
|
| index b9d9984fd5d5ac3d4ebac79f7ae886b8ac750542..fa41879f71f433555a3654f4078edeb3c348620e 100644
|
| --- a/chrome/browser/extensions/api/bluetooth/bluetooth_api.cc
|
| +++ b/chrome/browser/extensions/api/bluetooth/bluetooth_api.cc
|
| @@ -11,9 +11,11 @@
|
| #include "content/public/browser/browser_thread.h"
|
|
|
| #if defined(OS_CHROMEOS)
|
| +#include "base/memory/ref_counted.h"
|
| #include "base/synchronization/lock.h"
|
| #include "chrome/browser/chromeos/bluetooth/bluetooth_adapter.h"
|
| #include "chrome/browser/chromeos/bluetooth/bluetooth_device.h"
|
| +#include "chrome/browser/chromeos/bluetooth/bluetooth_socket.h"
|
| #include "chrome/browser/chromeos/extensions/bluetooth_event_router.h"
|
|
|
| using chromeos::BluetoothAdapter;
|
| @@ -25,30 +27,44 @@ namespace GetDevicesWithServiceUUID =
|
| extensions::api::experimental_bluetooth::GetDevicesWithServiceUUID;
|
| namespace GetDevicesWithServiceName =
|
| extensions::api::experimental_bluetooth::GetDevicesWithServiceName;
|
| +namespace Connect = extensions::api::experimental_bluetooth::Connect;
|
| +namespace Disconnect = extensions::api::experimental_bluetooth::Disconnect;
|
|
|
| namespace extensions {
|
| namespace api {
|
|
|
| #if defined(OS_CHROMEOS)
|
|
|
| +chromeos::ExtensionBluetoothEventRouter*
|
| +BluetoothExtensionFunction::event_router() {
|
| + return profile()->GetExtensionService()->bluetooth_event_router();
|
| +}
|
| +
|
| const chromeos::BluetoothAdapter* BluetoothExtensionFunction::adapter() const {
|
| - return profile()->GetExtensionService()->bluetooth_event_router()->adapter();
|
| + const chromeos::ExtensionBluetoothEventRouter* bluetooth_event_router =
|
| + profile()->GetExtensionService()->bluetooth_event_router();
|
| + return bluetooth_event_router->adapter();
|
| }
|
|
|
| chromeos::BluetoothAdapter* BluetoothExtensionFunction::GetMutableAdapter() {
|
| - return profile()->GetExtensionService()->bluetooth_event_router()->
|
| - GetMutableAdapter();
|
| + return event_router()->GetMutableAdapter();
|
| +}
|
| +
|
| +chromeos::ExtensionBluetoothEventRouter*
|
| +AsyncBluetoothExtensionFunction::event_router() {
|
| + return profile()->GetExtensionService()->bluetooth_event_router();
|
| }
|
|
|
| const chromeos::BluetoothAdapter*
|
| AsyncBluetoothExtensionFunction::adapter() const {
|
| - return profile()->GetExtensionService()->bluetooth_event_router()->adapter();
|
| + const chromeos::ExtensionBluetoothEventRouter* bluetooth_event_router =
|
| + profile()->GetExtensionService()->bluetooth_event_router();
|
| + return bluetooth_event_router->adapter();
|
| }
|
|
|
| chromeos::BluetoothAdapter*
|
| AsyncBluetoothExtensionFunction::GetMutableAdapter() {
|
| - return profile()->GetExtensionService()->bluetooth_event_router()->
|
| - GetMutableAdapter();
|
| + return event_router()->GetMutableAdapter();
|
| }
|
|
|
| bool BluetoothIsAvailableFunction::RunImpl() {
|
| @@ -136,6 +152,51 @@ bool BluetoothGetDevicesWithServiceNameFunction::RunImpl() {
|
| return true;
|
| }
|
|
|
| +void BluetoothConnectFunction::ConnectToServiceCallback(
|
| + const chromeos::BluetoothDevice* device,
|
| + const std::string& service_uuid,
|
| + scoped_refptr<chromeos::BluetoothSocket> socket) {
|
| + if (socket.get()) {
|
| + int socket_id = event_router()->RegisterSocket(socket);
|
| +
|
| + experimental_bluetooth::Socket result_socket;
|
| + result_socket.device.address = device->address();
|
| + result_socket.device.name = UTF16ToUTF8(device->GetName());
|
| + result_socket.service_uuid = service_uuid;
|
| + result_socket.id = socket_id;
|
| + result_.reset(result_socket.ToValue().release());
|
| + SendResponse(true);
|
| + } else {
|
| + SendResponse(false);
|
| + }
|
| +
|
| + Release(); // Added in RunImpl
|
| +}
|
| +
|
| +bool BluetoothConnectFunction::RunImpl() {
|
| + scoped_ptr<Connect::Params> params(Connect::Params::Create(*args_));
|
| +
|
| + chromeos::BluetoothDevice* device =
|
| + GetMutableAdapter()->GetDevice(params->device.address);
|
| + if (!device) {
|
| + SendResponse(false);
|
| + return false;
|
| + }
|
| +
|
| + AddRef();
|
| + device->ConnectToService(params->service,
|
| + base::Bind(&BluetoothConnectFunction::ConnectToServiceCallback,
|
| + this,
|
| + device,
|
| + params->service));
|
| + return true;
|
| +}
|
| +
|
| +bool BluetoothDisconnectFunction::RunImpl() {
|
| + scoped_ptr<Disconnect::Params> params(Disconnect::Params::Create(*args_));
|
| + return event_router()->ReleaseSocket(params->socket.id);
|
| +}
|
| +
|
| #else
|
|
|
| // -----------------------------------------------------------------------------
|
| @@ -166,13 +227,18 @@ bool BluetoothGetDevicesWithServiceNameFunction::RunImpl() {
|
| return false;
|
| }
|
|
|
| -#endif
|
| +bool BluetoothConnectFunction::RunImpl() {
|
| + NOTREACHED() << "Not implemented yet";
|
| + return false;
|
| +}
|
|
|
| bool BluetoothDisconnectFunction::RunImpl() {
|
| NOTREACHED() << "Not implemented yet";
|
| return false;
|
| }
|
|
|
| +#endif
|
| +
|
| bool BluetoothReadFunction::RunImpl() {
|
| NOTREACHED() << "Not implemented yet";
|
| return false;
|
| @@ -193,10 +259,5 @@ bool BluetoothWriteFunction::RunImpl() {
|
| return false;
|
| }
|
|
|
| -bool BluetoothConnectFunction::RunImpl() {
|
| - NOTREACHED() << "Not implemented yet";
|
| - return false;
|
| -}
|
| -
|
| } // namespace api
|
| } // namespace extensions
|
|
|