| 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 79 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 90 const char kHeartRateMeasurementUUID[] = "2a37"; | 90 const char kHeartRateMeasurementUUID[] = "2a37"; | 
| 91 const char kSerialNumberStringUUID[] = "2a25"; | 91 const char kSerialNumberStringUUID[] = "2a25"; | 
| 92 const char kPeripheralPrivacyFlagUUID[] = "2a02"; | 92 const char kPeripheralPrivacyFlagUUID[] = "2a02"; | 
| 93 // Descriptors: | 93 // Descriptors: | 
| 94 const char kUserDescriptionUUID[] = "2901"; | 94 const char kUserDescriptionUUID[] = "2901"; | 
| 95 // Client Config is in our blocklist.  It must not be writable | 95 // Client Config is in our blocklist.  It must not be writable | 
| 96 const char kClientConfigUUID[] = "2902"; | 96 const char kClientConfigUUID[] = "2902"; | 
| 97 // Blocklisted descriptor | 97 // Blocklisted descriptor | 
| 98 const char kBlocklistedDescriptorUUID[] = | 98 const char kBlocklistedDescriptorUUID[] = | 
| 99     "bad2ddcf-60db-45cd-bef9-fd72b153cf7c"; | 99     "bad2ddcf-60db-45cd-bef9-fd72b153cf7c"; | 
|  | 100 const char kBlocklistedReadDescriptorUUID[] = | 
|  | 101     "bad3ec61-3cc3-4954-9702-7977df514114"; | 
|  | 102 const char kCharacteristicUserDescription[] = | 
|  | 103     "gatt.characteristic_user_description"; | 
| 100 | 104 | 
| 101 // Invokes Run() on the k-th argument of the function with no arguments. | 105 // Invokes Run() on the k-th argument of the function with no arguments. | 
| 102 ACTION_TEMPLATE(RunCallback, | 106 ACTION_TEMPLATE(RunCallback, | 
| 103                 HAS_1_TEMPLATE_PARAMS(int, k), | 107                 HAS_1_TEMPLATE_PARAMS(int, k), | 
| 104                 AND_0_VALUE_PARAMS()) { | 108                 AND_0_VALUE_PARAMS()) { | 
| 105   return ::testing::get<k>(args).Run(); | 109   return ::testing::get<k>(args).Run(); | 
| 106 } | 110 } | 
| 107 | 111 | 
| 108 // Invokes Run() on the k-th argument of the function with 1 argument. | 112 // Invokes Run() on the k-th argument of the function with 1 argument. | 
| 109 ACTION_TEMPLATE(RunCallback, | 113 ACTION_TEMPLATE(RunCallback, | 
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 153     observer.GattServicesDiscovered(adapter, device); | 157     observer.GattServicesDiscovered(adapter, device); | 
| 154 } | 158 } | 
| 155 | 159 | 
| 156 // Notifies the adapter's observers that a device has changed. | 160 // Notifies the adapter's observers that a device has changed. | 
| 157 void NotifyDeviceChanged(MockBluetoothAdapter* adapter, | 161 void NotifyDeviceChanged(MockBluetoothAdapter* adapter, | 
| 158                          MockBluetoothDevice* device) { | 162                          MockBluetoothDevice* device) { | 
| 159   for (auto& observer : adapter->GetObservers()) | 163   for (auto& observer : adapter->GetObservers()) | 
| 160     observer.DeviceChanged(adapter, device); | 164     observer.DeviceChanged(adapter, device); | 
| 161 } | 165 } | 
| 162 | 166 | 
| 163 void PerformReadValue( | 167 void PerformCharacteristicReadValue( | 
| 164     MockBluetoothAdapter* adapter, | 168     MockBluetoothAdapter* adapter, | 
| 165     MockBluetoothGattCharacteristic* characteristic, | 169     MockBluetoothGattCharacteristic* characteristic, | 
| 166     const BluetoothRemoteGattCharacteristic::ValueCallback& callback, | 170     const BluetoothRemoteGattCharacteristic::ValueCallback& callback, | 
| 167     const std::vector<uint8_t>& value) { | 171     const std::vector<uint8_t>& value) { | 
| 168   for (auto& observer : adapter->GetObservers()) { | 172   for (auto& observer : adapter->GetObservers()) { | 
| 169     observer.GattCharacteristicValueChanged(adapter, characteristic, value); | 173     observer.GattCharacteristicValueChanged(adapter, characteristic, value); | 
| 170   } | 174   } | 
| 171   callback.Run(value); | 175   callback.Run(value); | 
| 172 } | 176 } | 
| 173 | 177 | 
|  | 178 void PerformDescriptorReadValue( | 
|  | 179     MockBluetoothAdapter* adapter, | 
|  | 180     MockBluetoothGattDescriptor* descriptor, | 
|  | 181     const BluetoothRemoteGattDescriptor::ValueCallback& callback, | 
|  | 182     const std::vector<uint8_t>& value) { | 
|  | 183   for (auto& observer : adapter->GetObservers()) { | 
|  | 184     observer.GattDescriptorValueChanged(adapter, descriptor, value); | 
|  | 185   } | 
|  | 186   callback.Run(value); | 
|  | 187 } | 
|  | 188 | 
| 174 }  // namespace | 189 }  // namespace | 
| 175 | 190 | 
| 176 namespace content { | 191 namespace content { | 
| 177 | 192 | 
| 178 // static | 193 // static | 
| 179 scoped_refptr<BluetoothAdapter> | 194 scoped_refptr<BluetoothAdapter> | 
| 180 LayoutTestBluetoothAdapterProvider::GetBluetoothAdapter( | 195 LayoutTestBluetoothAdapterProvider::GetBluetoothAdapter( | 
| 181     const std::string& fake_adapter_name) { | 196     const std::string& fake_adapter_name) { | 
| 182   if (fake_adapter_name == "BaseAdapter") | 197   if (fake_adapter_name == "BaseAdapter") | 
| 183     return GetBaseAdapter(); | 198     return GetBaseAdapter(); | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
| 209     return GetNoNameDeviceAdapter(); | 224     return GetNoNameDeviceAdapter(); | 
| 210   if (fake_adapter_name == "EmptyNameHeartRateAdapter") | 225   if (fake_adapter_name == "EmptyNameHeartRateAdapter") | 
| 211     return GetEmptyNameHeartRateAdapter(); | 226     return GetEmptyNameHeartRateAdapter(); | 
| 212   if (fake_adapter_name == "NoNameHeartRateAdapter") | 227   if (fake_adapter_name == "NoNameHeartRateAdapter") | 
| 213     return GetNoNameHeartRateAdapter(); | 228     return GetNoNameHeartRateAdapter(); | 
| 214   if (fake_adapter_name == "TwoHeartRateServicesAdapter") | 229   if (fake_adapter_name == "TwoHeartRateServicesAdapter") | 
| 215     return GetTwoHeartRateServicesAdapter(); | 230     return GetTwoHeartRateServicesAdapter(); | 
| 216   if (fake_adapter_name == "DisconnectingHeartRateAdapter") | 231   if (fake_adapter_name == "DisconnectingHeartRateAdapter") | 
| 217     return GetDisconnectingHeartRateAdapter(); | 232     return GetDisconnectingHeartRateAdapter(); | 
| 218   if (fake_adapter_name == "DisconnectingHealthThermometerAdapter") | 233   if (fake_adapter_name == "DisconnectingHealthThermometerAdapter") | 
| 219     return GetDisconnectingHealthThermometer(); | 234     return GetDisconnectingHealthThermometer(true); | 
|  | 235   if (fake_adapter_name == | 
|  | 236       "MissingDescriptorsDisconnectingHealthThermometerAdapter") | 
|  | 237     return GetDisconnectingHealthThermometer(false); | 
| 220   if (fake_adapter_name == "DisconnectingDuringServiceRetrievalAdapter") | 238   if (fake_adapter_name == "DisconnectingDuringServiceRetrievalAdapter") | 
| 221     return GetServicesDiscoveredAfterReconnectionAdapter(true /* disconnect */); | 239     return GetServicesDiscoveredAfterReconnectionAdapter(true /* disconnect */); | 
| 222   if (fake_adapter_name == "ServicesDiscoveredAfterReconnectionAdapter") | 240   if (fake_adapter_name == "ServicesDiscoveredAfterReconnectionAdapter") | 
| 223     return GetServicesDiscoveredAfterReconnectionAdapter( | 241     return GetServicesDiscoveredAfterReconnectionAdapter( | 
| 224         false /* disconnect */); | 242         false /* disconnect */); | 
| 225   if (fake_adapter_name == "DisconnectingDuringSuccessGATTOperationAdapter") { | 243   if (fake_adapter_name == "DisconnectingDuringSuccessGATTOperationAdapter") { | 
| 226     return GetGATTOperationFinishesAfterReconnectionAdapter( | 244     return GetGATTOperationFinishesAfterReconnectionAdapter( | 
| 227         true /* disconnect */, true /* succeeds */); | 245         true /* disconnect */, true /* succeeds */); | 
| 228   } | 246   } | 
| 229   if (fake_adapter_name == "DisconnectingDuringFailureGATTOperationAdapter") { | 247   if (fake_adapter_name == "DisconnectingDuringFailureGATTOperationAdapter") { | 
| (...skipping 442 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 672   // See: http://crbug.com/529975 | 690   // See: http://crbug.com/529975 | 
| 673 | 691 | 
| 674   device->AddMockService(GetGenericAccessService(device.get())); | 692   device->AddMockService(GetGenericAccessService(device.get())); | 
| 675   device->AddMockService(GetHeartRateService(adapter.get(), device.get())); | 693   device->AddMockService(GetHeartRateService(adapter.get(), device.get())); | 
| 676   adapter->AddMockDevice(std::move(device)); | 694   adapter->AddMockDevice(std::move(device)); | 
| 677   return adapter; | 695   return adapter; | 
| 678 } | 696 } | 
| 679 | 697 | 
| 680 // static | 698 // static | 
| 681 scoped_refptr<NiceMockBluetoothAdapter> | 699 scoped_refptr<NiceMockBluetoothAdapter> | 
| 682 LayoutTestBluetoothAdapterProvider::GetDisconnectingHealthThermometer() { | 700 LayoutTestBluetoothAdapterProvider::GetDisconnectingHealthThermometer( | 
|  | 701     bool add_descriptors) { | 
| 683   scoped_refptr<NiceMockBluetoothAdapter> adapter(GetEmptyAdapter()); | 702   scoped_refptr<NiceMockBluetoothAdapter> adapter(GetEmptyAdapter()); | 
| 684   NiceMockBluetoothAdapter* adapter_ptr = adapter.get(); | 703   NiceMockBluetoothAdapter* adapter_ptr = adapter.get(); | 
| 685 | 704 | 
| 686   auto device(GetConnectableDevice( | 705   auto device(GetConnectableDevice( | 
| 687       adapter_ptr, "Disconnecting Health Thermometer", | 706       adapter_ptr, "Disconnecting Health Thermometer", | 
| 688       std::vector<BluetoothUUID>({BluetoothUUID(kGenericAccessServiceUUID), | 707       std::vector<BluetoothUUID>({BluetoothUUID(kGenericAccessServiceUUID), | 
| 689                                   BluetoothUUID(kHealthThermometerUUID)}))); | 708                                   BluetoothUUID(kHealthThermometerUUID)}))); | 
| 690 | 709 | 
| 691   device->AddMockService(GetGenericAccessService(device.get())); | 710   device->AddMockService(GetGenericAccessService(device.get())); | 
| 692   device->AddMockService(GetDisconnectingService(adapter.get(), device.get())); | 711   device->AddMockService(GetDisconnectingService(adapter.get(), device.get())); | 
| (...skipping 24 matching lines...) Expand all  Loading... | 
| 717 | 736 | 
| 718   ON_CALL(*measurement_interval, WriteRemoteCharacteristic(_, _, _)) | 737   ON_CALL(*measurement_interval, WriteRemoteCharacteristic(_, _, _)) | 
| 719       .WillByDefault(RunCallback<1 /* success_callback */>()); | 738       .WillByDefault(RunCallback<1 /* success_callback */>()); | 
| 720 | 739 | 
| 721   ON_CALL(*measurement_interval, StartNotifySession(_, _)) | 740   ON_CALL(*measurement_interval, StartNotifySession(_, _)) | 
| 722       .WillByDefault( | 741       .WillByDefault( | 
| 723           RunCallbackWithResult<0 /* success_callback */>([measurement_ptr]() { | 742           RunCallbackWithResult<0 /* success_callback */>([measurement_ptr]() { | 
| 724             return GetBaseGATTNotifySession(measurement_ptr->GetWeakPtr()); | 743             return GetBaseGATTNotifySession(measurement_ptr->GetWeakPtr()); | 
| 725           })); | 744           })); | 
| 726 | 745 | 
| 727   auto user_description = base::MakeUnique<NiceMockBluetoothGattDescriptor>( | 746   if (add_descriptors) { | 
| 728       measurement_interval.get(), "gatt.characteristic_user_description", | 747     const std::string descriptorName = kCharacteristicUserDescription; | 
| 729       BluetoothUUID(kUserDescriptionUUID), false, | 748     auto user_description = base::MakeUnique<NiceMockBluetoothGattDescriptor>( | 
| 730       device::BluetoothRemoteGattCharacteristic::PROPERTY_READ); | 749         measurement_interval.get(), descriptorName, | 
|  | 750         BluetoothUUID(kUserDescriptionUUID), false /* is_local */, | 
|  | 751         device::BluetoothRemoteGattCharacteristic::PROPERTY_READ); | 
| 731 | 752 | 
| 732   auto client_config = base::MakeUnique<NiceMockBluetoothGattDescriptor>( | 753     ON_CALL(*user_description, ReadRemoteDescriptor(_, _)) | 
| 733       measurement_interval.get(), "gatt.client_characteristic_configuration", | 754         .WillByDefault(Invoke([descriptorName]( | 
| 734       BluetoothUUID(kClientConfigUUID), false, | 755             const BluetoothRemoteGattDescriptor::ValueCallback& callback, | 
| 735       device::BluetoothRemoteGattCharacteristic::PROPERTY_READ | | 756             const BluetoothRemoteGattDescriptor::ErrorCallback&) { | 
| 736           device::BluetoothRemoteGattCharacteristic::PROPERTY_WRITE); | 757           std::vector<uint8_t> value(descriptorName.begin(), | 
|  | 758                                      descriptorName.end()); | 
|  | 759           callback.Run(value); | 
|  | 760         })); | 
| 737 | 761 | 
| 738   // Add it here with full permission as the blocklist should prevent us from | 762     auto client_config = base::MakeUnique<NiceMockBluetoothGattDescriptor>( | 
| 739   // accessing this descriptor | 763         measurement_interval.get(), "gatt.client_characteristic_configuration", | 
| 740   auto blocklisted_descriptor = | 764         BluetoothUUID(kClientConfigUUID), false /* is_local */, | 
| 741       base::MakeUnique<NiceMockBluetoothGattDescriptor>( | 765         device::BluetoothRemoteGattCharacteristic::PROPERTY_READ | | 
| 742           measurement_interval.get(), "bad2ddcf-60db-45cd-bef9-fd72b153cf7c", | 766             device::BluetoothRemoteGattCharacteristic::PROPERTY_WRITE); | 
| 743           BluetoothUUID(kBlocklistedDescriptorUUID), false, |  | 
| 744           device::BluetoothRemoteGattCharacteristic::PROPERTY_READ | |  | 
| 745               device::BluetoothRemoteGattCharacteristic::PROPERTY_WRITE); |  | 
| 746 | 767 | 
| 747   measurement_interval->AddMockDescriptor(std::move(user_description)); | 768     auto no_read_descriptor = base::MakeUnique<NiceMockBluetoothGattDescriptor>( | 
| 748   measurement_interval->AddMockDescriptor(std::move(client_config)); | 769         measurement_interval.get(), kBlocklistedReadDescriptorUUID, | 
| 749   measurement_interval->AddMockDescriptor(std::move(blocklisted_descriptor)); | 770         BluetoothUUID(kBlocklistedReadDescriptorUUID), false, | 
|  | 771         device::BluetoothRemoteGattCharacteristic::PROPERTY_READ | | 
|  | 772             device::BluetoothRemoteGattCharacteristic::PROPERTY_WRITE); | 
| 750 | 773 | 
|  | 774     std::vector<uint8_t> value(1); | 
|  | 775     value[0] = false; | 
|  | 776 | 
|  | 777     // Crash if ReadRemoteDescriptor called. Not using GoogleMock's Expect | 
|  | 778     // because this is used in layout tests that may not report a mock | 
|  | 779     // expectation | 
|  | 780     // error correctly as a layout test failure. | 
|  | 781     ON_CALL(*no_read_descriptor, ReadRemoteDescriptor(_, _)) | 
|  | 782         .WillByDefault( | 
|  | 783             Invoke([](const BluetoothRemoteGattDescriptor::ValueCallback&, | 
|  | 784                       const BluetoothRemoteGattDescriptor::ErrorCallback&) { | 
|  | 785               NOTREACHED(); | 
|  | 786             })); | 
|  | 787 | 
|  | 788     // Add it here with full permission as the blocklist should prevent us from | 
|  | 789     // accessing this descriptor | 
|  | 790     auto blocklisted_descriptor = | 
|  | 791         base::MakeUnique<NiceMockBluetoothGattDescriptor>( | 
|  | 792             measurement_interval.get(), kBlocklistedDescriptorUUID, | 
|  | 793             BluetoothUUID(kBlocklistedDescriptorUUID), false, | 
|  | 794             device::BluetoothRemoteGattCharacteristic::PROPERTY_READ | | 
|  | 795                 device::BluetoothRemoteGattCharacteristic::PROPERTY_WRITE); | 
|  | 796 | 
|  | 797     measurement_interval->AddMockDescriptor(std::move(user_description)); | 
|  | 798     measurement_interval->AddMockDescriptor(std::move(client_config)); | 
|  | 799     measurement_interval->AddMockDescriptor(std::move(blocklisted_descriptor)); | 
|  | 800     measurement_interval->AddMockDescriptor(std::move(no_read_descriptor)); | 
|  | 801   } | 
| 751   health_thermometer->AddMockCharacteristic(std::move(measurement_interval)); | 802   health_thermometer->AddMockCharacteristic(std::move(measurement_interval)); | 
| 752   device->AddMockService(std::move(health_thermometer)); | 803   device->AddMockService(std::move(health_thermometer)); | 
| 753 | 804 | 
| 754   adapter->AddMockDevice(std::move(device)); | 805   adapter->AddMockDevice(std::move(device)); | 
| 755 | 806 | 
| 756   return adapter; | 807   return adapter; | 
| 757 } | 808 } | 
| 758 | 809 | 
| 759 // static | 810 // static | 
| 760 scoped_refptr<NiceMockBluetoothAdapter> | 811 scoped_refptr<NiceMockBluetoothAdapter> | 
| (...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 980       measurement_interval.get(); | 1031       measurement_interval.get(); | 
| 981 | 1032 | 
| 982   ON_CALL(*measurement_interval, ReadRemoteCharacteristic(_, _)) | 1033   ON_CALL(*measurement_interval, ReadRemoteCharacteristic(_, _)) | 
| 983       .WillByDefault(Invoke([adapter_ptr, device_ptr, measurement_ptr, | 1034       .WillByDefault(Invoke([adapter_ptr, device_ptr, measurement_ptr, | 
| 984                              disconnect, succeeds]( | 1035                              disconnect, succeeds]( | 
| 985           const BluetoothRemoteGattCharacteristic::ValueCallback& callback, | 1036           const BluetoothRemoteGattCharacteristic::ValueCallback& callback, | 
| 986           const BluetoothRemoteGattCharacteristic::ErrorCallback& | 1037           const BluetoothRemoteGattCharacteristic::ErrorCallback& | 
| 987               error_callback) { | 1038               error_callback) { | 
| 988         base::Closure pending; | 1039         base::Closure pending; | 
| 989         if (succeeds) { | 1040         if (succeeds) { | 
| 990           pending = | 1041           pending = base::Bind(&PerformCharacteristicReadValue, | 
| 991               base::Bind(&PerformReadValue, base::RetainedRef(adapter_ptr), | 1042                                base::RetainedRef(adapter_ptr), measurement_ptr, | 
| 992                          measurement_ptr, callback, std::vector<uint8_t>({1})); | 1043                                callback, std::vector<uint8_t>({1})); | 
| 993         } else { | 1044         } else { | 
| 994           pending = base::Bind(error_callback, | 1045           pending = base::Bind(error_callback, | 
| 995                                BluetoothRemoteGattService::GATT_ERROR_FAILED); | 1046                                BluetoothRemoteGattService::GATT_ERROR_FAILED); | 
| 996         } | 1047         } | 
| 997         device_ptr->PushPendingCallback(pending); | 1048         device_ptr->PushPendingCallback(pending); | 
| 998         if (disconnect) { | 1049         if (disconnect) { | 
| 999           device_ptr->SetConnected(false); | 1050           device_ptr->SetConnected(false); | 
| 1000           base::ThreadTaskRunnerHandle::Get()->PostTask( | 1051           base::ThreadTaskRunnerHandle::Get()->PostTask( | 
| 1001               FROM_HERE, | 1052               FROM_HERE, | 
| 1002               base::Bind(&NotifyDeviceChanged, base::RetainedRef(adapter_ptr), | 1053               base::Bind(&NotifyDeviceChanged, base::RetainedRef(adapter_ptr), | 
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1044         device_ptr->PushPendingCallback(pending); | 1095         device_ptr->PushPendingCallback(pending); | 
| 1045         if (disconnect) { | 1096         if (disconnect) { | 
| 1046           device_ptr->SetConnected(false); | 1097           device_ptr->SetConnected(false); | 
| 1047           base::ThreadTaskRunnerHandle::Get()->PostTask( | 1098           base::ThreadTaskRunnerHandle::Get()->PostTask( | 
| 1048               FROM_HERE, | 1099               FROM_HERE, | 
| 1049               base::Bind(&NotifyDeviceChanged, base::RetainedRef(adapter_ptr), | 1100               base::Bind(&NotifyDeviceChanged, base::RetainedRef(adapter_ptr), | 
| 1050                          device_ptr)); | 1101                          device_ptr)); | 
| 1051         } | 1102         } | 
| 1052       })); | 1103       })); | 
| 1053 | 1104 | 
|  | 1105   auto user_descriptor = base::MakeUnique<NiceMockBluetoothGattDescriptor>( | 
|  | 1106       measurement_interval.get(), kCharacteristicUserDescription, | 
|  | 1107       BluetoothUUID(kUserDescriptionUUID), false, | 
|  | 1108       device::BluetoothRemoteGattCharacteristic::PROPERTY_READ); | 
|  | 1109 | 
|  | 1110   NiceMockBluetoothGattDescriptor* user_descriptor_ptr = user_descriptor.get(); | 
|  | 1111   ON_CALL(*user_descriptor, ReadRemoteDescriptor(_, _)) | 
|  | 1112       .WillByDefault(Invoke([adapter_ptr, device_ptr, user_descriptor_ptr, | 
|  | 1113                              disconnect, succeeds]( | 
|  | 1114           const BluetoothRemoteGattDescriptor::ValueCallback& callback, | 
|  | 1115           const BluetoothRemoteGattDescriptor::ErrorCallback& error_callback) { | 
|  | 1116         base::Closure pending; | 
|  | 1117         if (succeeds) { | 
|  | 1118           pending = base::Bind( | 
|  | 1119               &PerformDescriptorReadValue, base::RetainedRef(adapter_ptr), | 
|  | 1120               user_descriptor_ptr, callback, std::vector<uint8_t>({1})); | 
|  | 1121         } else { | 
|  | 1122           pending = base::Bind(error_callback, | 
|  | 1123                                BluetoothRemoteGattService::GATT_ERROR_FAILED); | 
|  | 1124         } | 
|  | 1125         device_ptr->PushPendingCallback(pending); | 
|  | 1126         if (disconnect) { | 
|  | 1127           device_ptr->SetConnected(false); | 
|  | 1128           base::ThreadTaskRunnerHandle::Get()->PostTask( | 
|  | 1129               FROM_HERE, | 
|  | 1130               base::Bind(&NotifyDeviceChanged, base::RetainedRef(adapter_ptr), | 
|  | 1131                          device_ptr)); | 
|  | 1132         } | 
|  | 1133       })); | 
|  | 1134 | 
|  | 1135   measurement_interval->AddMockDescriptor(std::move(user_descriptor)); | 
|  | 1136 | 
| 1054   health_thermometer->AddMockCharacteristic(std::move(measurement_interval)); | 1137   health_thermometer->AddMockCharacteristic(std::move(measurement_interval)); | 
| 1055   device->AddMockService(std::move(health_thermometer)); | 1138   device->AddMockService(std::move(health_thermometer)); | 
| 1056   adapter->AddMockDevice(std::move(device)); | 1139   adapter->AddMockDevice(std::move(device)); | 
| 1057   return adapter; | 1140   return adapter; | 
| 1058 } | 1141 } | 
| 1059 | 1142 | 
| 1060 // static | 1143 // static | 
| 1061 scoped_refptr<NiceMockBluetoothAdapter> LayoutTestBluetoothAdapterProvider:: | 1144 scoped_refptr<NiceMockBluetoothAdapter> LayoutTestBluetoothAdapterProvider:: | 
| 1062     GetStopNotifySessionFinishesAfterReconnectionAdapter(bool disconnect) { | 1145     GetStopNotifySessionFinishesAfterReconnectionAdapter(bool disconnect) { | 
| 1063   scoped_refptr<NiceMockBluetoothAdapter> adapter(GetEmptyAdapter()); | 1146   scoped_refptr<NiceMockBluetoothAdapter> adapter(GetEmptyAdapter()); | 
| (...skipping 568 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1632       .WillByDefault(RunCallback<1 /* error_callback */>(error_code)); | 1715       .WillByDefault(RunCallback<1 /* error_callback */>(error_code)); | 
| 1633 | 1716 | 
| 1634   // Write response. | 1717   // Write response. | 
| 1635   ON_CALL(*characteristic, WriteRemoteCharacteristic(_, _, _)) | 1718   ON_CALL(*characteristic, WriteRemoteCharacteristic(_, _, _)) | 
| 1636       .WillByDefault(RunCallback<2 /* error_callback */>(error_code)); | 1719       .WillByDefault(RunCallback<2 /* error_callback */>(error_code)); | 
| 1637 | 1720 | 
| 1638   // StartNotifySession response | 1721   // StartNotifySession response | 
| 1639   ON_CALL(*characteristic, StartNotifySession(_, _)) | 1722   ON_CALL(*characteristic, StartNotifySession(_, _)) | 
| 1640       .WillByDefault(RunCallback<1 /* error_callback */>(error_code)); | 1723       .WillByDefault(RunCallback<1 /* error_callback */>(error_code)); | 
| 1641 | 1724 | 
|  | 1725   // Add error descriptor to |characteristic| | 
|  | 1726   auto error_descriptor = base::MakeUnique<NiceMockBluetoothGattDescriptor>( | 
|  | 1727       characteristic.get(), kCharacteristicUserDescription, | 
|  | 1728       BluetoothUUID(kUserDescriptionUUID), false, | 
|  | 1729       device::BluetoothRemoteGattCharacteristic::PROPERTY_READ); | 
|  | 1730 | 
|  | 1731   ON_CALL(*error_descriptor, ReadRemoteDescriptor(_, _)) | 
|  | 1732       .WillByDefault(RunCallback<1 /* error_callback */>(error_code)); | 
|  | 1733 | 
|  | 1734   characteristic->AddMockDescriptor(std::move(error_descriptor)); | 
|  | 1735 | 
| 1642   return characteristic; | 1736   return characteristic; | 
| 1643 } | 1737 } | 
| 1644 | 1738 | 
| 1645 // Notify sessions | 1739 // Notify sessions | 
| 1646 | 1740 | 
| 1647 // static | 1741 // static | 
| 1648 std::unique_ptr<NiceMockBluetoothGattNotifySession> | 1742 std::unique_ptr<NiceMockBluetoothGattNotifySession> | 
| 1649 LayoutTestBluetoothAdapterProvider::GetBaseGATTNotifySession( | 1743 LayoutTestBluetoothAdapterProvider::GetBaseGATTNotifySession( | 
| 1650     base::WeakPtr<device::BluetoothRemoteGattCharacteristic> characteristic) { | 1744     base::WeakPtr<device::BluetoothRemoteGattCharacteristic> characteristic) { | 
| 1651   auto session = | 1745   auto session = | 
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1712   NOTREACHED(); | 1806   NOTREACHED(); | 
| 1713   return BluetoothUUID(); | 1807   return BluetoothUUID(); | 
| 1714 } | 1808 } | 
| 1715 | 1809 | 
| 1716 // static | 1810 // static | 
| 1717 std::string LayoutTestBluetoothAdapterProvider::makeMACAddress(uint64_t addr) { | 1811 std::string LayoutTestBluetoothAdapterProvider::makeMACAddress(uint64_t addr) { | 
| 1718   return BluetoothDevice::CanonicalizeAddress( | 1812   return BluetoothDevice::CanonicalizeAddress( | 
| 1719       base::StringPrintf("%012" PRIx64, addr)); | 1813       base::StringPrintf("%012" PRIx64, addr)); | 
| 1720 } | 1814 } | 
| 1721 | 1815 | 
| 1722 }  // namespace content | 1816 }  // namespace content | 
| OLD | NEW | 
|---|