Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2639)

Unified Diff: content/shell/browser/layout_test/layout_test_bluetooth_adapter_provider.cc

Issue 2443473003: bluetooth: Require frame to be connected for characteristic.readValue to succeed (Closed)
Patch Set: Fix typo Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 a82f5262532a03570b9bf76e70a395afbc1d7fa6..19701ad5f3bd192900511ce1dcfa539ae625b38f 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
@@ -67,6 +67,7 @@ const char kBlacklistTestServiceUUID[] = "611c954a-263b-4f4a-aab6-01ddb953f985";
const char kDeviceInformationServiceUUID[] = "180a";
const char kGenericAccessServiceUUID[] = "1800";
const char kGlucoseServiceUUID[] = "1808";
+const char kHealthThermometerUUID[] = "1809";
const char kHeartRateServiceUUID[] = "180d";
const char kHumanInterfaceDeviceServiceUUID[] = "1812";
const char kRequestDisconnectionServiceUUID[] =
@@ -79,6 +80,7 @@ const char kRequestDisconnectionCharacteristicUUID[] =
"01d7d88a-7451-419f-aeb8-d65e7b9277af";
const char kBodySensorLocation[] = "2a38";
const char kDeviceNameUUID[] = "2a00";
+const char kMeasurementIntervalUUID[] = "2a21";
const char kHeartRateMeasurementUUID[] = "2a37";
const char kSerialNumberStringUUID[] = "2a25";
const char kPeripheralPrivacyFlagUUID[] = "2a02";
@@ -183,6 +185,8 @@ LayoutTestBluetoothAdapterProvider::GetBluetoothAdapter(
return GetTwoHeartRateServicesAdapter();
if (fake_adapter_name == "DisconnectingHeartRateAdapter")
return GetDisconnectingHeartRateAdapter();
+ if (fake_adapter_name == "DisconnectingHealthThermometerAdapter")
+ return GetDisconnectingHealthThermometer();
if (fake_adapter_name == "DisconnectingDuringServiceRetrievalAdapter")
return GetServicesDiscoveredAfterReconnectionAdapter(true /* disconnect */);
if (fake_adapter_name == "ServicesDiscoveredAfterReconnectionAdapter")
@@ -618,6 +622,53 @@ LayoutTestBluetoothAdapterProvider::GetHeartRateAdapter() {
// static
scoped_refptr<NiceMockBluetoothAdapter>
+LayoutTestBluetoothAdapterProvider::GetDisconnectingHealthThermometer() {
+ scoped_refptr<NiceMockBluetoothAdapter> adapter(GetEmptyAdapter());
+ NiceMockBluetoothAdapter* adapter_ptr = adapter.get();
+
+ std::unique_ptr<NiceMockBluetoothDevice> device(GetConnectableDevice(
+ adapter_ptr, "Disconnecting Health Thermometer",
+ std::vector<BluetoothUUID>({BluetoothUUID(kGenericAccessServiceUUID),
+ BluetoothUUID(kHealthThermometerUUID)})));
+
+ device->AddMockService(GetGenericAccessService(device.get()));
+ device->AddMockService(GetDisconnectingService(adapter.get(), device.get()));
+
+ std::unique_ptr<NiceMockBluetoothGattService> health_thermometer(
+ GetBaseGATTService("Health Thermometer", device.get(),
+ kHealthThermometerUUID));
+
+ // Measurement Interval
+ std::unique_ptr<NiceMockBluetoothGattCharacteristic> measurement_interval(
+ GetBaseGATTCharacteristic(
+ "Measurement Interval", health_thermometer.get(),
+ kMeasurementIntervalUUID,
+ BluetoothRemoteGattCharacteristic::PROPERTY_READ));
+ NiceMockBluetoothGattCharacteristic* measurement_ptr =
+ measurement_interval.get();
+
+ ON_CALL(*measurement_interval, ReadRemoteCharacteristic(_, _))
+ .WillByDefault(RunCallbackWithResult<0 /* success_callback */>(
+ [adapter_ptr, measurement_ptr]() {
+ std::vector<uint8_t> interval({1});
+ for (auto& observer : adapter_ptr->GetObservers()) {
+ observer.GattCharacteristicValueChanged(
+ adapter_ptr, measurement_ptr, interval);
+ }
+ return interval;
+ }));
+ // TODO(crbug.com/608538): Mock Write and StartNotifySession.
+
+ health_thermometer->AddMockCharacteristic(std::move(measurement_interval));
+ device->AddMockService(std::move(health_thermometer));
+
+ adapter->AddMockDevice(std::move(device));
+
+ return adapter;
+}
+
+// static
+scoped_refptr<NiceMockBluetoothAdapter>
LayoutTestBluetoothAdapterProvider::GetEmptyNameHeartRateAdapter() {
scoped_refptr<NiceMockBluetoothAdapter> adapter(GetEmptyAdapter());
std::unique_ptr<NiceMockBluetoothDevice> device(
@@ -710,40 +761,16 @@ LayoutTestBluetoothAdapterProvider::GetTwoHeartRateServicesAdapter() {
scoped_refptr<NiceMockBluetoothAdapter>
LayoutTestBluetoothAdapterProvider::GetDisconnectingHeartRateAdapter() {
scoped_refptr<NiceMockBluetoothAdapter> adapter(GetEmptyAdapter());
- NiceMockBluetoothAdapter* adapter_ptr = adapter.get();
std::unique_ptr<NiceMockBluetoothDevice> device(
GetHeartRateDevice(adapter.get()));
- NiceMockBluetoothDevice* device_ptr = device.get();
// TODO(ortuno): Implement the rest of the service's characteristics
// See: http://crbug.com/529975
device->AddMockService(GetGenericAccessService(device.get()));
device->AddMockService(GetHeartRateService(adapter.get(), device.get()));
+ device->AddMockService(GetDisconnectingService(adapter.get(), device.get()));
- // Set up a service and a characteristic to disconnect the device when it's
- // written to.
- std::unique_ptr<NiceMockBluetoothGattService> disconnection_service =
- GetBaseGATTService("Disconnection", device_ptr,
- kRequestDisconnectionServiceUUID);
- std::unique_ptr<NiceMockBluetoothGattCharacteristic>
- disconnection_characteristic(GetBaseGATTCharacteristic(
- "Disconnection Characteristic", disconnection_service.get(),
- kRequestDisconnectionCharacteristicUUID,
- BluetoothRemoteGattCharacteristic::PROPERTY_WRITE_WITHOUT_RESPONSE));
- ON_CALL(*disconnection_characteristic, WriteRemoteCharacteristic(_, _, _))
- .WillByDefault(Invoke([adapter_ptr, device_ptr](
- const std::vector<uint8_t>& value, const base::Closure& success,
- const BluetoothRemoteGattCharacteristic::ErrorCallback& error) {
- device_ptr->SetConnected(false);
- for (auto& observer : adapter_ptr->GetObservers())
- observer.DeviceChanged(adapter_ptr, device_ptr);
- success.Run();
- }));
-
- disconnection_service->AddMockCharacteristic(
- std::move(disconnection_characteristic));
- device->AddMockService(std::move(disconnection_service));
adapter->AddMockDevice(std::move(device));
return adapter;
@@ -869,6 +896,8 @@ LayoutTestBluetoothAdapterProvider::GetFailingGATTOperationsAdapter() {
std::unique_ptr<NiceMockBluetoothDevice> device(
GetConnectableDevice(adapter.get(), "Errors Device", uuids));
+ device->AddMockService(GetDisconnectingService(adapter.get(), device.get()));
+
std::unique_ptr<NiceMockBluetoothGattService> service(
GetBaseGATTService("Errors Service", device.get(), errorsServiceUUID));
@@ -1244,6 +1273,36 @@ LayoutTestBluetoothAdapterProvider::GetHeartRateService(
return heart_rate;
}
+// static
+std::unique_ptr<NiceMockBluetoothGattService>
+LayoutTestBluetoothAdapterProvider::GetDisconnectingService(
+ MockBluetoothAdapter* adapter,
+ MockBluetoothDevice* device) {
+ // Set up a service and a characteristic to disconnect the device when it's
+ // written to.
+ std::unique_ptr<NiceMockBluetoothGattService> disconnection_service =
+ GetBaseGATTService("Disconnection", device,
+ kRequestDisconnectionServiceUUID);
+ std::unique_ptr<NiceMockBluetoothGattCharacteristic>
+ disconnection_characteristic(GetBaseGATTCharacteristic(
+ "Disconnection Characteristic", disconnection_service.get(),
+ kRequestDisconnectionCharacteristicUUID,
+ BluetoothRemoteGattCharacteristic::PROPERTY_WRITE_WITHOUT_RESPONSE));
+ ON_CALL(*disconnection_characteristic, WriteRemoteCharacteristic(_, _, _))
+ .WillByDefault(Invoke([adapter, device](
+ const std::vector<uint8_t>& value, const base::Closure& success,
+ const BluetoothRemoteGattCharacteristic::ErrorCallback& error) {
+ device->SetConnected(false);
+ for (auto& observer : adapter->GetObservers())
+ observer.DeviceChanged(adapter, device);
+ success.Run();
+ }));
+
+ disconnection_service->AddMockCharacteristic(
+ std::move(disconnection_characteristic));
+ return disconnection_service;
+}
+
// Characteristics
// static

Powered by Google App Engine
This is Rietveld 408576698