Index: content/shell/browser/layout_test/layout_test_bluetooth_adapter_provider.cc |
diff --git a/content/shell/browser/layout_test/layout_test_bluetooth_adapter_provider.cc b/content/shell/browser/layout_test/layout_test_bluetooth_adapter_provider.cc |
index c89ddf84172aa341324a12105392da2cf34f8239..eaf77da61e68edac53788cc6f854752c61585c9c 100644 |
--- a/content/shell/browser/layout_test/layout_test_bluetooth_adapter_provider.cc |
+++ b/content/shell/browser/layout_test/layout_test_bluetooth_adapter_provider.cc |
@@ -23,13 +23,16 @@ |
#include "device/bluetooth/test/mock_bluetooth_adapter.h" |
#include "device/bluetooth/test/mock_bluetooth_discovery_session.h" |
#include "device/bluetooth/test/mock_bluetooth_gatt_connection.h" |
+#include "device/bluetooth/test/mock_bluetooth_gatt_descriptor.h" |
#include "device/bluetooth/test/mock_bluetooth_gatt_notify_session.h" |
#include "testing/gmock/include/gmock/gmock.h" |
using base::StringPiece; |
using device::BluetoothAdapter; |
using device::BluetoothDevice; |
+using device::BluetoothGattCharacteristic; |
using device::BluetoothRemoteGattCharacteristic; |
+using device::BluetoothRemoteGattDescriptor; |
using device::BluetoothRemoteGattService; |
using device::BluetoothUUID; |
using device::MockBluetoothAdapter; |
@@ -37,6 +40,7 @@ using device::MockBluetoothDevice; |
using device::MockBluetoothDiscoverySession; |
using device::MockBluetoothGattCharacteristic; |
using device::MockBluetoothGattConnection; |
+using device::MockBluetoothGattDescriptor; |
using device::MockBluetoothGattNotifySession; |
using device::MockBluetoothGattService; |
using testing::ElementsAre; |
@@ -50,6 +54,8 @@ typedef testing::NiceMock<MockBluetoothAdapter> NiceMockBluetoothAdapter; |
typedef testing::NiceMock<MockBluetoothDevice> NiceMockBluetoothDevice; |
typedef testing::NiceMock<MockBluetoothDiscoverySession> |
NiceMockBluetoothDiscoverySession; |
+typedef testing::NiceMock<MockBluetoothGattDescriptor> |
+ NiceMockBluetoothGattDescriptor; |
typedef testing::NiceMock<MockBluetoothGattCharacteristic> |
NiceMockBluetoothGattCharacteristic; |
typedef testing::NiceMock<MockBluetoothGattConnection> |
@@ -84,6 +90,10 @@ const char kMeasurementIntervalUUID[] = "2a21"; |
const char kHeartRateMeasurementUUID[] = "2a37"; |
const char kSerialNumberStringUUID[] = "2a25"; |
const char kPeripheralPrivacyFlagUUID[] = "2a02"; |
+// Descriptors: |
+const char kUserDescriptionUUID[] = "2901"; |
+// client config is in our blacklist. it must not be writable |
ortuno
2016/11/21 03:34:08
s/client/Client/ and s/it/It/
dougt
2016/11/22 01:47:16
Acknowledged.
|
+const char kClientConfigUUID[] = "00002902-0000-1000-8000-00805f9b34fb"; |
ortuno
2016/11/21 03:34:08
Since it's a standard service you don't need the s
dougt
2016/11/22 01:47:16
Acknowledged.
|
// Invokes Run() on the k-th argument of the function with no arguments. |
ACTION_TEMPLATE(RunCallback, |
@@ -650,9 +660,7 @@ LayoutTestBluetoothAdapterProvider::GetHeartRateAdapter() { |
device->AddMockService(GetGenericAccessService(device.get())); |
device->AddMockService(GetHeartRateService(adapter.get(), device.get())); |
- |
adapter->AddMockDevice(std::move(device)); |
- |
return adapter; |
} |
@@ -1452,6 +1460,17 @@ LayoutTestBluetoothAdapterProvider::GetHeartRateService( |
return notify_session; |
})); |
+ // Enable descriptors on the heart_rate_measurement |
+ ON_CALL(*heart_rate_measurement, GetDescriptors()) |
+ .WillByDefault( |
+ Invoke(measurement_ptr, |
+ &MockBluetoothGattCharacteristic::GetMockDescriptors)); |
+ |
+ ON_CALL(*heart_rate_measurement, GetDescriptor(_)) |
+ .WillByDefault( |
+ Invoke(measurement_ptr, |
+ &MockBluetoothGattCharacteristic::GetMockDescriptor)); |
+ |
// Body Sensor Location Characteristic (Chest) |
std::unique_ptr<NiceMockBluetoothGattCharacteristic> |
body_sensor_location_chest(GetBaseGATTCharacteristic( |
@@ -1496,6 +1515,37 @@ LayoutTestBluetoothAdapterProvider::GetHeartRateService( |
return location; |
})); |
+ // Add two descriptors on the heart rate. One for user description, and one |
ortuno
2016/11/21 03:34:08
I would add these to DisconnectingHealthThermomete
dougt
2016/11/29 22:50:48
Done.
|
+ // for client configuration. Client configuration is blacklisted for writes. |
+ std::unique_ptr<NiceMockBluetoothGattDescriptor> user_description( |
+ new NiceMockBluetoothGattDescriptor( |
+ heart_rate_measurement.get(), "user_description", |
+ BluetoothUUID(kUserDescriptionUUID), false, |
+ device::BluetoothGattCharacteristic::Permission::PERMISSION_READ)); |
+ |
+ // this descriptor is not allowed to be written. |
+ std::unique_ptr<NiceMockBluetoothGattDescriptor> client_config( |
+ new NiceMockBluetoothGattDescriptor( |
+ heart_rate_measurement.get(), "client_characteristic_configuration", |
+ BluetoothUUID(kClientConfigUUID), false, |
+ device::BluetoothGattCharacteristic::Permission::PERMISSION_WRITE)); |
+ |
+ ON_CALL(*client_config, ReadRemoteDescriptor(_, _)) |
+ .WillByDefault(Invoke( |
+ [](const BluetoothRemoteGattDescriptor::ValueCallback& callback, |
+ const BluetoothRemoteGattDescriptor::ErrorCallback&) { |
+ std::vector<uint8_t> value({1}); |
+ callback.Run(value); |
+ })); |
+ |
+ // Default write that returns success. This is used to test blacklist |
+ // handling of writes. |
+ ON_CALL(*client_config, WriteRemoteDescriptor(_, _, _)) |
+ .WillByDefault(RunCallback<1 /* success callback */>()); |
+ |
+ heart_rate_measurement->AddMockDescriptor(std::move(user_description)); |
+ heart_rate_measurement->AddMockDescriptor(std::move(client_config)); |
+ |
heart_rate->AddMockCharacteristic(std::move(heart_rate_measurement)); |
heart_rate->AddMockCharacteristic(std::move(body_sensor_location_chest)); |
heart_rate->AddMockCharacteristic(std::move(body_sensor_location_wrist)); |