| // Copyright 2015 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CONTENT_WEB_TEST_BROWSER_WEB_TEST_BLUETOOTH_ADAPTER_PROVIDER_H_ |
| #define CONTENT_WEB_TEST_BROWSER_WEB_TEST_BLUETOOTH_ADAPTER_PROVIDER_H_ |
| |
| #include <stdint.h> |
| |
| #include <memory> |
| #include <string> |
| |
| #include "base/functional/callback.h" |
| #include "device/bluetooth/test/mock_bluetooth_adapter.h" |
| #include "device/bluetooth/test/mock_bluetooth_device.h" |
| #include "device/bluetooth/test/mock_bluetooth_gatt_characteristic.h" |
| #include "device/bluetooth/test/mock_bluetooth_gatt_notify_session.h" |
| #include "device/bluetooth/test/mock_bluetooth_gatt_service.h" |
| |
| namespace content { |
| |
| // Implements fake adapters with named mock data set for use in tests as a |
| // result of web tests calling testRunner.setBluetoothFakeAdapter. |
| |
| // An adapter named 'FooAdapter' in |
| // https://webbluetoothcg.github.io/web-bluetooth/tests/ is provided by a |
| // corresponding 'GetFooAdapter' function, and re-documented here to capture |
| // differences between our implementations. |
| |
| class WebTestBluetoothAdapterProvider { |
| public: |
| // Returns a BluetoothAdapter. Its behavior depends on |fake_adapter_name|. |
| static scoped_refptr<device::BluetoothAdapter> GetBluetoothAdapter( |
| const std::string& fake_adapter_name); |
| |
| private: |
| // Adapters |
| |
| // |BaseAdapter| |
| // Devices added: |
| // None. |
| // Mock Functions: |
| // - GetDevices: |
| // Returns a list of devices added to the adapter. |
| // - GetDevice: |
| // Returns a device matching the address provided if the device was |
| // added to the adapter. |
| static scoped_refptr<testing::NiceMock<device::MockBluetoothAdapter>> |
| GetBaseAdapter(); |
| |
| // |PresentAdapter| |
| // Inherits from |BaseAdapter| |
| // Devices added: |
| // None. |
| // Mock Functions: |
| // - IsPresent: Returns true |
| static scoped_refptr<testing::NiceMock<device::MockBluetoothAdapter>> |
| GetPresentAdapter(); |
| |
| // |PoweredAdapter| |
| // Inherits from |PresentAdapter| |
| // Devices added: |
| // None. |
| // Mock Functions: |
| // - IsPowered: Returns true |
| static scoped_refptr<testing::NiceMock<device::MockBluetoothAdapter>> |
| GetPoweredAdapter(); |
| |
| // |ScanFilterCheckingAdapter| |
| // Inherits from |PoweredAdapter| |
| // BluetoothAdapter that asserts that its StartDiscoverySessionWithFilter() |
| // method is called with a filter consisting of the standard battery, heart |
| // rate, and glucose services. |
| // Devices added: |
| // - |BatteryDevice| |
| // Mock Functions: |
| // - StartDiscoverySessionWithFilter: |
| // - With correct arguments: Run success callback. |
| // - With incorrect arguments: Mock complains that function with |
| // correct arguments was never called and error callback is called. |
| static scoped_refptr<testing::NiceMock<device::MockBluetoothAdapter>> |
| GetScanFilterCheckingAdapter(); |
| |
| // |FailStartDiscoveryAdapter| |
| // Inherits from |PoweredAdapter| |
| // Devices added: |
| // None. |
| // Mock Functions: |
| // - StartDiscoverySessionWithFilter: |
| // Run error callback. |
| static scoped_refptr<testing::NiceMock<device::MockBluetoothAdapter>> |
| GetFailStartDiscoveryAdapter(); |
| |
| // |EmptyAdapter| |
| // Inherits from |PoweredAdapter| |
| // Devices Added: |
| // None. |
| // Mock Functions: |
| // - StartDiscoverySessionWithFilter: |
| // Run success callback with |DiscoverySession|. |
| static scoped_refptr<testing::NiceMock<device::MockBluetoothAdapter>> |
| GetEmptyAdapter(); |
| |
| // |GlucoseHeartRateAdapter| |
| // Inherits from |EmptyAdapter| |
| // Devices added: |
| // - |GlucoseDevice| |
| // - |HeartRateDevice| |
| static scoped_refptr<testing::NiceMock<device::MockBluetoothAdapter>> |
| GetGlucoseHeartRateAdapter(); |
| |
| // |SecondDiscoveryFindsHeartRateAdapter| |
| // Inherits from |PoweredAdapter| |
| // Mock Functions: |
| // - StartDiscoverySessionWithFilter: |
| // Run success callback with |DiscoverySession|. |
| // After the first call, adds a |HeartRateDevice|. |
| static scoped_refptr<testing::NiceMock<device::MockBluetoothAdapter>> |
| GetSecondDiscoveryFindsHeartRateAdapter(); |
| |
| // |DeviceEventAdapter| |
| // Inherits from |PoweredAdapter| |
| // Internal Structure: |
| // - Connected Heart Rate Device |
| // - IsGattConnected: Returns true. |
| // - UUIDs: |
| // - Heart Rate UUID (0x180d) |
| // - Changing Battery Device |
| // - IsGattConnected: Returns false. |
| // - No UUIDs (A Battery UUID (0x180f) is added by |
| // StartDiscoverySessionWithFilter). |
| // - Non Connected Tx Power Device |
| // - IsGattConnected: Returns false. |
| // - UUIDs: |
| // - Tx Power (0x1804) |
| // - Discovery Generic Access Device |
| // - IsGattConnected: Returns true. |
| // - No UUIDs (A Generic Access UUID (0x1800) is added by |
| // StartDiscoverySessionWithFilter). |
| // Mock Functions: |
| // - StartDiscoverySessionWithFilter: Performs the following steps the first |
| // time is called: |
| // 1. Post a task to add New Glucose Device (Contains a single |
| // Glucose UUID (0x1808) and no services). |
| // 2. Adds a Battery UUID to Changing Battery Device and posts a task |
| // that notifies observers that the device changed. |
| // 3. Adds a Generic Access UUID to Discovery Generic Access Device and |
| // posts a task to Notify its services have been discovered. |
| // 4. Return a discovery session. |
| // Successive calls just return a discovery session. |
| static scoped_refptr<testing::NiceMock<device::MockBluetoothAdapter>> |
| GetDeviceEventAdapter(); |
| |
| // |DevicesRemovedAdapter| |
| // Inherits from |PoweredAdapter| |
| // Internal Structure: |
| // - Connected Heart Rate Device |
| // - IsGattConnected: Returns true. |
| // - UUIDs: |
| // - Heart Rate UUID (0x180d) |
| // Mock Functions: |
| // - StartDiscoverySessionWithFilter: Performs the following steps the first |
| // time is called: |
| // 1. Post a task to add New Glucose Device (Contains a single |
| // Glucose UUID (0x1808) and no services). |
| // 2. Post a task to remove Connected Heart Rate Device. |
| // 3. Post a task to remove New Glucose Device. |
| // Successive calls just return a discovery session. |
| static scoped_refptr<testing::NiceMock<device::MockBluetoothAdapter>> |
| GetDevicesRemovedAdapter(); |
| |
| // |MissingServiceHeartRateAdapter| |
| // Inherits from |EmptyAdapter| |
| // Internal Structure: |
| // - Heart Rate Device |
| // - UUIDs: |
| // - Generic Access UUID (0x1800) |
| // - Heart Rate UUID (0x180d) |
| static scoped_refptr<testing::NiceMock<device::MockBluetoothAdapter>> |
| GetMissingServiceHeartRateAdapter(); |
| |
| // |MissingCharacteristicHeartRateAdapter| |
| // Inherits from |EmptyAdapter| |
| // The services in this adapter do not contain any characteristics. |
| // Internal Structure: |
| // - Heart Rate Device |
| // - UUIDs: |
| // - Generic Access UUID (0x1800) |
| // - Heart Rate UUID (0x180d) |
| // - Services: |
| // - Generic Access Service |
| // - Heart Rate Service |
| static scoped_refptr<testing::NiceMock<device::MockBluetoothAdapter>> |
| GetMissingCharacteristicHeartRateAdapter(); |
| |
| // |HeartRateAdapter| |
| // Inherits from |EmptyAdapter| |
| // Internal Structure: |
| // - Heart Rate Device |
| // - UUIDs: |
| // - Generic Access UUID (0x1800) |
| // - Heart Rate UUID (0x180d) |
| // - Services: |
| // - Generic Access Service - Characteristics as described in |
| // GetGenericAccessService. |
| // - Heart Rate Service - Characteristics as described in |
| // GetHeartRateService. |
| static scoped_refptr<testing::NiceMock<device::MockBluetoothAdapter>> |
| GetHeartRateAdapter(); |
| |
| // |GetNoNameDeviceAdapter| |
| // Inherits from |EmptyAdapter| |
| // Contains a single device with no name and no UUIDs. |
| static scoped_refptr<testing::NiceMock<device::MockBluetoothAdapter>> |
| GetNoNameDeviceAdapter(); |
| |
| // |GetEmptyNameHeartRateAdapter| |
| // Inherits from |EmptyAdapter| |
| // Internal Structure: |
| // - Heart Rate Device |
| // - UUIDs: |
| // - Generic Access UUID (0x1800) |
| // - Heart Rate UUID (0x180d) |
| // - Services: |
| // - Generic Access Service - Characteristics as described in |
| // GetGenericAccessService. |
| // - gap.device_name returns an empty string. |
| // - Heart Rate Service - Characteristics as described in |
| // GetHeartRateService. |
| static scoped_refptr<testing::NiceMock<device::MockBluetoothAdapter>> |
| GetEmptyNameHeartRateAdapter(); |
| |
| // |GetNoNameHeartRateAdapter| |
| // Inherits from |EmptyAdapter| |
| // Internal Structure: |
| // - Heart Rate Device |
| // - GetName returns base::null_opt. |
| // - UUIDs: |
| // - Generic Access UUID (0x1800) |
| // - Heart Rate UUID (0x180d) |
| // - Services: |
| // - Generic Access Service - Characteristics as described in |
| // GetGenericAccessService. |
| // - gap.device_name returns an empty string. |
| // - Heart Rate Service - Characteristics as described in |
| // GetHeartRateService. |
| static scoped_refptr<testing::NiceMock<device::MockBluetoothAdapter>> |
| GetNoNameHeartRateAdapter(); |
| |
| // |TwoHeartRateServicesAdapter| |
| // Inherits from |EmptyAdapter| |
| // Internal Structure: |
| // - Heart Rate Device |
| // - UUIDs: |
| // - Generic Access UUID (0x1800) |
| // - Heart Rate UUID (0x180d) |
| // - Heart Rate UUID (0x180d) |
| // - Services: |
| // - Generic Access Service - Characteristics as described in |
| // GetGenericAccessService. |
| // - Heart Rate Service - Heart Rate Measurement (0x2a37) & Body |
| // Sensor Location (0x2a38). |
| // - Heart Rate Service - Body Sensor Location (0x2a38). |
| static scoped_refptr<testing::NiceMock<device::MockBluetoothAdapter>> |
| GetTwoHeartRateServicesAdapter(); |
| |
| // |DisconnectingHeartRateAdapter| |
| // Inherits from |HeartRateAdapter| |
| // Internal Structure: |
| // - Heart Rate Device |
| // - UUIDs: |
| // - Generic Access UUID (0x1800) |
| // - Heart Rate UUID (0x180d) |
| // - Services: |
| // - Generic Access Service - Characteristics as described in |
| // GetGenericAccessService. |
| // - Heart Rate Service - Characteristics as described in |
| // GetHeartRateService. |
| // - Request Disconnection Service: - Characteristics as described in |
| // GetDisconnectingService |
| static scoped_refptr<testing::NiceMock<device::MockBluetoothAdapter>> |
| GetDisconnectingHeartRateAdapter(); |
| |
| // |DisconnectingHealthThermometerAdapter| |
| // Inherits from |EmptyAdapter| |
| // Internal Structure: |
| // - Disconnecting Health Thermometer Device |
| // - UUIDs: |
| // - Generic Access UUID (0x1800) |
| // - Health Thermometer UUID (0x1809) |
| // - Services: |
| // - Generic Access Service - Characteristics as described in |
| // GetGenericAccessService. |
| // - Request Disconnection Service: - Characteristics as described in |
| // GetDisconnectingService |
| // - Health Thermometer: |
| // - Measurement Interval (0x2a21): |
| // - Read: Calls GattCharacteristicValueChanged and success |
| // callback with [1]. |
| // - Write: Calls success callback. |
| // - StartNotifySession: Run success callback. |
| // - GetProperties: Returns |
| // BluetoothRemoteGattCharacteristic::PROPERTY_READ |
| // - Descriptors (if |addDescriptors| input is true) |
| // - User Description (2901) |
| // - Mock Functions: |
| // - Read: Calls success callback with |
| // "gatt.characteristic_user_description". |
| // - Write: Calls success callback. |
| // - Client Characteristic Configuration (2902) |
| // Note: This descriptor is blocklisted for writes. |
| // - bad2ddcf-60db-45cd-bef9-fd72b153cf7c |
| // A test descriptor that is blocklisted. |
| // - bad3ec61-3cc3-4954-9702-7977df514114 |
| // A test descriptor that is exclude read. |
| |
| static scoped_refptr<testing::NiceMock<device::MockBluetoothAdapter>> |
| GetDisconnectingHealthThermometer(bool add_descriptors); |
| |
| // |ServicesDiscoveredAfterReconnectionAdapter|(disconnect) |
| // Inherits from |HeartRateAdapter| |
| // Internal Structure: |
| // - Heart Rate Device |
| // - UUIDs: |
| // - Generic Access UUID (0x1800) |
| // - Heart Rate UUID (0x180d) |
| // - Services: |
| // - Generic Access Service - Characteristics as described in |
| // GetGenericAccessService. |
| // - Heart Rate Service - Characteristics as described in |
| // GetHeartRateService. |
| // - CreateGattConnection: When called before IsGattDiscoveryComplete, |
| // runs success callback with a new Gatt connection. When called |
| // after IsGattDiscoveryComplete runs success callback with a new |
| // Gatt connection and notifies of services discovered. |
| // - IsGattDiscoveryComplete: The first time this function is called, |
| // it adds two services (Generic Access and Heart Rate) and |
| // if |disconnect| is true disconnects the device and returns false. |
| // After that it just returns true. |
| static scoped_refptr<testing::NiceMock<device::MockBluetoothAdapter>> |
| GetServicesDiscoveredAfterReconnectionAdapter(bool disconnect); |
| |
| // |GATTOperationFinishesAfterReconnectionAdapter|(disconnect, succeeds) |
| // Inherits from |EmptyAdapter| |
| // Internal Structure: |
| // - Health Thermometer Device |
| // - UUIDs: |
| // - Generic Access UUID (0x1800) |
| // - Health Thermometer UUID (0x1809) |
| // - Services: |
| // - Generic Access Service - Characteristics as described in |
| // GetGenericAccessService. |
| // - Health Thermometer |
| // - Measurement Interval: |
| // - Read: If |succeeds| is true, saves a succeeding callback, |
| // otherwise it saves a failing callback. This callback |
| // is run during CreateGattConnection. If |disconnect| is true |
| // disconnects the device. |
| // - Write: If |succeeds| is true, saves a succeeding callback, |
| // otherwise it saves a failing callback. This callback is run |
| // during CreateGattConnection. If |disconnect| is true |
| // disconnects the device. |
| // - StartNotifySession: If |succeeds| is true, saves a |
| // succeeding callback, otherwise it saves a failing callback. |
| // This calback is run during CreateGattConnection. If |
| // |disconnect| is true disconnects the device. |
| // - user_descriptor |
| // - Operations read / write nearly identical to the read and |
| // write methods of the characteristic. |
| // - Read: If |succeeds| is true, saves a succeeding callback, |
| // otherwise it saves a failing callback. |
| // - Write: If |succeeds| is true, saves a succeeding callback |
| // otherwise it saves a failing callback. |
| // - CreateGattConnection: Runs success callback with a new GATT |
| // connection and runs any pending GATT operation callbacks. |
| static scoped_refptr<testing::NiceMock<device::MockBluetoothAdapter>> |
| GetGATTOperationFinishesAfterReconnectionAdapter(bool disconnect, |
| bool succeeds); |
| |
| // |StopNotifySessionFinishesAfterReconnection|(disconnect) |
| // Inherits from |EmptyAdapter| |
| // Internal Structure: |
| // - Health Thermometer Device |
| // - UUIDs: |
| // - Generic Access UUID (0x1800) |
| // - Health Thermometer UUID (0x1809) |
| // - Services: |
| // - Generic Access Service - Characteristics as described in |
| // GetGenericAccessService. |
| // - Health Thermometer |
| // - Measurement Interval: |
| // - StartNotifySession: Calls the success callback with a |
| // NotifySession whose Stop function: saves a callback and |
| // if |disconnect| is true disconnects the device. |
| // - CreateGattConnection: Runs success callback with a new GATT |
| // connection and runs any pending GATT operation callbacks. |
| static scoped_refptr<testing::NiceMock<device::MockBluetoothAdapter>> |
| GetStopNotifySessionFinishesAfterReconnectionAdapter(bool disconnect); |
| |
| // |BlocklistTestAdapter| |
| // Inherits from |EmptyAdapter| |
| // Internal Structure: |
| // - |ConnectableDevice|(adapter, "Blocklist Test Device", uuids) |
| // - UUIDs: |
| // - Blocklist Test Service UUID |
| // (611c954a-263b-4f4a-aab6-01ddb953f985) |
| // - Device Information UUID (0x180a) |
| // - Generic Access UUID (0x1800) |
| // - Heart Rate UUID (0x180d) |
| // - Human Interface Device UUID (0x1812) (a blocklisted service) |
| // - Services: |
| // - Blocklist Test Service - Characteristics as described in |
| // GetBlocklistTestService. |
| // - Device Information Service - Characteristics as described in |
| // GetDeviceInformationService. |
| // - Generic Access Service - Characteristics as described in |
| // GetGenericAccessService. |
| // - Heart Rate Service - Characteristics as described in |
| // GetHeartRateService. |
| // - Human Interface Device Service - No characteristics needed |
| // because the service is blocklisted. |
| static scoped_refptr<testing::NiceMock<device::MockBluetoothAdapter>> |
| GetBlocklistTestAdapter(); |
| |
| // |DelayedServicesDiscoveryAdapter| |
| // Inherits from |EmptyAdapter| |
| // Internal Structure: |
| // - Heart Rate Device |
| // - Generic Access UUID (0x1800) |
| // - Heart Rate UUID (0x180D) |
| // - Heart Rate Service (No services will be returned the first time |
| // GetServices is called. Subsequent calls will |
| // return the Heart Rate Service) |
| static scoped_refptr<testing::NiceMock<device::MockBluetoothAdapter>> |
| GetDelayedServicesDiscoveryAdapter(); |
| |
| // |FailingConnectionsAdapter| |
| // Inherits from |EmptyAdapter| |
| // FailingConnectionsAdapter holds a device for each type of connection error |
| // that can occur. This way we don’t need to create an adapter for each type |
| // of error. Each of the devices has a service with a different UUID so that |
| // they can be accessed by using different filters. |
| // See connectErrorUUID() declaration below. |
| // Internal Structure: |
| // - UnconnectableDevice(BluetoothDevice::ERROR_AUTH_CANCELED) |
| // connectErrorUUID(0x0) |
| // - UnconnectableDevice(BluetoothDevice::ERROR_AUTH_FAILED) |
| // connectErrorUUID(0x1) |
| // - UnconnectableDevice(BluetoothDevice::ERROR_AUTH_REJECTED) |
| // connectErrorUUID(0x2) |
| // - UnconnectableDevice(BluetoothDevice::ERROR_AUTH_TIMEOUT) |
| // connectErrorUUID(0x3) |
| // - UnconnectableDevice(BluetoothDevice::ERROR_FAILED) |
| // connectErrorUUID(0x4) |
| // - UnconnectableDevice(BluetoothDevice::ERROR_INPROGRESS) |
| // connectErrorUUID(0x5) |
| // - UnconnectableDevice(BluetoothDevice::ERROR_UNKNOWN) |
| // connectErrorUUID(0x6) |
| // - UnconnectableDevice(BluetoothDevice::ERROR_UNSUPPORTED_DEVICE) |
| // connectErrorUUID(0x7) |
| static scoped_refptr<testing::NiceMock<device::MockBluetoothAdapter>> |
| GetFailingConnectionsAdapter(); |
| |
| // |FailingGATTOperationsAdapter| |
| // Inherits from |EmptyAdapter| |
| // FailingGATTOperationsAdapter holds a device with one |
| // service: ErrorsService. This service contains a characteristic for each |
| // type of GATT Error that can be thrown. Trying to write or read from these |
| // characteristics results in the corresponding error being returned. |
| // GetProperties returns the following for all characteristics: |
| // (BluetoothRemoteGattCharacteristic::PROPERTY_READ | |
| // BluetoothRemoteGattCharacteristic::PROPERTY_WRITE | |
| // BluetoothRemoteGattCharacteristic::PROPERTY_INDICATE) |
| // Internal Structure: |
| // - ErrorsDevice |
| // - ErrorsService errorUUID(0xA0) |
| // - ErrorCharacteristic( |
| // BluetoothGattService::GattErrorCode::kUnknown) |
| // errorUUID(0xA1) |
| // - ErrorCharacteristic( |
| // BluetoothGattService::GattErrorCode::kFailed) |
| // errorUUID(0xA2) |
| // - ErrorCharacteristic( |
| // BluetoothGattService::GattErrorCode::kInProgress) |
| // errorUUID(0xA3) |
| // - ErrorCharacteristic( |
| // BluetoothGattService::GattErrorCode::kInvalidLength) |
| // errorUUID(0xA4) |
| // - ErrorCharacteristic( |
| // BluetoothGattService::GattErrorCode::kNotPermitted) |
| // errorUUID(0xA5) |
| // - ErrorCharacteristic( |
| // BluetoothGattService::GattErrorCode::kNotAuthorized) |
| // errorUUID(0xA6) |
| // - ErrorCharacteristic( |
| // BluetoothGattService::GattErrorCode::kNotPaired) |
| // errorUUID(0xA7) |
| // - ErrorCharacteristic( |
| // BluetoothGattService::GattErrorCode::kNotSupported) |
| // errorUUID(0xA8) |
| // - Request Disconnection Service: - Characteristics as described in |
| // GetDisconnectingService |
| static scoped_refptr<testing::NiceMock<device::MockBluetoothAdapter>> |
| GetFailingGATTOperationsAdapter(); |
| |
| // Devices |
| |
| // |BaseDevice| |
| // UUIDs added: |
| // None. |
| // Services added: |
| // None. |
| // MockFunctions: |
| // - GetUUIDs: |
| // Returns uuids |
| // - GetGattServices: |
| // Returns a list of all services added to the device. |
| // - GetGattService: |
| // Return a service matching the identifier provided if the service was |
| // added to the mock. |
| // - GetAddress: |
| // Returns: address |
| // - GetName: |
| // Returns: device_name. |
| // - IsPaired: |
| // Returns false. |
| // - IsConnected: |
| // Returns false. |
| // - IsGattConnected: |
| // Returns false. |
| // - ConnectGatt: |
| // Calls error callback with |
| // BluetoothDevice::ConnectErrorCode::ERROR_UNSUPPORTED_DEVICE. |
| static std::unique_ptr<testing::NiceMock<device::MockBluetoothDevice>> |
| GetBaseDevice(device::MockBluetoothAdapter* adapter, |
| const char* device_name = "Base Device", |
| device::BluetoothDevice::UUIDList uuids = |
| device::BluetoothDevice::UUIDList(), |
| const std::string& address = "00:00:00:00:00:00"); |
| |
| // |BatteryDevice| |
| // Inherits from |BaseDevice|(adapter, "Battery Device", uuids, |
| // "00:00:00:00:00:01") |
| // UUIDs added: |
| // - Battery Service UUID (0x180F) |
| // Services added: |
| // None. |
| static std::unique_ptr<testing::NiceMock<device::MockBluetoothDevice>> |
| GetBatteryDevice(device::MockBluetoothAdapter* adapter); |
| |
| // |GlucoseDevice| |
| // Inherits from |BaseDevice|(adapter, "Glucose Device", uuids, |
| // "00:00:00:00:00:02") |
| // UUIDs added: |
| // - Generic Access (0x1800) |
| // - Glucose UUID (0x1808) |
| // - Tx Power (0x1804) |
| // Manufacturer Data added: |
| // - 0x0001 : { 1, 2 } |
| // - 0x0002 : { 3, 4 } |
| // Services added: |
| // None. |
| static std::unique_ptr<testing::NiceMock<device::MockBluetoothDevice>> |
| GetGlucoseDevice(device::MockBluetoothAdapter* adapter); |
| |
| // |ConnectableDevice| |
| // Inherits from |BaseDevice|(adapter, device_name) |
| // UUIDs added: |
| // None. |
| // Services added: |
| // None. |
| // Mock Functions: |
| // - CreateGattConnection: |
| // - Run success callback with BaseGATTConnection |
| static std::unique_ptr<testing::NiceMock<device::MockBluetoothDevice>> |
| GetConnectableDevice( |
| device::MockBluetoothAdapter* adapter, |
| const char* device_name = "Connectable Device", |
| device::BluetoothDevice::UUIDList = device::BluetoothDevice::UUIDList(), |
| const std::string& address = "00:00:00:00:00:00"); |
| |
| // |UnconnectableDevice| |
| // Inherits from |BaseDevice|(adapter, device_name) |
| // UUIDs added: |
| // - errorUUID(error_code) |
| // Services added: |
| // None. |
| // Mock Functions: |
| // - CreateGATTConnection: |
| // - Run error callback with error_type |
| static std::unique_ptr<testing::NiceMock<device::MockBluetoothDevice>> |
| GetUnconnectableDevice(device::MockBluetoothAdapter* adapter, |
| device::BluetoothDevice::ConnectErrorCode error_code, |
| const char* device_name = "Unconnectable Device"); |
| |
| // |HeartRateDevice| |
| // Inherits from |ConnectableDevice|(adapter, "Heart Rate Device", uuids) |
| // UUIDs added: |
| // - Generic Access (0x1800) |
| // - Heart Rate UUID (0x180D) |
| // Services added: |
| // None. Each user of the HeartRateDevice is in charge of adding the |
| // relevant services, characteristics and descriptors. |
| static std::unique_ptr<testing::NiceMock<device::MockBluetoothDevice>> |
| GetHeartRateDevice(device::MockBluetoothAdapter* adapter, |
| const char* device_name = "Heart Rate Device"); |
| |
| // Services |
| |
| // |BaseGATTService|(identifier, device, uuid) |
| // Characteristics added: |
| // None. |
| // Mock Functions: |
| // - GetCharacteristics: |
| // Returns a list with all the characteristics added to the service |
| // - GetCharacteristic: |
| // Returns a characteristic matching the identifier provided if the |
| // characteristic was added to the mock. |
| // - GetIdentifier: |
| // Returns: identifier |
| // - GetUUID: |
| // Returns: uuid |
| // - IsLocal: |
| // Returns: false |
| // - IsPrimary: |
| // Returns: true |
| // - GetDevice: |
| // Returns: device |
| static std::unique_ptr<testing::NiceMock<device::MockBluetoothGattService>> |
| GetBaseGATTService(const std::string& identifier, |
| device::MockBluetoothDevice* device, |
| const std::string& uuid); |
| |
| // |DeviceInformationService| |
| // Internal Structure: |
| // - Characteristics: |
| // - Serial Number String: (0x2a25) (a blocklisted characteristic) |
| // - Mock Functions: |
| // - Read: Fails test. |
| // - GetProperties: Returns |
| // BluetoothRemoteGattCharacteristic::PROPERTY_READ |
| static std::unique_ptr<testing::NiceMock<device::MockBluetoothGattService>> |
| GetDeviceInformationService(device::MockBluetoothDevice* device); |
| |
| // |BlocklistTestService| |
| // Internal Structure: |
| // - Characteristics: |
| // - Blocklist Exclude Reads Characteristic: |
| // (bad1c9a2-9a5b-4015-8b60-1579bbbf2135) |
| // - Mock Functions: |
| // - Read: Fails test. |
| // - Write: Calls success callback. |
| // - GetProperties: Returns |
| // BluetoothRemoteGattCharacteristic::PROPERTY_READ | |
| // BluetoothRemoteGattCharacteristic::PROPERTY_WRITE |
| static std::unique_ptr<testing::NiceMock<device::MockBluetoothGattService>> |
| GetBlocklistTestService(device::MockBluetoothDevice* device); |
| |
| // |GenericAccessService| |
| // Internal Structure: |
| // - Characteristics: |
| // - Device Name: (0x2A00) |
| // - Mock Functions: |
| // - Read: Calls success callback with device's name. |
| // - Write: Calls success callback. |
| // - GetProperties: Returns |
| // BluetoothRemoteGattCharacteristic::PROPERTY_READ | |
| // BluetoothRemoteGattCharacteristic::PROPERTY_WRITE |
| // - Peripheral Privacy Flag: (0x2A02) (blocklisted for writes) |
| // - Mock Functions: |
| // - Read: Calls success callback with boolean value 'false'. |
| // - Write: Fails test. |
| // - GetProperties: Returns |
| // BluetoothRemoteGattCharacteristic::PROPERTY_READ | |
| // BluetoothRemoteGattCharacteristic::PROPERTY_WRITE |
| static std::unique_ptr<testing::NiceMock<device::MockBluetoothGattService>> |
| GetGenericAccessService(device::MockBluetoothDevice* device); |
| |
| // |HeartRateService| |
| // Internal Structure: |
| // - Characteristics: |
| // - Heart Rate Measurement (0x2a37) |
| // - Mock Functions: |
| // - StartNotifySession: Sets a timer to call |
| // GattCharacteristicValueChanged every 10ms and calls |
| // success callback with a |
| // BaseGATTNotifySession(characteristic_instance_id) |
| // TODO: Instead of a timer we should be able to tell the fake |
| // to call GattCharacteristicValueChanged from js. |
| // https://crbug.com/543884 |
| // - GetProperties: Returns |
| // BluetoothRemoteGattCharacteristic::PROPERTY_NOTIFY |
| // - Body Sensor Location (0x2a38) |
| // - Mock Functions: |
| // - Read: Calls GattCharacteristicValueChanged and success |
| // callback with [1] which corresponds to chest. |
| // - GetProperties: Returns |
| // BluetoothRemoteGattCharacteristic::PROPERTY_READ |
| // - Body Sensor Location (0x2a38) |
| // - Mock Functions: |
| // - Read: Calls GattCharacteristicValueChanged and success |
| // callback with [2] which corresponds to wrist. |
| // - GetProperties: Returns |
| // BluetoothRemoteGattCharacteristic::PROPERTY_READ |
| static std::unique_ptr<testing::NiceMock<device::MockBluetoothGattService>> |
| GetHeartRateService(device::MockBluetoothAdapter* adapter, |
| device::MockBluetoothDevice* device); |
| |
| // |DisconnectingService| |
| // Internal Structure: |
| // - Characteristics: |
| // - Request Disconnection Characteristic ( |
| // 01d7d889-7451-419f-aeb8-d65e7b9277af) |
| // - Write: Sets the device to disconnected and calls DeviceChanged. |
| static std::unique_ptr<testing::NiceMock<device::MockBluetoothGattService>> |
| GetDisconnectingService(device::MockBluetoothAdapter* adapter, |
| device::MockBluetoothDevice* device); |
| |
| // Characteristics |
| |
| // |BaseCharacteristic|(identifier, service, uuid) |
| // Descriptors added: |
| // None. |
| // Mock Functions: |
| // - TODO(ortuno): http://crbug.com/483347 GetDescriptors: |
| // Returns: all descriptors added to the characteristic |
| // - TODO(ortuno): http://crbug.com/483347 GetDescriptor: |
| // Returns the descriptor matching the identifier provided if the |
| // descriptor was added to the characteristic. |
| // - GetIdentifier: |
| // Returns: identifier |
| // - GetUUID: |
| // Returns: uuid |
| // - IsLocal: |
| // Returns: false |
| // - GetService: |
| // Returns: service |
| // - GetProperties: |
| // Returns: nullptr |
| // - GetPermissions: |
| // Returns: nullptr |
| // - ReadRemoteCharacteristic: |
| // Calls error callback with GATT_ERROR_NOT_SUPPORTED. |
| // - WriteRemoteCharacteristic: |
| // Calls error callback with GATT_ERROR_NOT_SUPPORTED. |
| // - StartNotifySession: |
| // Calls error callback with GATT_ERROR_NOT_SUPPORTED. |
| static std::unique_ptr< |
| testing::NiceMock<device::MockBluetoothGattCharacteristic>> |
| GetBaseGATTCharacteristic( |
| const std::string& identifier, |
| device::MockBluetoothGattService* service, |
| const std::string& uuid, |
| device::BluetoothRemoteGattCharacteristic::Properties properties); |
| |
| // |ErrorCharacteristic|(service, error_type) |
| // Inherits from BaseCharacteristic(service, errorUUID(error_type + 0xA1)) |
| // Descriptors added: |
| // None. |
| // Mock Functions: |
| // - ReadRemoteCharacteristic: |
| // Run error callback with error_type |
| // - WriteRemoteCharacteristic: |
| // Run error callback with error_type |
| // - StartNotifySession: |
| // Run error callback with error_type |
| static std::unique_ptr< |
| testing::NiceMock<device::MockBluetoothGattCharacteristic>> |
| GetErrorCharacteristic( |
| device::MockBluetoothGattService* service, |
| device::BluetoothGattService::GattErrorCode error_code); |
| |
| // Notify Sessions |
| |
| // |BaseGATTNotifySession|(characteristic_identifier) |
| // Mock Functions: |
| // - GetCharacteristicIdentifier: |
| // Returns: characteristic_identifier |
| // - IsActive: |
| // Returns: true |
| // - Stop: |
| // Stops calling GattCharacteristicValueChanged and runs callback. |
| static std::unique_ptr< |
| testing::NiceMock<device::MockBluetoothGattNotifySession>> |
| GetBaseGATTNotifySession( |
| base::WeakPtr<device::BluetoothRemoteGattCharacteristic> characteristic); |
| |
| // Helper functions: |
| |
| // errorUUID(alias) returns a UUID with the top 32 bits of |
| // "00000000-97e5-4cd7-b9f1-f5a427670c59" replaced with the bits of |alias|. |
| // For example, errorUUID(0xDEADBEEF) returns |
| // "deadbeef-97e5-4cd7-b9f1-f5a427670c59". The bottom 96 bits of error UUIDs |
| // were generated as a type 4 (random) UUID. |
| static std::string errorUUID(uint32_t alias); |
| |
| // Function to turn an integer into an MAC address of the form |
| // XX:XX:XX:XX:XX:XX. For example makeMACAddress(0xdeadbeef) |
| // returns "00:00:DE:AD:BE:EF". |
| static std::string makeMACAddress(uint64_t addr); |
| }; |
| |
| } // namespace content |
| |
| #endif // CONTENT_WEB_TEST_BROWSER_WEB_TEST_BLUETOOTH_ADAPTER_PROVIDER_H_ |