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 16b3c54101fe862d446299187044c16ed8f82ab3..96131efe17ab4f127fdb800bff7add7119c68a4f 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,13 @@ 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 blocklist. It must not be writable |
+const char kClientConfigUUID[] = "2902"; |
+// Blocklisted descriptor |
+const char kBlocklistedDescriptorUUID[] = |
+ "bad2ddcf-60db-45cd-bef9-fd72b153cf7c"; |
// Invokes Run() on the k-th argument of the function with no arguments. |
ACTION_TEMPLATE(RunCallback, |
@@ -654,9 +667,7 @@ LayoutTestBluetoothAdapterProvider::GetHeartRateAdapter() { |
device->AddMockService(GetGenericAccessService(device.get())); |
device->AddMockService(GetHeartRateService(adapter.get(), device.get())); |
- |
adapter->AddMockDevice(std::move(device)); |
- |
return adapter; |
} |
@@ -709,6 +720,33 @@ LayoutTestBluetoothAdapterProvider::GetDisconnectingHealthThermometer() { |
return GetBaseGATTNotifySession(measurement_ptr->GetWeakPtr()); |
})); |
+ std::unique_ptr<NiceMockBluetoothGattDescriptor> user_description( |
+ new NiceMockBluetoothGattDescriptor( |
+ measurement_interval.get(), "gatt.characteristic_user_description", |
+ BluetoothUUID(kUserDescriptionUUID), false, |
+ device::BluetoothRemoteGattCharacteristic::PROPERTY_READ)); |
+ |
+ std::unique_ptr<NiceMockBluetoothGattDescriptor> client_config( |
+ new NiceMockBluetoothGattDescriptor( |
+ measurement_interval.get(), |
+ "gatt.client_characteristic_configuration", |
+ BluetoothUUID(kClientConfigUUID), false, |
+ device::BluetoothRemoteGattCharacteristic::PROPERTY_READ | |
+ device::BluetoothRemoteGattCharacteristic::PROPERTY_WRITE)); |
+ |
+ // Add it here with full permission as the blocklist should prevent us from |
+ // accessing this descriptor |
+ std::unique_ptr<NiceMockBluetoothGattDescriptor> blocklisted_descriptor( |
+ new NiceMockBluetoothGattDescriptor( |
+ measurement_interval.get(), "bad2ddcf-60db-45cd-bef9-fd72b153cf7c", |
+ BluetoothUUID(kBlocklistedDescriptorUUID), false, |
+ device::BluetoothRemoteGattCharacteristic::PROPERTY_READ | |
+ device::BluetoothRemoteGattCharacteristic::PROPERTY_WRITE)); |
+ |
+ measurement_interval->AddMockDescriptor(std::move(user_description)); |
+ measurement_interval->AddMockDescriptor(std::move(client_config)); |
+ measurement_interval->AddMockDescriptor(std::move(blocklisted_descriptor)); |
+ |
health_thermometer->AddMockCharacteristic(std::move(measurement_interval)); |
device->AddMockService(std::move(health_thermometer)); |
@@ -1573,21 +1611,28 @@ LayoutTestBluetoothAdapterProvider::GetBaseGATTCharacteristic( |
service, identifier, BluetoothUUID(uuid), false /* is_local */, |
properties, NULL /* permissions */)); |
- // Read response. |
ON_CALL(*characteristic, ReadRemoteCharacteristic(_, _)) |
.WillByDefault( |
RunCallback<1>(BluetoothRemoteGattService::GATT_ERROR_NOT_SUPPORTED)); |
- // Write response. |
ON_CALL(*characteristic, WriteRemoteCharacteristic(_, _, _)) |
.WillByDefault( |
RunCallback<2>(BluetoothRemoteGattService::GATT_ERROR_NOT_SUPPORTED)); |
- // StartNotifySession response |
ON_CALL(*characteristic, StartNotifySession(_, _)) |
.WillByDefault( |
RunCallback<1>(BluetoothRemoteGattService::GATT_ERROR_NOT_SUPPORTED)); |
+ ON_CALL(*characteristic, GetDescriptors()) |
+ .WillByDefault( |
+ Invoke(characteristic.get(), |
+ &MockBluetoothGattCharacteristic::GetMockDescriptors)); |
+ |
+ ON_CALL(*characteristic, GetDescriptor(_)) |
+ .WillByDefault( |
+ Invoke(characteristic.get(), |
+ &MockBluetoothGattCharacteristic::GetMockDescriptor)); |
+ |
return characteristic; |
} |