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_PROFILE_CHROMEOS_H_
6 #define DEVICE_BLUETOOTH_BLUETOOTH_PROFILE_CHROMEOS_H_
10 #include "base/basictypes.h"
11 #include "base/callback.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "base/memory/weak_ptr.h"
14 #include "chromeos/chromeos_export.h"
15 #include "chromeos/dbus/bluetooth_profile_service_provider.h"
16 #include "dbus/object_path.h"
17 #include "device/bluetooth/bluetooth_profile.h"
27 class BluetoothAdapter
;
33 // The BluetoothProfileChromeOS class implements BluetoothProfile for the
34 // Chrome OS platform.
35 class CHROMEOS_EXPORT BluetoothProfileChromeOS
36 : public device::BluetoothProfile
,
37 private BluetoothProfileServiceProvider::Delegate
{
39 // BluetoothProfile override.
40 virtual void Unregister() OVERRIDE
;
41 virtual void SetConnectionCallback(
42 const ConnectionCallback
& callback
) OVERRIDE
;
44 // Return the UUID of the profile.
45 const std::string
& uuid() const { return uuid_
; }
48 friend class BluetoothProfile
;
50 BluetoothProfileChromeOS();
51 virtual ~BluetoothProfileChromeOS();
53 // Called by BluetoothProfile::Register to initialize the profile object
54 // asynchronously. |uuid|, |options| and |callback| are the arguments to
55 // BluetoothProfile::Register.
56 void Init(const std::string
& uuid
,
57 const device::BluetoothProfile::Options
& options
,
58 const ProfileCallback
& callback
);
60 // BluetoothProfileServiceProvider::Delegate override.
61 virtual void Release() OVERRIDE
;
62 virtual void NewConnection(
63 const dbus::ObjectPath
& device_path
,
64 scoped_ptr
<dbus::FileDescriptor
> fd
,
65 const BluetoothProfileServiceProvider::Delegate::Options
& options
,
66 const ConfirmationCallback
& callback
) OVERRIDE
;
67 virtual void RequestDisconnection(
68 const dbus::ObjectPath
& device_path
,
69 const ConfirmationCallback
& callback
) OVERRIDE
;
70 virtual void Cancel() OVERRIDE
;
72 // Called by dbus:: on completion of the D-Bus method call to register the
74 void OnRegisterProfile(const ProfileCallback
& callback
);
75 void OnRegisterProfileError(const ProfileCallback
& callback
,
76 const std::string
& error_name
,
77 const std::string
& error_message
);
79 // Called by dbus:: on completion of the D-Bus method call to unregister
80 // the profile object.
81 void OnUnregisterProfile();
82 void OnUnregisterProfileError(const std::string
& error_name
,
83 const std::string
& error_message
);
85 // Method run once the file descriptor has been validated in order to get
86 // the default adapter, and method run once the default adapter has been
87 // obtained in order to get the device object to be passed to the connection
90 // The |fd| argument is moved compared to the NewConnection() call since it
91 // becomes the result of a PostTaskAndReplyWithResult() call.
93 const dbus::ObjectPath
& device_path
,
94 const BluetoothProfileServiceProvider::Delegate::Options
& options
,
95 const ConfirmationCallback
& callback
,
96 scoped_ptr
<dbus::FileDescriptor
> fd
);
98 const dbus::ObjectPath
& device_path
,
99 const BluetoothProfileServiceProvider::Delegate::Options
& options
,
100 const ConfirmationCallback
& callback
,
101 scoped_ptr
<dbus::FileDescriptor
> fd
,
102 scoped_refptr
<device::BluetoothAdapter
>);
104 // UUID of the profile passed during initialization.
107 // Object path of the local profile D-Bus object.
108 dbus::ObjectPath object_path_
;
110 // Local profile D-Bus object used for receiving profile delegate methods
112 scoped_ptr
<BluetoothProfileServiceProvider
> profile_
;
114 // Callback used on both outgoing and incoming connections to pass the
115 // connected socket to profile object owner.
116 ConnectionCallback connection_callback_
;
118 // Note: This should remain the last member so it'll be destroyed and
119 // invalidate its weak pointers before any other members are destroyed.
120 base::WeakPtrFactory
<BluetoothProfileChromeOS
> weak_ptr_factory_
;
122 DISALLOW_COPY_AND_ASSIGN(BluetoothProfileChromeOS
);
125 } // namespace chromeos
127 #endif // DEVICE_BLUETOOTH_BLUETOOTH_PROFILE_CHROMEOS_H_