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

Unified Diff: device/bluetooth/bluetooth_adapter_mac.h

Issue 319183010: device/bluetooth: Clean up classic discovery in BluetoothAdapterMac. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 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
« no previous file with comments | « no previous file | device/bluetooth/bluetooth_adapter_mac.mm » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: device/bluetooth/bluetooth_adapter_mac.h
diff --git a/device/bluetooth/bluetooth_adapter_mac.h b/device/bluetooth/bluetooth_adapter_mac.h
index c8414817d89c1fdfff79cd178076f3009ed7d225..8b051fe33b2186ccbf9846d38e1e197067c05a07 100644
--- a/device/bluetooth/bluetooth_adapter_mac.h
+++ b/device/bluetooth/bluetooth_adapter_mac.h
@@ -17,7 +17,7 @@
#include "base/observer_list.h"
#include "device/bluetooth/bluetooth_adapter.h"
-@class BluetoothAdapterMacDelegate;
+@class BluetoothDeviceInquiryDelegate;
@class IOBluetoothDevice;
@class IOBluetoothDeviceInquiry;
@class NSArray;
@@ -32,6 +32,7 @@ class SequencedTaskRunner;
namespace device {
class BluetoothAdapterMacTest;
+class BluetoothMacClassicDiscoveryManager;
class BluetoothAdapterMac : public BluetoothAdapter {
public:
@@ -70,13 +71,9 @@ class BluetoothAdapterMac : public BluetoothAdapter {
const CreateServiceCallback& callback,
const CreateServiceErrorCallback& error_callback) OVERRIDE;
- // called by BluetoothAdapterMacDelegate.
- void DeviceInquiryStarted(IOBluetoothDeviceInquiry* inquiry);
- void DeviceFound(IOBluetoothDeviceInquiry* inquiry,
- IOBluetoothDevice* device);
- void DeviceInquiryComplete(IOBluetoothDeviceInquiry* inquiry,
- IOReturn error,
- bool aborted);
+ // Called by BluetoothMacClassicDiscoveryManager.
+ void DeviceFound(IOBluetoothDevice* device);
+ void ClassicDiscoveryStopped(bool unexpected);
protected:
// BluetoothAdapter:
@@ -86,13 +83,6 @@ class BluetoothAdapterMac : public BluetoothAdapter {
private:
friend class BluetoothAdapterMacTest;
- enum DiscoveryStatus {
- NOT_DISCOVERING,
- DISCOVERY_STARTING,
- DISCOVERING,
- DISCOVERY_STOPPING
- };
-
BluetoothAdapterMac();
virtual ~BluetoothAdapterMac();
@@ -111,25 +101,14 @@ class BluetoothAdapterMac : public BluetoothAdapter {
// Updates |devices_| to be consistent with |devices|.
void UpdateDevices(NSArray* devices);
- void MaybeStartDeviceInquiry();
- void MaybeStopDeviceInquiry();
-
- typedef std::vector<std::pair<base::Closure, ErrorCallback> >
- DiscoveryCallbackList;
- void RunCallbacks(const DiscoveryCallbackList& callback_list,
- bool success) const;
-
std::string address_;
std::string name_;
bool powered_;
- DiscoveryStatus discovery_status_;
- DiscoveryCallbackList on_start_discovery_callbacks_;
- DiscoveryCallbackList on_stop_discovery_callbacks_;
- size_t num_discovery_listeners_;
+ int num_discovery_sessions_;
- base::scoped_nsobject<BluetoothAdapterMacDelegate> adapter_delegate_;
- base::scoped_nsobject<IOBluetoothDeviceInquiry> device_inquiry_;
+ scoped_ptr<BluetoothMacClassicDiscoveryManager>
+ classic_discovery_session_manager_;
// A list of discovered device addresses.
// This list is used to check if the same device is discovered twice during
@@ -150,6 +129,48 @@ class BluetoothAdapterMac : public BluetoothAdapter {
DISALLOW_COPY_AND_ASSIGN(BluetoothAdapterMac);
};
+// Class used by BluetoothAdapterMac to manage a classic discovery session.
+// This class makes sure that a device inquiry is being performed as long as
+// discovery has been requested by the adapter. Instances are created and owned
+// by BluetoothAdapterMac and should not be created by others.
+class BluetoothMacClassicDiscoveryManager {
keybuk 2014/06/09 17:57:39 I dislike having multiple classes in a header like
+ public:
+ BluetoothMacClassicDiscoveryManager(BluetoothAdapterMac* adapter);
+ ~BluetoothMacClassicDiscoveryManager();
+
+ // Returns true, if discovery is currently being performed.
+ bool IsDiscovering() const;
+
+ // Initiates a discovery session. Returns true on success, or if discovery
+ // is already running.
+ bool StartDiscovery();
+ bool StopDiscovery();
+
+ // Called by BluetoothDeviceInquiryDelegate.
+ void DeviceInquiryStarted(IOBluetoothDeviceInquiry* inquiry);
+ void DeviceFound(IOBluetoothDeviceInquiry* inquiry,
+ IOBluetoothDevice* device);
+ void DeviceInquiryComplete(IOBluetoothDeviceInquiry* inquiry,
+ IOReturn error,
+ bool aborted);
+
+ private:
+ // The requested discovery state.
+ bool should_do_discovery_;
+
+ // The current inquiry state.
+ bool inquiry_running_;
+
+ // The BluetoothAdapterMac that this instance belongs to.
+ BluetoothAdapterMac* adapter_;
+
+ // Objective-C objects for running and tracking device inquiry.
+ base::scoped_nsobject<BluetoothDeviceInquiryDelegate> inquiry_delegate_;
+ base::scoped_nsobject<IOBluetoothDeviceInquiry> inquiry_;
+
+ DISALLOW_COPY_AND_ASSIGN(BluetoothMacClassicDiscoveryManager);
+};
+
} // namespace device
#endif // DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_MAC_H_
« no previous file with comments | « no previous file | device/bluetooth/bluetooth_adapter_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698