Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / device / bluetooth / bluetooth_adapter_mac.h
index 6639db0..38002eb 100644 (file)
 #include <vector>
 
 #include "base/containers/hash_tables.h"
+#include "base/mac/scoped_nsobject.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
 #include "device/bluetooth/bluetooth_adapter.h"
+#include "device/bluetooth/bluetooth_discovery_manager_mac.h"
 
-#ifdef __OBJC__
-@class BluetoothAdapterMacDelegate;
 @class IOBluetoothDevice;
-@class IOBluetoothDeviceInquiry;
 @class NSArray;
 @class NSDate;
-#else
-class BluetoothAdapterMacDelegate;
-class IOBluetoothDevice;
-class IOBluetoothDeviceInquiry;
-class NSArray;
-class NSDate;
-#endif
 
 namespace base {
 
@@ -40,97 +32,86 @@ namespace device {
 
 class BluetoothAdapterMacTest;
 
-class BluetoothAdapterMac : public BluetoothAdapter {
+class BluetoothAdapterMac : public BluetoothAdapter,
+                            public BluetoothDiscoveryManagerMac::Observer {
  public:
-  // BluetoothAdapter override
-  virtual void AddObserver(BluetoothAdapter::Observer* observer) OVERRIDE;
-  virtual void RemoveObserver(BluetoothAdapter::Observer* observer) OVERRIDE;
-  virtual std::string GetAddress() const OVERRIDE;
-  virtual std::string GetName() const OVERRIDE;
-  virtual void SetName(const std::string& name,
+  static base::WeakPtr<BluetoothAdapter> CreateAdapter();
+
+  // BluetoothAdapter:
+  void AddObserver(BluetoothAdapter::Observer* observer) override;
+  void RemoveObserver(BluetoothAdapter::Observer* observer) override;
+  std::string GetAddress() const override;
+  std::string GetName() const override;
+  void SetName(const std::string& name,
+               const base::Closure& callback,
+               const ErrorCallback& error_callback) override;
+  bool IsInitialized() const override;
+  bool IsPresent() const override;
+  bool IsPowered() const override;
+  void SetPowered(bool powered,
+                  const base::Closure& callback,
+                  const ErrorCallback& error_callback) override;
+  bool IsDiscoverable() const override;
+  void SetDiscoverable(bool discoverable,
                        const base::Closure& callback,
-                       const ErrorCallback& error_callback) OVERRIDE;
-  virtual bool IsInitialized() const OVERRIDE;
-  virtual bool IsPresent() const OVERRIDE;
-  virtual bool IsPowered() const OVERRIDE;
-  virtual void SetPowered(
-      bool powered,
-      const base::Closure& callback,
-      const ErrorCallback& error_callback) OVERRIDE;
-  virtual bool IsDiscoverable() const OVERRIDE;
-  virtual void SetDiscoverable(
-      bool discoverable,
-      const base::Closure& callback,
-      const ErrorCallback& error_callback) OVERRIDE;
-  virtual bool IsDiscovering() const OVERRIDE;
-
-  virtual void StartDiscovering(
-      const base::Closure& callback,
-      const ErrorCallback& error_callback) OVERRIDE;
-  virtual void StopDiscovering(
-      const base::Closure& callback,
-      const ErrorCallback& error_callback) OVERRIDE;
-  virtual void ReadLocalOutOfBandPairingData(
-      const BluetoothOutOfBandPairingDataCallback& callback,
-      const ErrorCallback& error_callback) OVERRIDE;
-
-  // called by BluetoothAdapterMacDelegate.
-  void DeviceInquiryStarted(IOBluetoothDeviceInquiry* inquiry);
-  void DeviceFound(IOBluetoothDeviceInquiry* inquiry,
-                   IOBluetoothDevice* device);
-  void DeviceInquiryComplete(IOBluetoothDeviceInquiry* inquiry,
-                             IOReturn error,
-                             bool aborted);
+                       const ErrorCallback& error_callback) override;
+  bool IsDiscovering() const override;
+  void CreateRfcommService(
+      const BluetoothUUID& uuid,
+      const ServiceOptions& options,
+      const CreateServiceCallback& callback,
+      const CreateServiceErrorCallback& error_callback) override;
+  void CreateL2capService(
+      const BluetoothUUID& uuid,
+      const ServiceOptions& options,
+      const CreateServiceCallback& callback,
+      const CreateServiceErrorCallback& error_callback) override;
+
+  // BluetoothDiscoveryManagerMac::Observer overrides
+  void DeviceFound(IOBluetoothDevice* device) override;
+  void DiscoveryStopped(bool unexpected) override;
+
+  // Registers that a new |device| has connected to the local host.
+  void DeviceConnected(IOBluetoothDevice* device);
+
+ protected:
+  // BluetoothAdapter:
+  void RemovePairingDelegateInternal(
+      device::BluetoothDevice::PairingDelegate* pairing_delegate) override;
 
  private:
-  friend class BluetoothAdapterFactory;
   friend class BluetoothAdapterMacTest;
 
-  enum DiscoveryStatus {
-    NOT_DISCOVERING,
-    DISCOVERY_STARTING,
-    DISCOVERING,
-    DISCOVERY_STOPPING
-  };
-
   BluetoothAdapterMac();
-  virtual ~BluetoothAdapterMac();
+  ~BluetoothAdapterMac() override;
+
+  // BluetoothAdapter:
+  void AddDiscoverySession(const base::Closure& callback,
+                           const ErrorCallback& error_callback) override;
+  void RemoveDiscoverySession(const base::Closure& callback,
+                              const ErrorCallback& error_callback) override;
 
   void Init();
   void InitForTest(scoped_refptr<base::SequencedTaskRunner> ui_task_runner);
   void PollAdapter();
 
-  // Updates |devices_| to be consistent with |devices|.
-  void UpdateDevices(NSArray* devices);
-
-  void MaybeStartDeviceInquiry();
-  void MaybeStopDeviceInquiry();
+  // Registers that a new |device| has replied to an Inquiry, is paired, or has
+  // connected to the local host.
+  void DeviceAdded(IOBluetoothDevice* device);
 
-  typedef std::vector<std::pair<base::Closure, ErrorCallback> >
-      DiscoveryCallbackList;
-  void RunCallbacks(const DiscoveryCallbackList& callback_list,
-                    bool success) const;
+  // Updates |devices_| to include the currently paired devices, as well as any
+  // connected, but unpaired, devices. Notifies observers if any previously
+  // paired or connected devices are no longer present.
+  void UpdateDevices();
 
   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_;
-
-  BluetoothAdapterMacDelegate* adapter_delegate_;
-  IOBluetoothDeviceInquiry* device_inquiry_;
 
-  // A list of discovered device addresses.
-  // This list is used to check if the same device is discovered twice during
-  // the discovery between consecutive inquiries.
-  base::hash_set<std::string> discovered_devices_;
+  int num_discovery_sessions_;
 
-  // Timestamp for the recently accessed device.
-  // Used to determine if |devices_| needs an update.
-  NSDate* recently_accessed_device_timestamp_;
+  // Discovery manager for Bluetooth Classic.
+  scoped_ptr<BluetoothDiscoveryManagerMac> classic_discovery_manager_;
 
   scoped_refptr<base::SequencedTaskRunner> ui_task_runner_;