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

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

Issue 10007008: Add support for creating bluetooth RFCOMM sockets. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: reupload off of proper base Created 8 years, 8 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 45318596101cab014d5fc4c3d09cd6afd1a52dd6..f4e6e78f269dbb0c3f8c448b691ce1202dd9a339 100644
--- a/chrome/browser/extensions/api/bluetooth/bluetooth_api.cc
+++ b/chrome/browser/extensions/api/bluetooth/bluetooth_api.cc
@@ -4,15 +4,18 @@
#include "chrome/browser/extensions/api/bluetooth/bluetooth_api.h"
+#include "base/memory/weak_ptr.h"
#include "base/utf_string_conversions.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/common/extensions/api/experimental.bluetooth.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;
@@ -24,6 +27,8 @@ 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 {
@@ -31,12 +36,15 @@ namespace api {
#if defined(OS_CHROMEOS)
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();
+ chromeos::ExtensionBluetoothEventRouter* bluetooth_event_router =
+ profile()->GetExtensionService()->bluetooth_event_router();
+ return bluetooth_event_router->GetMutableAdapter();
}
const chromeos::BluetoothAdapter*
@@ -135,6 +143,55 @@ 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()) {
+ // TODO(bryeung): hold on to this socket somewhere...
+
+ 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->fd();
+ result_.reset(result_socket.ToValue().get());
+ SendResponse(true);
+ }
+ SendResponse(false);
+}
+
+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;
+ }
+
+ 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_));
+
+ chromeos::BluetoothDevice* device =
+ GetMutableAdapter()->GetDevice(params->socket.device.address);
+ if (!device)
+ return false;
+
+ // TODO(bryeung): implement this...
+
+ return true;
+}
+
#else
// -----------------------------------------------------------------------------
@@ -165,13 +222,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;
@@ -192,10 +254,5 @@ bool BluetoothWriteFunction::RunImpl() {
return false;
}
-bool BluetoothConnectFunction::RunImpl() {
- NOTREACHED() << "Not implemented yet";
- return false;
-}
-
} // namespace api
} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698