Add git cl format presubmit warning for extension and apps.
[chromium-blink-merge.git] / device / bluetooth / bluetooth_device_chromeos.h
blobfef7cfdcfae6a0ab657adab22377aaa5c5242303
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef DEVICE_BLUETOOTH_BLUETOOTH_DEVICE_CHROMEOS_H
6 #define DEVICE_BLUETOOTH_BLUETOOTH_DEVICE_CHROMEOS_H
8 #include <string>
10 #include "base/memory/scoped_ptr.h"
11 #include "base/memory/weak_ptr.h"
12 #include "chromeos/dbus/bluetooth_agent_service_provider.h"
13 #include "chromeos/dbus/bluetooth_device_client.h"
14 #include "dbus/object_path.h"
15 #include "device/bluetooth/bluetooth_device.h"
17 namespace chromeos {
19 class BluetoothAdapterChromeOS;
21 // The BluetoothDeviceChromeOS class implements BluetoothDevice for the
22 // Chrome OS platform.
23 class BluetoothDeviceChromeOS
24 : public device::BluetoothDevice,
25 private chromeos::BluetoothAgentServiceProvider::Delegate {
26 public:
27 // BluetoothDevice override
28 virtual uint32 GetBluetoothClass() const OVERRIDE;
29 virtual std::string GetAddress() const OVERRIDE;
30 virtual uint16 GetVendorID() const OVERRIDE;
31 virtual uint16 GetProductID() const OVERRIDE;
32 virtual uint16 GetDeviceID() const OVERRIDE;
33 virtual bool IsPaired() const OVERRIDE;
34 virtual bool IsConnected() const OVERRIDE;
35 virtual bool IsConnectable() const OVERRIDE;
36 virtual bool IsConnecting() const OVERRIDE;
37 virtual ServiceList GetServices() const OVERRIDE;
38 virtual void GetServiceRecords(
39 const ServiceRecordsCallback& callback,
40 const ErrorCallback& error_callback) OVERRIDE;
41 virtual void ProvidesServiceWithName(
42 const std::string& name,
43 const ProvidesServiceCallback& callback) OVERRIDE;
44 virtual bool ExpectingPinCode() const OVERRIDE;
45 virtual bool ExpectingPasskey() const OVERRIDE;
46 virtual bool ExpectingConfirmation() const OVERRIDE;
47 virtual void Connect(
48 device::BluetoothDevice::PairingDelegate* pairing_delegate,
49 const base::Closure& callback,
50 const ConnectErrorCallback& error_callback) OVERRIDE;
51 virtual void SetPinCode(const std::string& pincode) OVERRIDE;
52 virtual void SetPasskey(uint32 passkey) OVERRIDE;
53 virtual void ConfirmPairing() OVERRIDE;
54 virtual void RejectPairing() OVERRIDE;
55 virtual void CancelPairing() OVERRIDE;
56 virtual void Disconnect(
57 const base::Closure& callback,
58 const ErrorCallback& error_callback) OVERRIDE;
59 virtual void Forget(const ErrorCallback& error_callback) OVERRIDE;
60 virtual void ConnectToService(
61 const std::string& service_uuid,
62 const SocketCallback& callback) OVERRIDE;
63 virtual void ConnectToProfile(
64 device::BluetoothProfile* profile,
65 const base::Closure& callback,
66 const ErrorCallback& error_callback) OVERRIDE;
67 virtual void SetOutOfBandPairingData(
68 const device::BluetoothOutOfBandPairingData& data,
69 const base::Closure& callback,
70 const ErrorCallback& error_callback) OVERRIDE;
71 virtual void ClearOutOfBandPairingData(
72 const base::Closure& callback,
73 const ErrorCallback& error_callback) OVERRIDE;
75 protected:
76 // BluetoothDevice override
77 virtual std::string GetDeviceName() const OVERRIDE;
79 private:
80 friend class BluetoothAdapterChromeOS;
82 BluetoothDeviceChromeOS(BluetoothAdapterChromeOS* adapter,
83 const dbus::ObjectPath& object_path);
84 virtual ~BluetoothDeviceChromeOS();
86 // BluetoothAgentServiceProvider::Delegate override.
87 virtual void Release() OVERRIDE;
88 virtual void RequestPinCode(const dbus::ObjectPath& device_path,
89 const PinCodeCallback& callback) OVERRIDE;
90 virtual void DisplayPinCode(const dbus::ObjectPath& device_path,
91 const std::string& pincode) OVERRIDE;
92 virtual void RequestPasskey(const dbus::ObjectPath& device_path,
93 const PasskeyCallback& callback) OVERRIDE;
94 virtual void DisplayPasskey(const dbus::ObjectPath& device_path,
95 uint32 passkey, uint16 entered) OVERRIDE;
96 virtual void RequestConfirmation(const dbus::ObjectPath& device_path,
97 uint32 passkey,
98 const ConfirmationCallback& callback)
99 OVERRIDE;
100 virtual void RequestAuthorization(const dbus::ObjectPath& device_path,
101 const ConfirmationCallback& callback)
102 OVERRIDE;
103 virtual void AuthorizeService(const dbus::ObjectPath& device_path,
104 const std::string& uuid,
105 const ConfirmationCallback& callback) OVERRIDE;
106 virtual void Cancel() OVERRIDE;
108 // Internal method to initiate a connection to this device, and methods called
109 // by dbus:: on completion of the D-Bus method call.
110 void ConnectInternal(bool after_pairing,
111 const base::Closure& callback,
112 const ConnectErrorCallback& error_callback);
113 void OnConnect(bool after_pairing,
114 const base::Closure& callback);
115 void OnConnectError(bool after_pairing,
116 const ConnectErrorCallback& error_callback,
117 const std::string& error_name,
118 const std::string& error_message);
120 // Called by dbus:: on completion of the D-Bus method call to register the
121 // pairing agent.
122 void OnRegisterAgent(const base::Closure& callback,
123 const ConnectErrorCallback& error_callback);
124 void OnRegisterAgentError(const ConnectErrorCallback& error_callback,
125 const std::string& error_name,
126 const std::string& error_message);
128 // Called by dbus:: on completion of the D-Bus method call to pair the device.
129 void OnPair(const base::Closure& callback,
130 const ConnectErrorCallback& error_callback);
131 void OnPairError(const ConnectErrorCallback& error_callback,
132 const std::string& error_name,
133 const std::string& error_message);
135 // Called by dbus:: on failure of the D-Bus method call to cancel pairing,
136 // there is no matching completion call since we don't do anything special
137 // in that case.
138 void OnCancelPairingError(const std::string& error_name,
139 const std::string& error_message);
141 // Internal method to set the device as trusted. Trusted devices can connect
142 // to us automatically, and we can connect to them after rebooting; it also
143 // causes the device to be remembered by the stack even if not paired.
144 // |success| to the callback indicates whether or not the request succeeded.
145 void SetTrusted();
146 void OnSetTrusted(bool success);
148 // Internal method to unregister the pairing agent and method called by dbus::
149 // on failure of the D-Bus method call. No completion call as success is
150 // ignored.
151 void UnregisterAgent();
152 void OnUnregisterAgentError(const std::string& error_name,
153 const std::string& error_message);
155 // Called by dbus:: on completion of the D-Bus method call to disconnect the
156 // device.
157 void OnDisconnect(const base::Closure& callback);
158 void OnDisconnectError(const ErrorCallback& error_callback,
159 const std::string& error_name,
160 const std::string& error_message);
162 // Called by dbus:: on failure of the D-Bus method call to unpair the device;
163 // there is no matching completion call since this object is deleted in the
164 // process of unpairing.
165 void OnForgetError(const ErrorCallback& error_callback,
166 const std::string& error_name,
167 const std::string& error_message);
169 // Run any outstanding pairing callbacks passing |status| as the result of
170 // pairing. Returns true if any callbacks were run, false if not.
171 bool RunPairingCallbacks(Status status);
173 // Called by dbus:: on completion of the D-Bus method call to
174 // connect a peofile.
175 void OnConnectProfile(device::BluetoothProfile* profile,
176 const base::Closure& callback);
177 void OnConnectProfileError(device::BluetoothProfile* profile,
178 const ErrorCallback& error_callback,
179 const std::string& error_name,
180 const std::string& error_message);
182 // Return the object path of the device; used by BluetoothAdapterChromeOS
183 const dbus::ObjectPath& object_path() const { return object_path_; }
185 // The adapter that owns this device instance.
186 BluetoothAdapterChromeOS* adapter_;
188 // The dbus object path of the device object.
189 dbus::ObjectPath object_path_;
191 // Number of ongoing calls to Connect().
192 int num_connecting_calls_;
194 // During pairing this is set to an object that we don't own, but on which
195 // we can make method calls to request, display or confirm PIN Codes and
196 // Passkeys. Generally it is the object that owns this one.
197 PairingDelegate* pairing_delegate_;
199 // Flag to indicate whether a pairing delegate method has been called during
200 // pairing.
201 bool pairing_delegate_used_;
203 // During pairing this is set to an instance of a D-Bus agent object
204 // intialized with our own class as its delegate.
205 scoped_ptr<BluetoothAgentServiceProvider> agent_;
207 // During pairing these callbacks are set to those provided by method calls
208 // made on us by |agent_| and are called by our own method calls such as
209 // SetPinCode() and SetPasskey().
210 PinCodeCallback pincode_callback_;
211 PasskeyCallback passkey_callback_;
212 ConfirmationCallback confirmation_callback_;
214 // Note: This should remain the last member so it'll be destroyed and
215 // invalidate its weak pointers before any other members are destroyed.
216 base::WeakPtrFactory<BluetoothDeviceChromeOS> weak_ptr_factory_;
218 DISALLOW_COPY_AND_ASSIGN(BluetoothDeviceChromeOS);
221 } // namespace chromeos
223 #endif // DEVICE_BLUETOOTH_BLUETOOTH_DEVICE_CHROMEOS_H