Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/shell/browser/layout_test/layout_test_bluetooth_adapter_provid er.h" | 5 #include "content/shell/browser/layout_test/layout_test_bluetooth_adapter_provid er.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 140 observer.GattServicesDiscovered(adapter, device); | 140 observer.GattServicesDiscovered(adapter, device); |
| 141 } | 141 } |
| 142 | 142 |
| 143 // Notifies the adapter's observers that a device has changed. | 143 // Notifies the adapter's observers that a device has changed. |
| 144 void NotifyDeviceChanged(MockBluetoothAdapter* adapter, | 144 void NotifyDeviceChanged(MockBluetoothAdapter* adapter, |
| 145 MockBluetoothDevice* device) { | 145 MockBluetoothDevice* device) { |
| 146 for (auto& observer : adapter->GetObservers()) | 146 for (auto& observer : adapter->GetObservers()) |
| 147 observer.DeviceChanged(adapter, device); | 147 observer.DeviceChanged(adapter, device); |
| 148 } | 148 } |
| 149 | 149 |
| 150 void PerformReadValue( | |
| 151 MockBluetoothAdapter* adapter, | |
| 152 MockBluetoothGattCharacteristic* characteristic, | |
| 153 const BluetoothRemoteGattCharacteristic::ValueCallback& callback, | |
| 154 const std::vector<uint8_t>& value) { | |
| 155 for (auto& observer : adapter->GetObservers()) { | |
| 156 observer.GattCharacteristicValueChanged(adapter, characteristic, value); | |
| 157 } | |
| 158 callback.Run(value); | |
| 159 } | |
| 160 | |
| 150 } // namespace | 161 } // namespace |
| 151 | 162 |
| 152 namespace content { | 163 namespace content { |
| 153 | 164 |
| 154 // static | 165 // static |
| 155 scoped_refptr<BluetoothAdapter> | 166 scoped_refptr<BluetoothAdapter> |
| 156 LayoutTestBluetoothAdapterProvider::GetBluetoothAdapter( | 167 LayoutTestBluetoothAdapterProvider::GetBluetoothAdapter( |
| 157 const std::string& fake_adapter_name) { | 168 const std::string& fake_adapter_name) { |
| 158 if (fake_adapter_name == "BaseAdapter") | 169 if (fake_adapter_name == "BaseAdapter") |
| 159 return GetBaseAdapter(); | 170 return GetBaseAdapter(); |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 185 return GetTwoHeartRateServicesAdapter(); | 196 return GetTwoHeartRateServicesAdapter(); |
| 186 if (fake_adapter_name == "DisconnectingHeartRateAdapter") | 197 if (fake_adapter_name == "DisconnectingHeartRateAdapter") |
| 187 return GetDisconnectingHeartRateAdapter(); | 198 return GetDisconnectingHeartRateAdapter(); |
| 188 if (fake_adapter_name == "DisconnectingHealthThermometerAdapter") | 199 if (fake_adapter_name == "DisconnectingHealthThermometerAdapter") |
| 189 return GetDisconnectingHealthThermometer(); | 200 return GetDisconnectingHealthThermometer(); |
| 190 if (fake_adapter_name == "DisconnectingDuringServiceRetrievalAdapter") | 201 if (fake_adapter_name == "DisconnectingDuringServiceRetrievalAdapter") |
| 191 return GetServicesDiscoveredAfterReconnectionAdapter(true /* disconnect */); | 202 return GetServicesDiscoveredAfterReconnectionAdapter(true /* disconnect */); |
| 192 if (fake_adapter_name == "ServicesDiscoveredAfterReconnectionAdapter") | 203 if (fake_adapter_name == "ServicesDiscoveredAfterReconnectionAdapter") |
| 193 return GetServicesDiscoveredAfterReconnectionAdapter( | 204 return GetServicesDiscoveredAfterReconnectionAdapter( |
| 194 false /* disconnect */); | 205 false /* disconnect */); |
| 206 if (fake_adapter_name == "DisconnectingDuringSuccessGATTOperationAdapter") { | |
| 207 return GetGATTOperationFinishesAfterReconnectionAdapter( | |
| 208 true /* disconnect */, true /* succeeds */); | |
| 209 } | |
| 210 if (fake_adapter_name == "DisconnectingDuringFailureGATTOperationAdapter") { | |
| 211 return GetGATTOperationFinishesAfterReconnectionAdapter( | |
| 212 true /* disconnect */, false /* succeeds */); | |
| 213 } | |
| 214 if (fake_adapter_name == "GATTOperationSucceedsAfterReconnectionAdapter") { | |
| 215 return GetGATTOperationFinishesAfterReconnectionAdapter( | |
| 216 false /* disconnect */, true /* succeeds */); | |
| 217 } | |
| 218 if (fake_adapter_name == "GATTOperationFailsAfterReconnectionAdapter") { | |
| 219 return GetGATTOperationFinishesAfterReconnectionAdapter( | |
| 220 false /* disconnect */, false /* succeeds */); | |
| 221 } | |
| 195 if (fake_adapter_name == "BlacklistTestAdapter") | 222 if (fake_adapter_name == "BlacklistTestAdapter") |
| 196 return GetBlacklistTestAdapter(); | 223 return GetBlacklistTestAdapter(); |
| 197 if (fake_adapter_name == "FailingConnectionsAdapter") | 224 if (fake_adapter_name == "FailingConnectionsAdapter") |
| 198 return GetFailingConnectionsAdapter(); | 225 return GetFailingConnectionsAdapter(); |
| 199 if (fake_adapter_name == "FailingGATTOperationsAdapter") | 226 if (fake_adapter_name == "FailingGATTOperationsAdapter") |
| 200 return GetFailingGATTOperationsAdapter(); | 227 return GetFailingGATTOperationsAdapter(); |
| 201 if (fake_adapter_name == "SecondDiscoveryFindsHeartRateAdapter") | 228 if (fake_adapter_name == "SecondDiscoveryFindsHeartRateAdapter") |
| 202 return GetSecondDiscoveryFindsHeartRateAdapter(); | 229 return GetSecondDiscoveryFindsHeartRateAdapter(); |
| 203 if (fake_adapter_name == "DeviceEventAdapter") | 230 if (fake_adapter_name == "DeviceEventAdapter") |
| 204 return GetDeviceEventAdapter(); | 231 return GetDeviceEventAdapter(); |
| (...skipping 631 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 836 } | 863 } |
| 837 | 864 |
| 838 return true; | 865 return true; |
| 839 })); | 866 })); |
| 840 adapter->AddMockDevice(std::move(device)); | 867 adapter->AddMockDevice(std::move(device)); |
| 841 | 868 |
| 842 return adapter; | 869 return adapter; |
| 843 } | 870 } |
| 844 | 871 |
| 845 // static | 872 // static |
| 873 scoped_refptr<NiceMockBluetoothAdapter> LayoutTestBluetoothAdapterProvider:: | |
| 874 GetGATTOperationFinishesAfterReconnectionAdapter(bool disconnect, | |
| 875 bool succeeds) { | |
| 876 scoped_refptr<NiceMockBluetoothAdapter> adapter(GetEmptyAdapter()); | |
| 877 NiceMockBluetoothAdapter* adapter_ptr = adapter.get(); | |
| 878 | |
| 879 std::unique_ptr<NiceMockBluetoothDevice> device(GetConnectableDevice( | |
| 880 adapter_ptr, "GATT Operation finishes after reconnection Device", | |
| 881 BluetoothDevice::UUIDList({BluetoothUUID(kGenericAccessServiceUUID), | |
| 882 BluetoothUUID(kHealthThermometerUUID)}))); | |
| 883 NiceMockBluetoothDevice* device_ptr = device.get(); | |
| 884 | |
| 885 ON_CALL(*device, CreateGattConnection(_, _)) | |
| 886 .WillByDefault(Invoke([adapter_ptr, device_ptr]( | |
| 887 const BluetoothDevice::GattConnectionCallback& callback, | |
| 888 const BluetoothDevice::ConnectErrorCallback& error_callback) { | |
| 889 callback.Run(base::MakeUnique<NiceMockBluetoothGattConnection>( | |
| 890 adapter_ptr, device_ptr->GetAddress())); | |
| 891 while (device_ptr->HasPendingCallback()) { | |
| 892 device_ptr->PopPendingCallback().Run(); | |
| 893 } | |
| 894 })); | |
| 895 | |
| 896 device->AddMockService(GetGenericAccessService(device.get())); | |
| 897 | |
| 898 std::unique_ptr<NiceMockBluetoothGattService> health_thermometer( | |
| 899 GetBaseGATTService("Health Thermometer", device.get(), | |
| 900 kHealthThermometerUUID)); | |
| 901 | |
| 902 // Measurement Interval | |
| 903 std::unique_ptr<NiceMockBluetoothGattCharacteristic> measurement_interval( | |
| 904 GetBaseGATTCharacteristic( | |
| 905 "Measurement Interval", health_thermometer.get(), | |
| 906 kMeasurementIntervalUUID, | |
| 907 BluetoothRemoteGattCharacteristic::PROPERTY_READ | | |
| 908 BluetoothRemoteGattCharacteristic::PROPERTY_WRITE | | |
|
Jeffrey Yasskin
2016/10/22 01:02:06
Since the characteristic only actually handles rea
ortuno
2016/10/24 01:52:33
Done.
| |
| 909 BluetoothRemoteGattCharacteristic::PROPERTY_NOTIFY)); | |
| 910 NiceMockBluetoothGattCharacteristic* measurement_ptr = | |
| 911 measurement_interval.get(); | |
| 912 | |
| 913 ON_CALL(*measurement_interval, ReadRemoteCharacteristic(_, _)) | |
| 914 .WillByDefault(Invoke([adapter_ptr, device_ptr, measurement_ptr, | |
| 915 disconnect, succeeds]( | |
| 916 const BluetoothRemoteGattCharacteristic::ValueCallback& callback, | |
| 917 const BluetoothRemoteGattCharacteristic::ErrorCallback& | |
| 918 error_callback) { | |
| 919 base::Closure pending; | |
| 920 if (succeeds) { | |
| 921 pending = | |
| 922 base::Bind(&PerformReadValue, base::RetainedRef(adapter_ptr), | |
| 923 measurement_ptr, callback, std::vector<uint8_t>({1})); | |
| 924 } else { | |
| 925 pending = base::Bind(error_callback, | |
| 926 BluetoothRemoteGattService::GATT_ERROR_FAILED); | |
| 927 } | |
| 928 device_ptr->PushPendingCallback(pending); | |
| 929 if (disconnect) { | |
| 930 device_ptr->SetConnected(false); | |
| 931 base::ThreadTaskRunnerHandle::Get()->PostTask( | |
| 932 FROM_HERE, | |
| 933 base::Bind(&NotifyDeviceChanged, base::RetainedRef(adapter_ptr), | |
| 934 device_ptr)); | |
| 935 } | |
| 936 })); | |
| 937 | |
| 938 health_thermometer->AddMockCharacteristic(std::move(measurement_interval)); | |
| 939 device->AddMockService(std::move(health_thermometer)); | |
| 940 adapter->AddMockDevice(std::move(device)); | |
| 941 | |
| 942 return adapter; | |
| 943 } | |
| 944 | |
| 945 // static | |
| 846 scoped_refptr<NiceMockBluetoothAdapter> | 946 scoped_refptr<NiceMockBluetoothAdapter> |
| 847 LayoutTestBluetoothAdapterProvider::GetBlacklistTestAdapter() { | 947 LayoutTestBluetoothAdapterProvider::GetBlacklistTestAdapter() { |
| 848 scoped_refptr<NiceMockBluetoothAdapter> adapter(GetEmptyAdapter()); | 948 scoped_refptr<NiceMockBluetoothAdapter> adapter(GetEmptyAdapter()); |
| 849 | 949 |
| 850 BluetoothDevice::UUIDList uuids; | 950 BluetoothDevice::UUIDList uuids; |
| 851 uuids.push_back(BluetoothUUID(kBlacklistTestServiceUUID)); | 951 uuids.push_back(BluetoothUUID(kBlacklistTestServiceUUID)); |
| 852 uuids.push_back(BluetoothUUID(kDeviceInformationServiceUUID)); | 952 uuids.push_back(BluetoothUUID(kDeviceInformationServiceUUID)); |
| 853 uuids.push_back(BluetoothUUID(kGenericAccessServiceUUID)); | 953 uuids.push_back(BluetoothUUID(kGenericAccessServiceUUID)); |
| 854 uuids.push_back(BluetoothUUID(kHeartRateServiceUUID)); | 954 uuids.push_back(BluetoothUUID(kHeartRateServiceUUID)); |
| 855 uuids.push_back(BluetoothUUID(kHumanInterfaceDeviceServiceUUID)); | 955 uuids.push_back(BluetoothUUID(kHumanInterfaceDeviceServiceUUID)); |
| (...skipping 580 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1436 return BluetoothUUID(); | 1536 return BluetoothUUID(); |
| 1437 } | 1537 } |
| 1438 | 1538 |
| 1439 // static | 1539 // static |
| 1440 std::string LayoutTestBluetoothAdapterProvider::makeMACAddress(uint64_t addr) { | 1540 std::string LayoutTestBluetoothAdapterProvider::makeMACAddress(uint64_t addr) { |
| 1441 return BluetoothDevice::CanonicalizeAddress( | 1541 return BluetoothDevice::CanonicalizeAddress( |
| 1442 base::StringPrintf("%012" PRIx64, addr)); | 1542 base::StringPrintf("%012" PRIx64, addr)); |
| 1443 } | 1543 } |
| 1444 | 1544 |
| 1445 } // namespace content | 1545 } // namespace content |
| OLD | NEW |