| 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 fd7957d662ec4a6334bf242b03e248a0455aa953..79c7e83e195d1e5cad25d0ca57d06dfea8b17454 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
|
| @@ -69,10 +69,14 @@ const char kGenericAccessServiceUUID[] = "1800";
|
| const char kGlucoseServiceUUID[] = "1808";
|
| const char kHeartRateServiceUUID[] = "180d";
|
| const char kHumanInterfaceDeviceServiceUUID[] = "1812";
|
| +const char kRequestDisconnectionServiceUUID[] =
|
| + "01d7d889-7451-419f-aeb8-d65e7b9277af";
|
| const char kTxPowerServiceUUID[] = "1804";
|
| // Characteristics:
|
| const char kBlacklistExcludeReadsCharacteristicUUID[] =
|
| "bad1c9a2-9a5b-4015-8b60-1579bbbf2135";
|
| +const char kRequestDisconnectionCharacteristicUUID[] =
|
| + "01d7d88a-7451-419f-aeb8-d65e7b9277af";
|
| const char kBodySensorLocation[] = "2a38";
|
| const char kDeviceNameUUID[] = "2a00";
|
| const char kHeartRateMeasurementUUID[] = "2a37";
|
| @@ -156,6 +160,8 @@ LayoutTestBluetoothAdapterProvider::GetBluetoothAdapter(
|
| return GetMissingCharacteristicHeartRateAdapter();
|
| if (fake_adapter_name == "HeartRateAdapter")
|
| return GetHeartRateAdapter();
|
| + if (fake_adapter_name == "DisconnectingHeartRateAdapter")
|
| + return GetDisconnectingHeartRateAdapter();
|
| if (fake_adapter_name == "BlacklistTestAdapter")
|
| return GetBlacklistTestAdapter();
|
| if (fake_adapter_name == "FailingConnectionsAdapter")
|
| @@ -422,6 +428,50 @@ LayoutTestBluetoothAdapterProvider::GetHeartRateAdapter() {
|
|
|
| device->AddMockService(GetGenericAccessService(device.get()));
|
| device->AddMockService(GetHeartRateService(adapter.get(), device.get()));
|
| +
|
| + adapter->AddMockDevice(std::move(device));
|
| +
|
| + return adapter;
|
| +}
|
| +
|
| +// static
|
| +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()));
|
| +
|
| + // Set up a service and a characteristic to disconnect the device when it's
|
| + // written to.
|
| + std::unique_ptr<NiceMockBluetoothGattService> disconnection_service =
|
| + GetBaseGATTService(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_EACH_OBSERVER(BluetoothAdapter::Observer,
|
| + adapter_ptr->GetObservers(),
|
| + 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;
|
|
|