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

Unified Diff: components/proximity_auth/bluetooth_connection.h

Issue 585743004: [Easy Unlock] Port the BluetoothConnection class to native code. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use the Connect() utility function in more places Created 6 years, 3 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: components/proximity_auth/bluetooth_connection.h
diff --git a/components/proximity_auth/bluetooth_connection.h b/components/proximity_auth/bluetooth_connection.h
new file mode 100644
index 0000000000000000000000000000000000000000..f12668893620ec4040594bafbff181ba50cb1dea
--- /dev/null
+++ b/components/proximity_auth/bluetooth_connection.h
@@ -0,0 +1,93 @@
+// 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.
+
+#ifndef COMPONENTS_PROXIMITY_AUTH_BLUETOOTH_CONNECTION_H
+#define COMPONENTS_PROXIMITY_AUTH_BLUETOOTH_CONNECTION_H
+
+#include <string>
+
+#include "base/memory/ref_counted.h"
+#include "base/memory/weak_ptr.h"
+#include "components/proximity_auth/connection.h"
+#include "device/bluetooth/bluetooth_adapter.h"
+#include "device/bluetooth/bluetooth_device.h"
+#include "device/bluetooth/bluetooth_socket.h"
+#include "device/bluetooth/bluetooth_uuid.h"
+
+namespace net {
+class IOBuffer;
+}
+
+namespace proximity_auth {
+
+struct RemoteDevice;
+
+// Represents a Bluetooth connection with a remote device. The connection is a
+// persistent bidirectional channel for sending and receiving wire messages.
+class BluetoothConnection : public Connection,
+ public device::BluetoothAdapter::Observer {
+ public:
+ // Constructs a Bluetooth connection to the service with |uuid| on the
+ // |remote_device|. The |remote_device| must already be known to the system
+ // Bluetooth daemon.
+ BluetoothConnection(const RemoteDevice& remote_device,
+ const device::BluetoothUUID& uuid);
+ virtual ~BluetoothConnection();
+
+ protected:
+ // Connection:
+ virtual void Connect() OVERRIDE;
+ virtual void Disconnect() OVERRIDE;
+ virtual void SendMessageImpl(scoped_ptr<WireMessage> message) OVERRIDE;
+
+ // BluetoothAdapter::Observer:
+ virtual void DeviceRemoved(device::BluetoothAdapter* adapter,
+ device::BluetoothDevice* device) OVERRIDE;
+
+ // Exposed for testing.
+ virtual void ConnectToService(
+ device::BluetoothDevice* device,
+ const device::BluetoothUUID& uuid,
+ const device::BluetoothDevice::ConnectToServiceCallback& callback,
+ const device::BluetoothDevice::ConnectToServiceErrorCallback&
+ error_callback);
+
+ private:
+ // Registers receive callbacks with the backing |socket_|.
+ void StartReceive();
+
+ // Callbacks for asynchronous Bluetooth operations.
+ void OnAdapterInitialized(scoped_refptr<device::BluetoothAdapter> adapter);
+ void OnConnected(scoped_refptr<device::BluetoothSocket> socket);
+ void OnConnectionError(const std::string& error_message);
+ void OnSend(int bytes_sent);
+ void OnSendError(const std::string& error_message);
+ void OnReceive(int bytes_received, scoped_refptr<net::IOBuffer> buffer);
+ void OnReceiveError(device::BluetoothSocket::ErrorReason error_reason,
+ const std::string& error_message);
+
+ // The UUID (universally unique identifier) of the Bluetooth service on the
+ // remote device that |this| connection should connect to.
+ const device::BluetoothUUID uuid_;
+
+ // The Bluetooth adapter over which this connection is made. Non-null iff
+ // |this| connection is registered as an observer of the |adapter_|.
+ scoped_refptr<device::BluetoothAdapter> adapter_;
+
+ // The Bluetooth socket that backs this connection. NULL iff the connection is
+ // not in a connected state.
+ scoped_refptr<device::BluetoothSocket> socket_;
+
+ // The message that was sent over the backing |socket_|. NULL iff there is no
+ // send operation in progress.
+ scoped_ptr<WireMessage> pending_message_;
+
+ base::WeakPtrFactory<BluetoothConnection> weak_ptr_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(BluetoothConnection);
+};
+
+} // namespace proximity_auth
+
+#endif // COMPONENTS_PROXIMITY_AUTH_BLUETOOTH_CONNECTION_H

Powered by Google App Engine
This is Rietveld 408576698