Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1565)

Unified Diff: chrome/browser/extensions/api/bluetooth/bluetooth_api.cc

Issue 10381120: Implement chrome.experimental.bluetooth.connect (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
« no previous file with comments | « chrome/browser/extensions/api/bluetooth/bluetooth_api.h ('k') | chrome/common/extensions/api/experimental_bluetooth.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698