diff options
-rw-r--r-- | chrome/browser/extensions/api/bluetooth/bluetooth_api.cc | 28 | ||||
-rw-r--r-- | chrome/browser/extensions/api/bluetooth/bluetooth_api.h | 4 | ||||
-rw-r--r-- | chromeos/dbus/bluetooth_device_client.cc | 54 | ||||
-rw-r--r-- | chromeos/dbus/bluetooth_device_client.h | 30 | ||||
-rw-r--r-- | chromeos/dbus/fake_bluetooth_device_client.cc | 27 | ||||
-rw-r--r-- | chromeos/dbus/fake_bluetooth_device_client.h | 13 | ||||
-rw-r--r-- | device/bluetooth/bluetooth_adapter_chromeos.cc | 5 | ||||
-rw-r--r-- | device/bluetooth/bluetooth_device.h | 6 | ||||
-rw-r--r-- | device/bluetooth/bluetooth_device_chromeos.cc | 63 | ||||
-rw-r--r-- | device/bluetooth/bluetooth_device_chromeos.h | 14 | ||||
-rw-r--r-- | device/bluetooth/bluetooth_device_mac.h | 3 | ||||
-rw-r--r-- | device/bluetooth/bluetooth_device_mac.mm | 6 | ||||
-rw-r--r-- | device/bluetooth/bluetooth_device_win.cc | 6 | ||||
-rw-r--r-- | device/bluetooth/bluetooth_device_win.h | 3 | ||||
-rw-r--r-- | device/bluetooth/test/mock_bluetooth_device.h | 3 |
15 files changed, 247 insertions, 18 deletions
diff --git a/chrome/browser/extensions/api/bluetooth/bluetooth_api.cc b/chrome/browser/extensions/api/bluetooth/bluetooth_api.cc index 14bff9d..026c5ed 100644 --- a/chrome/browser/extensions/api/bluetooth/bluetooth_api.cc +++ b/chrome/browser/extensions/api/bluetooth/bluetooth_api.cc @@ -6,6 +6,7 @@ #include <string> +#include "base/bind_helpers.h" #include "base/lazy_instance.h" #include "base/memory/ref_counted.h" #include "chrome/browser/extensions/api/bluetooth/bluetooth_api_utils.h" @@ -457,13 +458,36 @@ bool BluetoothConnectFunction::DoWork(scoped_refptr<BluetoothAdapter> adapter) { device->ConnectToProfile( bluetooth_profile, - base::Bind(&BluetoothConnectFunction::OnSuccessCallback, this), + base::Bind(&BluetoothConnectFunction::OnConnectedCallback, + this, + adapter, + device->GetAddress()), base::Bind(&BluetoothConnectFunction::OnErrorCallback, this)); return true; } -void BluetoothConnectFunction::OnSuccessCallback() { +void BluetoothConnectFunction::OnConnectedCallback( + scoped_refptr<device::BluetoothAdapter> adapter, + const std::string& device_address) { + DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); + + // TODO(tengs): Remove this once we have an API for starting the connection + // monitor. + BluetoothDevice* device = adapter->GetDevice(device_address); + if (!device) { + SetError(kInvalidDevice); + SendResponse(false); + return; + } + // Start the connection monitor, and return success even if this fails, + // as the connection was still opened successfully. + device->StartConnectionMonitor( + base::Bind(&BluetoothConnectFunction::OnMonitorStartedCallback, this), + base::Bind(&BluetoothConnectFunction::OnMonitorStartedCallback, this)); +} + +void BluetoothConnectFunction::OnMonitorStartedCallback() { DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); SendResponse(true); } diff --git a/chrome/browser/extensions/api/bluetooth/bluetooth_api.h b/chrome/browser/extensions/api/bluetooth/bluetooth_api.h index 22afeaf..ad89912 100644 --- a/chrome/browser/extensions/api/bluetooth/bluetooth_api.h +++ b/chrome/browser/extensions/api/bluetooth/bluetooth_api.h @@ -183,7 +183,9 @@ class BluetoothConnectFunction : public BluetoothExtensionFunction { virtual bool DoWork(scoped_refptr<device::BluetoothAdapter> adapter) OVERRIDE; private: - void OnSuccessCallback(); + void OnConnectedCallback(scoped_refptr<device::BluetoothAdapter> adapter, + const std::string& device_address); + void OnMonitorStartedCallback(); void OnErrorCallback(const std::string& error); }; diff --git a/chromeos/dbus/bluetooth_device_client.cc b/chromeos/dbus/bluetooth_device_client.cc index 033daf3..b505401 100644 --- a/chromeos/dbus/bluetooth_device_client.cc +++ b/chromeos/dbus/bluetooth_device_client.cc @@ -41,6 +41,10 @@ BluetoothDeviceClient::Properties::Properties( RegisterProperty(bluetooth_device::kLegacyPairingProperty, &legacy_pairing); RegisterProperty(bluetooth_device::kModaliasProperty, &modalias); RegisterProperty(bluetooth_device::kRSSIProperty, &rssi); + RegisterProperty(bluetooth_device::kConnectionRSSI, &connection_rssi); + RegisterProperty(bluetooth_device::kConnectionTXPower, &connection_tx_power); + RegisterProperty(bluetooth_device::kConnectionTXPowerMax, + &connection_tx_power_max); } BluetoothDeviceClient::Properties::~Properties() { @@ -267,6 +271,56 @@ class BluetoothDeviceClientImpl weak_ptr_factory_.GetWeakPtr(), error_callback)); } + // BluetoothDeviceClient override. + virtual void StartConnectionMonitor( + const dbus::ObjectPath& object_path, + const base::Closure& callback, + const ErrorCallback& error_callback) OVERRIDE { + dbus::MethodCall method_call(bluetooth_device::kBluetoothDeviceInterface, + bluetooth_device::kStartConnectionMonitor); + + dbus::ObjectProxy* object_proxy = + object_manager_->GetObjectProxy(object_path); + if (!object_proxy) { + error_callback.Run(kUnknownDeviceError, ""); + return; + } + object_proxy->CallMethodWithErrorCallback( + &method_call, + dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, + base::Bind(&BluetoothDeviceClientImpl::OnSuccess, + weak_ptr_factory_.GetWeakPtr(), + callback), + base::Bind(&BluetoothDeviceClientImpl::OnError, + weak_ptr_factory_.GetWeakPtr(), + error_callback)); + } + + // BluetoothDeviceClient override. + virtual void StopConnectionMonitor( + const dbus::ObjectPath& object_path, + const base::Closure& callback, + const ErrorCallback& error_callback) OVERRIDE { + dbus::MethodCall method_call(bluetooth_device::kBluetoothDeviceInterface, + bluetooth_device::kStopConnectionMonitor); + + dbus::ObjectProxy* object_proxy = + object_manager_->GetObjectProxy(object_path); + if (!object_proxy) { + error_callback.Run(kUnknownDeviceError, ""); + return; + } + object_proxy->CallMethodWithErrorCallback( + &method_call, + dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, + base::Bind(&BluetoothDeviceClientImpl::OnSuccess, + weak_ptr_factory_.GetWeakPtr(), + callback), + base::Bind(&BluetoothDeviceClientImpl::OnError, + weak_ptr_factory_.GetWeakPtr(), + error_callback)); + } + protected: virtual void Init(dbus::Bus* bus) OVERRIDE { object_manager_ = bus->GetObjectManager( diff --git a/chromeos/dbus/bluetooth_device_client.h b/chromeos/dbus/bluetooth_device_client.h index 11f5a1c..a09b4ef 100644 --- a/chromeos/dbus/bluetooth_device_client.h +++ b/chromeos/dbus/bluetooth_device_client.h @@ -76,9 +76,24 @@ class CHROMEOS_EXPORT BluetoothDeviceClient : public DBusClient { // Remote Device ID information in Linux kernel modalias format. Read-only. dbus::Property<std::string> modalias; - // Received signal strength indicator. Read-only. + // Received signal strength indicator that is set when the device is + // discovered during inquiry. Read-only. dbus::Property<int16> rssi; + // Received signal strength indicator when a connection is open to the + // device. This property is not set unless connection monitor is enabled. + // Read-only. + dbus::Property<int16> connection_rssi; + + // The transmit power level of the host when a connection is open + // to the device. This property is not set unless connection monitor is + // enabled. Read-only. + dbus::Property<int16> connection_tx_power; + + // The maximum transmit power level of the host that can be set + // when connected to the device. Read-only. + dbus::Property<int16> connection_tx_power_max; + Properties(dbus::ObjectProxy* object_proxy, const std::string& interface_name, const PropertyChangedCallback& callback); @@ -169,6 +184,19 @@ class CHROMEOS_EXPORT BluetoothDeviceClient : public DBusClient { const base::Closure& callback, const ErrorCallback& error_callback) = 0; + // Starts connection monitor for the device with object path + // |object_path|. Connection monitor is a mode the connection properties, + // RSSI and TX power are tracked and updated when they change. + virtual void StartConnectionMonitor(const dbus::ObjectPath& object_path, + const base::Closure& callback, + const ErrorCallback& error_callback) = 0; + + // Stops connection monitor for the device with object path + // |object_path|. + virtual void StopConnectionMonitor(const dbus::ObjectPath& object_path, + const base::Closure& callback, + const ErrorCallback& error_callback) = 0; + // Creates the instance. static BluetoothDeviceClient* Create(); diff --git a/chromeos/dbus/fake_bluetooth_device_client.cc b/chromeos/dbus/fake_bluetooth_device_client.cc index 44b9a0b..2dd5aae 100644 --- a/chromeos/dbus/fake_bluetooth_device_client.cc +++ b/chromeos/dbus/fake_bluetooth_device_client.cc @@ -220,7 +220,8 @@ FakeBluetoothDeviceClient::FakeBluetoothDeviceClient() : simulation_interval_ms_(kSimulationIntervalMs), discovery_simulation_step_(0), incoming_pairing_simulation_step_(0), - pairing_cancelled_(false) { + pairing_cancelled_(false), + connection_monitor_started_(false) { Properties* properties = new Properties(base::Bind( &FakeBluetoothDeviceClient::OnPropertyChanged, base::Unretained(this), @@ -459,6 +460,22 @@ void FakeBluetoothDeviceClient::CancelPairing( callback.Run(); } +void FakeBluetoothDeviceClient::StartConnectionMonitor( + const dbus::ObjectPath& object_path, + const base::Closure& callback, + const ErrorCallback& error_callback) { + VLOG(1) << "StartConnectionMonitor: " << object_path.value(); + connection_monitor_started_ = true; + callback.Run(); +} + +void FakeBluetoothDeviceClient::StopConnectionMonitor( + const dbus::ObjectPath& object_path, + const base::Closure& callback, + const ErrorCallback& error_callback) { + connection_monitor_started_ = false; + callback.Run(); +} void FakeBluetoothDeviceClient::BeginDiscoverySimulation( const dbus::ObjectPath& adapter_path) { @@ -677,12 +694,12 @@ void FakeBluetoothDeviceClient::DiscoverySimulationTimer() { dbus::ObjectPath(kLowEnergyPath)); } else if (discovery_simulation_step_ == 4) { + UpdateDeviceRSSI(dbus::ObjectPath(kLowEnergyPath), + base::RandInt(kMinRSSI, kMaxRSSI)); CreateDevice(dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath), dbus::ObjectPath(kDisplayPinCodePath)); CreateDevice(dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath), dbus::ObjectPath(kVanishingDevicePath)); - UpdateDeviceRSSI(dbus::ObjectPath(kLowEnergyPath), - base::RandInt(kMinRSSI, kMaxRSSI)); } else if (discovery_simulation_step_ == 7) { CreateDevice(dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath), @@ -713,10 +730,10 @@ void FakeBluetoothDeviceClient::DiscoverySimulationTimer() { base::RandInt(kMinRSSI, kMaxRSSI)); } else if (discovery_simulation_step_ == 13) { - RemoveDevice(dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath), - dbus::ObjectPath(kVanishingDevicePath)); UpdateDeviceRSSI(dbus::ObjectPath(kLowEnergyPath), base::RandInt(kMinRSSI, kMaxRSSI)); + RemoveDevice(dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath), + dbus::ObjectPath(kVanishingDevicePath)); } else if (discovery_simulation_step_ == 14) { UpdateDeviceRSSI(dbus::ObjectPath(kLowEnergyPath), diff --git a/chromeos/dbus/fake_bluetooth_device_client.h b/chromeos/dbus/fake_bluetooth_device_client.h index 827fdcb..af3a7dc 100644 --- a/chromeos/dbus/fake_bluetooth_device_client.h +++ b/chromeos/dbus/fake_bluetooth_device_client.h @@ -69,6 +69,14 @@ class CHROMEOS_EXPORT FakeBluetoothDeviceClient virtual void CancelPairing(const dbus::ObjectPath& object_path, const base::Closure& callback, const ErrorCallback& error_callback) OVERRIDE; + virtual void StartConnectionMonitor( + const dbus::ObjectPath& object_path, + const base::Closure& callback, + const ErrorCallback& error_callback) OVERRIDE; + virtual void StopConnectionMonitor( + const dbus::ObjectPath& object_path, + const base::Closure& callback, + const ErrorCallback& error_callback) OVERRIDE; void SetSimulationIntervalMs(int interval_ms); @@ -192,8 +200,8 @@ class CHROMEOS_EXPORT FakeBluetoothDeviceClient const dbus::ObjectPath& object_path, Properties* properties); - // Updates the RSSI property of fake device with object path |object_path| - // to |rssi|, if the fake device exists. + // Updates the inquiry RSSI property of fake device with object path + // |object_path| to |rssi|, if the fake device exists. void UpdateDeviceRSSI(const dbus::ObjectPath& object_path, int16 rssi); void PinCodeCallback( @@ -242,6 +250,7 @@ class CHROMEOS_EXPORT FakeBluetoothDeviceClient uint32_t discovery_simulation_step_; uint32_t incoming_pairing_simulation_step_; bool pairing_cancelled_; + bool connection_monitor_started_; }; } // namespace chromeos diff --git a/device/bluetooth/bluetooth_adapter_chromeos.cc b/device/bluetooth/bluetooth_adapter_chromeos.cc index c7e8d9a..83bfb88a 100644 --- a/device/bluetooth/bluetooth_adapter_chromeos.cc +++ b/device/bluetooth/bluetooth_adapter_chromeos.cc @@ -335,7 +335,10 @@ void BluetoothAdapterChromeOS::DevicePropertyChanged( property_name == properties->paired.name() || property_name == properties->trusted.name() || property_name == properties->connected.name() || - property_name == properties->uuids.name()) + property_name == properties->uuids.name() || + property_name == properties->rssi.name() || + property_name == properties->connection_rssi.name() || + property_name == properties->connection_tx_power.name()) NotifyDeviceChanged(device_chromeos); // When a device becomes paired, mark it as trusted so that the user does diff --git a/device/bluetooth/bluetooth_device.h b/device/bluetooth/bluetooth_device.h index 7dce44f..a182594 100644 --- a/device/bluetooth/bluetooth_device.h +++ b/device/bluetooth/bluetooth_device.h @@ -404,6 +404,12 @@ class BluetoothDevice { const base::Closure& callback, const ErrorCallback& error_callback) = 0; + // Starts monitoring the connection properties, RSSI and TX power. These + // properties will be tracked, and updated when their values change. Exactly + // one of |callback| or |error_callback| will be run. + virtual void StartConnectionMonitor(const base::Closure& callback, + const ErrorCallback& error_callback) = 0; + // Returns the list of discovered GATT services. virtual std::vector<BluetoothGattService*> GetGattServices() const; diff --git a/device/bluetooth/bluetooth_device_chromeos.cc b/device/bluetooth/bluetooth_device_chromeos.cc index 0535927..f668e9a 100644 --- a/device/bluetooth/bluetooth_device_chromeos.cc +++ b/device/bluetooth/bluetooth_device_chromeos.cc @@ -128,6 +128,7 @@ BluetoothDeviceChromeOS::BluetoothDeviceChromeOS( : adapter_(adapter), object_path_(object_path), num_connecting_calls_(0), + connection_monitor_started_(false), ui_task_runner_(ui_task_runner), socket_thread_(socket_thread), weak_ptr_factory_(this) { @@ -223,18 +224,39 @@ uint16 BluetoothDeviceChromeOS::GetDeviceID() const { } int BluetoothDeviceChromeOS::GetRSSI() const { - NOTIMPLEMENTED(); - return kUnknownPower; + BluetoothDeviceClient::Properties* properties = + DBusThreadManager::Get()->GetBluetoothDeviceClient()->GetProperties( + object_path_); + DCHECK(properties); + + if (!IsConnected()) { + NOTIMPLEMENTED(); + return kUnknownPower; + } + + return connection_monitor_started_ ? properties->connection_rssi.value() + : kUnknownPower; } int BluetoothDeviceChromeOS::GetCurrentHostTransmitPower() const { - NOTIMPLEMENTED(); - return kUnknownPower; + BluetoothDeviceClient::Properties* properties = + DBusThreadManager::Get()->GetBluetoothDeviceClient()->GetProperties( + object_path_); + DCHECK(properties); + + return IsConnected() && connection_monitor_started_ + ? properties->connection_tx_power.value() + : kUnknownPower; } int BluetoothDeviceChromeOS::GetMaximumHostTransmitPower() const { - NOTIMPLEMENTED(); - return kUnknownPower; + BluetoothDeviceClient::Properties* properties = + DBusThreadManager::Get()->GetBluetoothDeviceClient()->GetProperties( + object_path_); + DCHECK(properties); + + return IsConnected() ? properties->connection_tx_power_max.value() + : kUnknownPower; } bool BluetoothDeviceChromeOS::IsPaired() const { @@ -459,6 +481,19 @@ void BluetoothDeviceChromeOS::ClearOutOfBandPairingData( error_callback.Run(); } +void BluetoothDeviceChromeOS::StartConnectionMonitor( + const base::Closure& callback, + const ErrorCallback& error_callback) { + DBusThreadManager::Get()->GetBluetoothDeviceClient()->StartConnectionMonitor( + object_path_, + base::Bind(&BluetoothDeviceChromeOS::OnStartConnectionMonitor, + weak_ptr_factory_.GetWeakPtr(), + callback), + base::Bind(&BluetoothDeviceChromeOS::OnStartConnectionMonitorError, + weak_ptr_factory_.GetWeakPtr(), + error_callback)); +} + BluetoothPairingChromeOS* BluetoothDeviceChromeOS::BeginPairing( BluetoothDevice::PairingDelegate* pairing_delegate) { pairing_.reset(new BluetoothPairingChromeOS(this, pairing_delegate)); @@ -655,6 +690,22 @@ void BluetoothDeviceChromeOS::OnSetTrusted(bool success) { << ": Failed to set device as trusted"; } +void BluetoothDeviceChromeOS::OnStartConnectionMonitor( + const base::Closure& callback) { + connection_monitor_started_ = true; + callback.Run(); +} + +void BluetoothDeviceChromeOS::OnStartConnectionMonitorError( + const ErrorCallback& error_callback, + const std::string& error_name, + const std::string& error_message) { + LOG(WARNING) << object_path_.value() + << ": Failed to start connection monitor: " << error_name << ": " + << error_message; + error_callback.Run(); +} + void BluetoothDeviceChromeOS::OnDisconnect(const base::Closure& callback) { VLOG(1) << object_path_.value() << ": Disconnected"; callback.Run(); diff --git a/device/bluetooth/bluetooth_device_chromeos.h b/device/bluetooth/bluetooth_device_chromeos.h index 4132789..4a15a08 100644 --- a/device/bluetooth/bluetooth_device_chromeos.h +++ b/device/bluetooth/bluetooth_device_chromeos.h @@ -82,6 +82,9 @@ class BluetoothDeviceChromeOS virtual void ClearOutOfBandPairingData( const base::Closure& callback, const ErrorCallback& error_callback) OVERRIDE; + virtual void StartConnectionMonitor( + const base::Closure& callback, + const ErrorCallback& error_callback) OVERRIDE; // Creates a pairing object with the given delegate |pairing_delegate| and // establishes it as the pairing context for this device. All pairing-related @@ -170,6 +173,13 @@ class BluetoothDeviceChromeOS const std::string& error_name, const std::string& error_message); + // Called by dbus:: on completion of the D-Bus method call to start the + // connection monitor. + void OnStartConnectionMonitor(const base::Closure& callback); + void OnStartConnectionMonitorError(const ErrorCallback& error_callback, + const std::string& error_name, + const std::string& error_message); + // Returns the object path of the device; used by BluetoothAdapterChromeOS const dbus::ObjectPath& object_path() const { return object_path_; } @@ -185,6 +195,10 @@ class BluetoothDeviceChromeOS // Number of ongoing calls to Connect(). int num_connecting_calls_; + // True if the connection monitor has been started, tracking the connection + // RSSI and TX power. + bool connection_monitor_started_; + // UI thread task runner and socket thread object used to create sockets. scoped_refptr<base::SequencedTaskRunner> ui_task_runner_; scoped_refptr<device::BluetoothSocketThread> socket_thread_; diff --git a/device/bluetooth/bluetooth_device_mac.h b/device/bluetooth/bluetooth_device_mac.h index 757f769..a538239 100644 --- a/device/bluetooth/bluetooth_device_mac.h +++ b/device/bluetooth/bluetooth_device_mac.h @@ -73,6 +73,9 @@ class BluetoothDeviceMac : public BluetoothDevice { virtual void ClearOutOfBandPairingData( const base::Closure& callback, const ErrorCallback& error_callback) OVERRIDE; + virtual void StartConnectionMonitor( + const base::Closure& callback, + const ErrorCallback& error_callback) OVERRIDE; // Returns the Bluetooth address for the |device|. The returned address has a // normalized format (see below). diff --git a/device/bluetooth/bluetooth_device_mac.mm b/device/bluetooth/bluetooth_device_mac.mm index e2d8c7d..60db6f4 100644 --- a/device/bluetooth/bluetooth_device_mac.mm +++ b/device/bluetooth/bluetooth_device_mac.mm @@ -222,6 +222,12 @@ void BluetoothDeviceMac::ClearOutOfBandPairingData( NOTIMPLEMENTED(); } +void BluetoothDeviceMac::StartConnectionMonitor( + const base::Closure& callback, + const ErrorCallback& error_callback) { + NOTIMPLEMENTED(); +} + int BluetoothDeviceMac::GetHostTransmitPower( BluetoothHCITransmitPowerLevelType power_level_type) const { IOBluetoothHostController* controller = diff --git a/device/bluetooth/bluetooth_device_win.cc b/device/bluetooth/bluetooth_device_win.cc index a06f947..59e11c4 100644 --- a/device/bluetooth/bluetooth_device_win.cc +++ b/device/bluetooth/bluetooth_device_win.cc @@ -234,6 +234,12 @@ void BluetoothDeviceWin::ClearOutOfBandPairingData( NOTIMPLEMENTED(); } +void BluetoothDeviceWin::StartConnectionMonitor( + const base::Closure& callback, + const ErrorCallback& error_callback) { + NOTIMPLEMENTED(); +} + const BluetoothServiceRecord* BluetoothDeviceWin::GetServiceRecord( const device::BluetoothUUID& uuid) const { for (ServiceRecordList::const_iterator iter = service_record_list_.begin(); diff --git a/device/bluetooth/bluetooth_device_win.h b/device/bluetooth/bluetooth_device_win.h index fa0c752..0a019c5 100644 --- a/device/bluetooth/bluetooth_device_win.h +++ b/device/bluetooth/bluetooth_device_win.h @@ -79,6 +79,9 @@ class BluetoothDeviceWin : public BluetoothDevice { virtual void ClearOutOfBandPairingData( const base::Closure& callback, const ErrorCallback& error_callback) OVERRIDE; + virtual void StartConnectionMonitor( + const base::Closure& callback, + const ErrorCallback& error_callback) OVERRIDE; // Used by BluetoothProfileWin to retrieve the service record for the given // |uuid|. diff --git a/device/bluetooth/test/mock_bluetooth_device.h b/device/bluetooth/test/mock_bluetooth_device.h index 5a6af5c..e624f9a 100644 --- a/device/bluetooth/test/mock_bluetooth_device.h +++ b/device/bluetooth/test/mock_bluetooth_device.h @@ -79,6 +79,9 @@ class MockBluetoothDevice : public BluetoothDevice { MOCK_METHOD2(ClearOutOfBandPairingData, void(const base::Closure& callback, const BluetoothDevice::ErrorCallback& error_callback)); + MOCK_METHOD2(StartConnectionMonitor, + void(const base::Closure& callback, + const BluetoothDevice::ErrorCallback& error_callback)); MOCK_CONST_METHOD0(GetGattServices, std::vector<BluetoothGattService*>()); MOCK_CONST_METHOD1(GetGattService, BluetoothGattService*(const std::string&)); |