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 d2a989910cbbebfc345b356008e1c06a0a3ef296..87956f598cd8f9d230fedd8bda5424f88dab50dc 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 |
@@ -62,6 +62,7 @@ namespace { |
// Bluetooth UUIDs suitable to pass to BluetoothUUID(): |
// Services: |
const char kBatteryServiceUUID[] = "180f"; |
+const char kBlacklistTestServiceUUID[] = "611c954a-263b-4f4a-aab6-01ddb953f985"; |
const char kDeviceInformationServiceUUID[] = "180a"; |
const char kGenericAccessServiceUUID[] = "1800"; |
const char kGlucoseServiceUUID[] = "1808"; |
@@ -69,10 +70,13 @@ const char kHeartRateServiceUUID[] = "180d"; |
const char kHumanInterfaceDeviceServiceUUID[] = "1812"; |
const char kTxPowerServiceUUID[] = "1804"; |
// Characteristics: |
+const char kBlacklistExcludeReadsCharacteristicUUID[] = |
+ "bad1c9a2-9a5b-4015-8b60-1579bbbf2135"; |
const char kBodySensorLocation[] = "2a38"; |
const char kDeviceNameUUID[] = "2a00"; |
const char kHeartRateMeasurementUUID[] = "2a37"; |
const char kSerialNumberStringUUID[] = "2a25"; |
+const char kPeripheralPrivacyFlagUUID[] = "2a02"; |
const int kDefaultTxPower = -10; // TxPower of a device broadcasting at 0.1mW. |
const int kDefaultRssi = -51; // RSSI at 1m from a device broadcasting at |
@@ -156,8 +160,8 @@ LayoutTestBluetoothAdapterProvider::GetBluetoothAdapter( |
return GetMissingCharacteristicHeartRateAdapter(); |
if (fake_adapter_name == "HeartRateAdapter") |
return GetHeartRateAdapter(); |
- if (fake_adapter_name == "HeartRateAndHIDAdapter") |
- return GetHeartRateAndHIDAdapter(); |
+ if (fake_adapter_name == "BlacklistTestAdapter") |
+ return GetBlacklistTestAdapter(); |
if (fake_adapter_name == "FailingConnectionsAdapter") |
return GetFailingConnectionsAdapter(); |
if (fake_adapter_name == "FailingGATTOperationsAdapter") |
@@ -493,18 +497,20 @@ LayoutTestBluetoothAdapterProvider::GetHeartRateAdapter() { |
// static |
scoped_refptr<NiceMockBluetoothAdapter> |
-LayoutTestBluetoothAdapterProvider::GetHeartRateAndHIDAdapter() { |
+LayoutTestBluetoothAdapterProvider::GetBlacklistTestAdapter() { |
scoped_refptr<NiceMockBluetoothAdapter> adapter(GetEmptyAdapter()); |
BluetoothDevice::UUIDList uuids; |
+ uuids.push_back(BluetoothUUID(kBlacklistTestServiceUUID)); |
uuids.push_back(BluetoothUUID(kDeviceInformationServiceUUID)); |
uuids.push_back(BluetoothUUID(kGenericAccessServiceUUID)); |
uuids.push_back(BluetoothUUID(kHeartRateServiceUUID)); |
uuids.push_back(BluetoothUUID(kHumanInterfaceDeviceServiceUUID)); |
scoped_ptr<NiceMockBluetoothDevice> device( |
- GetConnectableDevice(adapter.get(), "Heart Rate And HID Device", uuids)); |
+ GetConnectableDevice(adapter.get(), "Blacklist Test Device", uuids)); |
+ device->AddMockService(GetBlacklistTestService(device.get())); |
device->AddMockService(GetDeviceInformationService(device.get())); |
device->AddMockService(GetGenericAccessService(device.get())); |
device->AddMockService(GetHeartRateService(adapter.get(), device.get())); |
@@ -711,6 +717,42 @@ LayoutTestBluetoothAdapterProvider::GetBaseGATTService( |
// static |
scoped_ptr<NiceMockBluetoothGattService> |
+LayoutTestBluetoothAdapterProvider::GetBlacklistTestService( |
+ device::MockBluetoothDevice* device) { |
+ scoped_ptr<NiceMockBluetoothGattService> blacklist_test_service( |
+ GetBaseGATTService(device, kBlacklistTestServiceUUID)); |
+ |
+ scoped_ptr<NiceMockBluetoothGattCharacteristic> |
+ blacklist_exclude_reads_characteristic(GetBaseGATTCharacteristic( |
+ blacklist_test_service.get(), |
+ kBlacklistExcludeReadsCharacteristicUUID, |
+ BluetoothGattCharacteristic::PROPERTY_READ | |
+ BluetoothGattCharacteristic::PROPERTY_WRITE)); |
+ |
+ // Crash if ReadRemoteCharacteristic called. Not using GoogleMock's Expect |
+ // because this is used in layout tests that may not report a mock expectation |
+ // error correctly as a layout test failure. |
+ ON_CALL(*blacklist_exclude_reads_characteristic, |
+ ReadRemoteCharacteristic(_, _)) |
+ .WillByDefault( |
+ Invoke([](const BluetoothGattCharacteristic::ValueCallback&, |
+ const BluetoothGattCharacteristic::ErrorCallback&) { |
+ NOTREACHED(); |
+ })); |
+ |
+ // Write response. |
+ ON_CALL(*blacklist_exclude_reads_characteristic, |
+ WriteRemoteCharacteristic(_, _, _)) |
+ .WillByDefault(RunCallback<1 /* success callback */>()); |
+ |
+ blacklist_test_service->AddMockCharacteristic( |
+ std::move(blacklist_exclude_reads_characteristic)); |
+ |
+ return blacklist_test_service; |
+} |
+ |
+// static |
+scoped_ptr<NiceMockBluetoothGattService> |
LayoutTestBluetoothAdapterProvider::GetDeviceInformationService( |
device::MockBluetoothDevice* device) { |
scoped_ptr<NiceMockBluetoothGattService> device_information( |
@@ -743,25 +785,54 @@ LayoutTestBluetoothAdapterProvider::GetGenericAccessService( |
scoped_ptr<NiceMockBluetoothGattService> generic_access( |
GetBaseGATTService(device, kGenericAccessServiceUUID)); |
- scoped_ptr<NiceMockBluetoothGattCharacteristic> device_name( |
- GetBaseGATTCharacteristic( |
- generic_access.get(), kDeviceNameUUID, |
- BluetoothGattCharacteristic::PROPERTY_READ | |
- BluetoothGattCharacteristic::PROPERTY_WRITE)); |
+ { // Device Name: |
+ scoped_ptr<NiceMockBluetoothGattCharacteristic> device_name( |
+ GetBaseGATTCharacteristic( |
+ generic_access.get(), kDeviceNameUUID, |
+ BluetoothGattCharacteristic::PROPERTY_READ | |
+ BluetoothGattCharacteristic::PROPERTY_WRITE)); |
- // Read response. |
- std::string device_name_str = device->GetDeviceName(); |
- std::vector<uint8_t> device_name_value(device_name_str.begin(), |
- device_name_str.end()); |
+ // Read response. |
+ std::string device_name_str = device->GetDeviceName(); |
+ std::vector<uint8_t> device_name_value(device_name_str.begin(), |
+ device_name_str.end()); |
- ON_CALL(*device_name, ReadRemoteCharacteristic(_, _)) |
- .WillByDefault(RunCallback<0>(device_name_value)); |
+ ON_CALL(*device_name, ReadRemoteCharacteristic(_, _)) |
+ .WillByDefault(RunCallback<0>(device_name_value)); |
- // Write response. |
- ON_CALL(*device_name, WriteRemoteCharacteristic(_, _, _)) |
- .WillByDefault(RunCallback<1 /* success callback */>()); |
+ // Write response. |
+ ON_CALL(*device_name, WriteRemoteCharacteristic(_, _, _)) |
+ .WillByDefault(RunCallback<1 /* success callback */>()); |
- generic_access->AddMockCharacteristic(std::move(device_name)); |
+ generic_access->AddMockCharacteristic(std::move(device_name)); |
+ } |
+ |
+ { // Peripheral Privacy Flag: |
+ scoped_ptr<NiceMockBluetoothGattCharacteristic> peripheral_privacy_flag( |
+ GetBaseGATTCharacteristic( |
+ generic_access.get(), kPeripheralPrivacyFlagUUID, |
+ BluetoothGattCharacteristic::PROPERTY_READ | |
+ BluetoothGattCharacteristic::PROPERTY_WRITE)); |
+ |
+ // Read response. |
+ std::vector<uint8_t> value(1); |
+ value[0] = false; |
+ |
+ ON_CALL(*peripheral_privacy_flag, ReadRemoteCharacteristic(_, _)) |
+ .WillByDefault(RunCallback<0>(value)); |
+ |
+ // Crash if WriteRemoteCharacteristic called. Not using GoogleMock's Expect |
+ // because this is used in layout tests that may not report a mock |
+ // expectation error correctly as a layout test failure. |
+ ON_CALL(*peripheral_privacy_flag, WriteRemoteCharacteristic(_, _, _)) |
+ .WillByDefault( |
+ Invoke([](const std::vector<uint8_t>&, const base::Closure&, |
+ const BluetoothGattCharacteristic::ErrorCallback&) { |
+ NOTREACHED(); |
+ })); |
+ |
+ generic_access->AddMockCharacteristic(std::move(peripheral_privacy_flag)); |
+ } |
return generic_access; |
} |