Index: device/bluetooth/bluez/bluetooth_device_bluez.cc |
diff --git a/device/bluetooth/bluez/bluetooth_device_bluez.cc b/device/bluetooth/bluez/bluetooth_device_bluez.cc |
index 73e54871143c0599a4789e551dcd622dbde82343..d7ceecdb0eeecdae0e34ff687592b0219c80a597 100644 |
--- a/device/bluetooth/bluez/bluetooth_device_bluez.cc |
+++ b/device/bluetooth/bluez/bluetooth_device_bluez.cc |
@@ -11,6 +11,7 @@ |
#include "base/bind.h" |
#include "base/metrics/histogram.h" |
+#include "base/optional.h" |
#include "base/strings/string_number_conversions.h" |
#include "base/strings/string_util.h" |
#include "dbus/bus.h" |
@@ -137,6 +138,11 @@ BluetoothDevice::ConnectErrorCode DBusErrorToConnectError( |
return error_code; |
} |
+base::Optional<int8_t> EnsureValidPower(int16_t power) { |
+ return ((power < INT8_MIN) || (power > INT8_MAX)) ? base::Optional<int8_t>() |
+ : power; |
+} |
+ |
} // namespace |
namespace bluez { |
@@ -316,28 +322,28 @@ BluetoothDeviceBlueZ::UUIDList BluetoothDeviceBlueZ::GetUUIDs() const { |
return uuids; |
} |
-int16_t BluetoothDeviceBlueZ::GetInquiryRSSI() const { |
+base::Optional<int8_t> BluetoothDeviceBlueZ::GetInquiryRSSI() const { |
bluez::BluetoothDeviceClient::Properties* properties = |
bluez::BluezDBusManager::Get()->GetBluetoothDeviceClient()->GetProperties( |
object_path_); |
DCHECK(properties); |
if (!properties->rssi.is_valid()) |
- return kUnknownPower; |
+ return base::Optional<int8_t>(); |
- return properties->rssi.value(); |
+ return EnsureValidPower(properties->rssi.value()); |
} |
-int16_t BluetoothDeviceBlueZ::GetInquiryTxPower() const { |
+base::Optional<int8_t> BluetoothDeviceBlueZ::GetInquiryTxPower() const { |
bluez::BluetoothDeviceClient::Properties* properties = |
bluez::BluezDBusManager::Get()->GetBluetoothDeviceClient()->GetProperties( |
object_path_); |
DCHECK(properties); |
if (!properties->tx_power.is_valid()) |
- return kUnknownPower; |
+ return base::Optional<int8_t>(); |
- return properties->tx_power.value(); |
+ return EnsureValidPower(properties->tx_power.value()); |
} |
bool BluetoothDeviceBlueZ::ExpectingPinCode() const { |
@@ -594,11 +600,20 @@ void BluetoothDeviceBlueZ::GattServiceRemoved( |
adapter()->NotifyGattServiceRemoved(service); |
} |
-void BluetoothDeviceBlueZ::OnGetConnInfo(const ConnectionInfoCallback& callback, |
- int16_t rssi, |
- int16_t transmit_power, |
- int16_t max_transmit_power) { |
- callback.Run(ConnectionInfo(rssi, transmit_power, max_transmit_power)); |
+void BluetoothDeviceBlueZ::OnGetConnInfo( |
+ const ConnectionInfoCallback& callback, |
+ const base::Optional<int16_t>& rssi, |
+ const base::Optional<int16_t>& transmit_power, |
+ const base::Optional<int16_t>& max_transmit_power) { |
+ if (!rssi) { |
+ DCHECK(!transmit_power); |
+ DCHECK(!max_transmit_power); |
+ callback.Run(ConnectionInfo()); |
+ } |
+ |
+ callback.Run(ConnectionInfo(EnsureValidPower(rssi.value()), |
+ EnsureValidPower(transmit_power.value()), |
+ EnsureValidPower(max_transmit_power.value()))); |
} |
void BluetoothDeviceBlueZ::OnGetConnInfoError( |