1 // Copyright (c) 2012 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. 4 5 #ifndef DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_WIN_H_ 6 #define DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_WIN_H_ 7 8 #include <string> 9 #include <utility> 10 #include <vector> 11 12 #include "base/containers/hash_tables.h" 13 #include "base/memory/ref_counted.h" 14 #include "base/memory/scoped_vector.h" 15 #include "base/memory/weak_ptr.h" 16 #include "base/threading/thread_checker.h" 17 #include "device/bluetooth/bluetooth_adapter.h" 18 #include "device/bluetooth/bluetooth_task_manager_win.h" 19 20 namespace base { 21 22 class SequencedTaskRunner; 23 24 } // namespace base 25 26 namespace device { 27 28 class BluetoothAdapterFactory; 29 class BluetoothAdapterWinTest; 30 class BluetoothDevice; 31 32 class BluetoothAdapterWin : public BluetoothAdapter, 33 public BluetoothTaskManagerWin::Observer { 34 public: 35 typedef base::Callback<void()> InitCallback; 36 37 // BluetoothAdapter override 38 virtual void AddObserver(BluetoothAdapter::Observer* observer) OVERRIDE; 39 virtual void RemoveObserver(BluetoothAdapter::Observer* observer) OVERRIDE; 40 virtual std::string GetAddress() const OVERRIDE; 41 virtual std::string GetName() const OVERRIDE; 42 virtual bool IsInitialized() const OVERRIDE; 43 virtual bool IsPresent() const OVERRIDE; 44 virtual bool IsPowered() const OVERRIDE; 45 virtual void SetPowered( 46 bool powered, 47 const base::Closure& callback, 48 const ErrorCallback& error_callback) OVERRIDE; 49 virtual bool IsDiscovering() const OVERRIDE; 50 51 virtual void StartDiscovering( 52 const base::Closure& callback, 53 const ErrorCallback& error_callback) OVERRIDE; 54 virtual void StopDiscovering( 55 const base::Closure& callback, 56 const ErrorCallback& error_callback) OVERRIDE; 57 virtual void ReadLocalOutOfBandPairingData( 58 const BluetoothOutOfBandPairingDataCallback& callback, 59 const ErrorCallback& error_callback) OVERRIDE; 60 61 // BluetoothTaskManagerWin::Observer override 62 virtual void AdapterStateChanged( 63 const BluetoothTaskManagerWin::AdapterState& state) OVERRIDE; 64 virtual void DiscoveryStarted(bool success) OVERRIDE; 65 virtual void DiscoveryStopped() OVERRIDE; 66 virtual void DevicesDiscovered( 67 const ScopedVector<BluetoothTaskManagerWin::DeviceState>& devices) 68 OVERRIDE; 69 70 virtual void DevicesUpdated( 71 const ScopedVector<BluetoothTaskManagerWin::DeviceState>& devices) 72 OVERRIDE; 73 74 private: 75 friend class BluetoothAdapterFactory; 76 friend class BluetoothAdapterWinTest; 77 78 enum DiscoveryStatus { 79 NOT_DISCOVERING, 80 DISCOVERY_STARTING, 81 DISCOVERING, 82 DISCOVERY_STOPPING 83 }; 84 85 explicit BluetoothAdapterWin(const InitCallback& init_callback); 86 virtual ~BluetoothAdapterWin(); 87 88 void Init(); 89 void InitForTest( 90 scoped_refptr<base::SequencedTaskRunner> ui_task_runner, 91 scoped_refptr<base::SequencedTaskRunner> bluetooth_task_runner); 92 93 void MaybePostStartDiscoveryTask(); 94 void MaybePostStopDiscoveryTask(); 95 96 InitCallback init_callback_; 97 std::string address_; 98 std::string name_; 99 bool initialized_; 100 bool powered_; 101 DiscoveryStatus discovery_status_; 102 base::hash_set<std::string> discovered_devices_; 103 104 std::vector<std::pair<base::Closure, ErrorCallback> > 105 on_start_discovery_callbacks_; 106 std::vector<base::Closure> on_stop_discovery_callbacks_; 107 size_t num_discovery_listeners_; 108 109 scoped_refptr<base::SequencedTaskRunner> ui_task_runner_; 110 scoped_refptr<BluetoothTaskManagerWin> task_manager_; 111 112 base::ThreadChecker thread_checker_; 113 114 // List of observers interested in event notifications from us. 115 ObserverList<BluetoothAdapter::Observer> observers_; 116 117 // NOTE: This should remain the last member so it'll be destroyed and 118 // invalidate its weak pointers before any other members are destroyed. 119 base::WeakPtrFactory<BluetoothAdapterWin> weak_ptr_factory_; 120 121 DISALLOW_COPY_AND_ASSIGN(BluetoothAdapterWin); 122 }; 123 124 } // namespace device 125 126 #endif // DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_WIN_H_ 127