| 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 3edc48ced57f9e33f668f4b89dc59f90b45b5ca9..16f613fb9e262d26a27454eee54617e2a1454044 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
|
| @@ -123,6 +123,14 @@ std::set<BluetoothUUID> GetUUIDs(
|
| return result;
|
| }
|
|
|
| +// Notifies the adapter's observers for each device id the adapter.
|
| +void NotifyDevicesAdded(MockBluetoothAdapter* adapter) {
|
| + for (BluetoothDevice* device : adapter->GetMockDevices()) {
|
| + FOR_EACH_OBSERVER(BluetoothAdapter::Observer, adapter->GetObservers(),
|
| + DeviceAdded(adapter, device));
|
| + }
|
| +}
|
| +
|
| // Notifies the adapter's observers that the services have been discovered.
|
| void NotifyServicesDiscovered(MockBluetoothAdapter* adapter,
|
| MockBluetoothDevice* device) {
|
| @@ -188,6 +196,8 @@ LayoutTestBluetoothAdapterProvider::GetBluetoothAdapter(
|
| return GetFailingGATTOperationsAdapter();
|
| if (fake_adapter_name == "SecondDiscoveryFindsHeartRateAdapter")
|
| return GetSecondDiscoveryFindsHeartRateAdapter();
|
| + if (fake_adapter_name == "DeviceEventAdapter")
|
| + return GetDeviceEventAdapter();
|
| if (fake_adapter_name == "DelayedServicesDiscoveryAdapter")
|
| return GetDelayedServicesDiscoveryAdapter();
|
| if (fake_adapter_name.empty())
|
| @@ -263,6 +273,7 @@ LayoutTestBluetoothAdapterProvider::GetNotPoweredAdapter() {
|
| scoped_refptr<NiceMockBluetoothAdapter>
|
| LayoutTestBluetoothAdapterProvider::GetScanFilterCheckingAdapter() {
|
| scoped_refptr<NiceMockBluetoothAdapter> adapter(GetPoweredAdapter());
|
| + MockBluetoothAdapter* adapter_ptr = adapter.get();
|
|
|
| // This fails the test with an error message listing actual and expected UUIDs
|
| // if StartDiscoverySessionWithFilter() is called with the wrong argument.
|
| @@ -273,8 +284,14 @@ LayoutTestBluetoothAdapterProvider::GetScanFilterCheckingAdapter() {
|
| BluetoothUUID(kHeartRateServiceUUID),
|
| BluetoothUUID(kBatteryServiceUUID))),
|
| _, _))
|
| - .WillRepeatedly(RunCallbackWithResult<1 /* success_callback */>(
|
| - []() { return GetDiscoverySession(); }));
|
| + .WillRepeatedly(
|
| + RunCallbackWithResult<1 /* success_callback */>([adapter_ptr]() {
|
| + base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| + FROM_HERE, base::Bind(&NotifyDevicesAdded,
|
| + base::RetainedRef(adapter_ptr)));
|
| +
|
| + return GetDiscoverySession();
|
| + }));
|
|
|
| // Any unexpected call results in the failure callback.
|
| ON_CALL(*adapter, StartDiscoverySessionWithFilterRaw(_, _, _))
|
| @@ -302,9 +319,17 @@ scoped_refptr<NiceMockBluetoothAdapter>
|
| LayoutTestBluetoothAdapterProvider::GetEmptyAdapter() {
|
| scoped_refptr<NiceMockBluetoothAdapter> adapter(GetPoweredAdapter());
|
|
|
| + MockBluetoothAdapter* adapter_ptr = adapter.get();
|
| +
|
| ON_CALL(*adapter, StartDiscoverySessionWithFilterRaw(_, _, _))
|
| - .WillByDefault(RunCallbackWithResult<1 /* success_callback */>(
|
| - []() { return GetDiscoverySession(); }));
|
| + .WillByDefault(
|
| + RunCallbackWithResult<1 /* success_callback */>([adapter_ptr]() {
|
| + base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| + FROM_HERE, base::Bind(&NotifyDevicesAdded,
|
| + base::RetainedRef(adapter_ptr)));
|
| +
|
| + return GetDiscoverySession();
|
| + }));
|
|
|
| return adapter;
|
| }
|
| @@ -356,7 +381,6 @@ LayoutTestBluetoothAdapterProvider::GetSecondDiscoveryFindsHeartRateAdapter() {
|
| base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| FROM_HERE,
|
| base::Bind(&AddDevice, make_scoped_refptr(adapter_ptr),
|
| -
|
| base::Passed(GetHeartRateDevice(adapter_ptr))));
|
| return GetDiscoverySession();
|
| }));
|
| @@ -366,6 +390,81 @@ LayoutTestBluetoothAdapterProvider::GetSecondDiscoveryFindsHeartRateAdapter() {
|
|
|
| // static
|
| scoped_refptr<NiceMockBluetoothAdapter>
|
| +LayoutTestBluetoothAdapterProvider::GetDeviceEventAdapter() {
|
| + scoped_refptr<NiceMockBluetoothAdapter> adapter(GetPoweredAdapter());
|
| + NiceMockBluetoothAdapter* adapter_ptr = adapter.get();
|
| +
|
| + // Add ConnectedHeartRateDevice.
|
| + std::unique_ptr<NiceMockBluetoothDevice> connected_hr(GetBaseDevice(
|
| + adapter.get(), "Connected Heart Rate Device",
|
| + {BluetoothUUID(kHeartRateServiceUUID)}, makeMACAddress(0x0)));
|
| + connected_hr->SetConnected(true);
|
| + adapter->AddMockDevice(std::move(connected_hr));
|
| +
|
| + // Add ChangingBatteryDevice with no uuids.
|
| + std::unique_ptr<NiceMockBluetoothDevice> changing_battery(
|
| + GetBaseDevice(adapter.get(), "Changing Battery Device",
|
| + BluetoothDevice::UUIDList(), makeMACAddress(0x1)));
|
| + changing_battery->SetConnected(false);
|
| +
|
| + NiceMockBluetoothDevice* changing_battery_ptr = changing_battery.get();
|
| + adapter->AddMockDevice(std::move(changing_battery));
|
| +
|
| + // Add Non Connected Tx Power Device.
|
| + std::unique_ptr<NiceMockBluetoothDevice> non_connected_tx_power(
|
| + GetBaseDevice(adapter.get(), "Non Connected Tx Power Device",
|
| + {BluetoothUUID(kTxPowerServiceUUID)}, makeMACAddress(0x2)));
|
| + non_connected_tx_power->SetConnected(false);
|
| + adapter->AddMockDevice(std::move(non_connected_tx_power));
|
| +
|
| + // Add Discovery Generic Access Device with no uuids.
|
| + std::unique_ptr<NiceMockBluetoothDevice> discovery_generic_access(
|
| + GetBaseDevice(adapter.get(), "Discovery Generic Access Device",
|
| + BluetoothDevice::UUIDList(), makeMACAddress(0x3)));
|
| + discovery_generic_access->SetConnected(true);
|
| +
|
| + NiceMockBluetoothDevice* discovery_generic_access_ptr =
|
| + discovery_generic_access.get();
|
| + adapter->AddMockDevice(std::move(discovery_generic_access));
|
| +
|
| + ON_CALL(*adapter, StartDiscoverySessionWithFilterRaw(_, _, _))
|
| + .WillByDefault(RunCallbackWithResult<1 /* success_callback */>(
|
| + [adapter_ptr, changing_battery_ptr, discovery_generic_access_ptr]() {
|
| + if (adapter_ptr->GetDevices().size() == 4) {
|
| + // Post task to add NewGlucoseDevice.
|
| + std::unique_ptr<NiceMockBluetoothDevice> glucose_device(
|
| + GetBaseDevice(adapter_ptr, "New Glucose Device",
|
| + {BluetoothUUID(kGlucoseServiceUUID)},
|
| + makeMACAddress(0x4)));
|
| +
|
| + base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&AddDevice, make_scoped_refptr(adapter_ptr),
|
| + base::Passed(&glucose_device)));
|
| +
|
| + // Add uuid and notify of device changed.
|
| + changing_battery_ptr->AddUUID(BluetoothUUID(kBatteryServiceUUID));
|
| + base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| + FROM_HERE, base::Bind(&NotifyDeviceChanged,
|
| + base::RetainedRef(adapter_ptr),
|
| + changing_battery_ptr));
|
| +
|
| + // Add uuid and notify of services discovered.
|
| + discovery_generic_access_ptr->AddUUID(
|
| + BluetoothUUID(kGenericAccessServiceUUID));
|
| + base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| + FROM_HERE, base::Bind(&NotifyServicesDiscovered,
|
| + base::RetainedRef(adapter_ptr),
|
| + discovery_generic_access_ptr));
|
| + }
|
| + return GetDiscoverySession();
|
| + }));
|
| +
|
| + return adapter;
|
| +}
|
| +
|
| +// static
|
| +scoped_refptr<NiceMockBluetoothAdapter>
|
| LayoutTestBluetoothAdapterProvider::GetMissingServiceHeartRateAdapter() {
|
| scoped_refptr<NiceMockBluetoothAdapter> adapter(GetEmptyAdapter());
|
|
|
| @@ -753,9 +852,11 @@ LayoutTestBluetoothAdapterProvider::GetBaseDevice(
|
| const std::string& address) {
|
| std::unique_ptr<NiceMockBluetoothDevice> device(new NiceMockBluetoothDevice(
|
| adapter, 0x1F00 /* Bluetooth class */, device_name, address,
|
| - true /* paired */, true /* connected */));
|
| + false /* paired */, false /* connected */));
|
|
|
| - ON_CALL(*device, GetUUIDs()).WillByDefault(Return(uuids));
|
| + for (const auto& uuid : uuids) {
|
| + device->AddUUID(uuid);
|
| + }
|
|
|
| // Using Invoke allows the device returned from this method to be futher
|
| // modified and have more services added to it. The call to ::GetGattServices
|
|
|