 Chromium Code Reviews
 Chromium Code Reviews Issue 2637343002:
  Implement WebBluetooth descriptor.readValue()  (Closed)
    
  
    Issue 2637343002:
  Implement WebBluetooth descriptor.readValue()  (Closed) 
  | 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 ON_CALL(*no_read_descriptor, ReadRemoteDescriptor(_, _)) | |
| 
ortuno
2017/01/23 22:20:42
// Crash if ReadRemoteDescriptor called. Not using
 
dougt
2017/01/24 00:26:24
Done.
 | |
| 778 .WillByDefault(RunCallback<0>(value)); | |
| 779 | |
| 780 // Add it here with full permission as the blocklist should prevent us from | |
| 781 // accessing this descriptor | |
| 782 auto blocklisted_descriptor = | |
| 783 base::MakeUnique<NiceMockBluetoothGattDescriptor>( | |
| 784 measurement_interval.get(), kBlocklistedDescriptorUUID, | |
| 785 BluetoothUUID(kBlocklistedDescriptorUUID), false, | |
| 786 device::BluetoothRemoteGattCharacteristic::PROPERTY_READ | | |
| 787 device::BluetoothRemoteGattCharacteristic::PROPERTY_WRITE); | |
| 788 | |
| 789 measurement_interval->AddMockDescriptor(std::move(user_description)); | |
| 790 measurement_interval->AddMockDescriptor(std::move(client_config)); | |
| 791 measurement_interval->AddMockDescriptor(std::move(blocklisted_descriptor)); | |
| 792 measurement_interval->AddMockDescriptor(std::move(no_read_descriptor)); | |
| 793 } | |
| 751 health_thermometer->AddMockCharacteristic(std::move(measurement_interval)); | 794 health_thermometer->AddMockCharacteristic(std::move(measurement_interval)); | 
| 752 device->AddMockService(std::move(health_thermometer)); | 795 device->AddMockService(std::move(health_thermometer)); | 
| 753 | 796 | 
| 754 adapter->AddMockDevice(std::move(device)); | 797 adapter->AddMockDevice(std::move(device)); | 
| 755 | 798 | 
| 756 return adapter; | 799 return adapter; | 
| 757 } | 800 } | 
| 758 | 801 | 
| 759 // static | 802 // static | 
| 760 scoped_refptr<NiceMockBluetoothAdapter> | 803 scoped_refptr<NiceMockBluetoothAdapter> | 
| (...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 980 measurement_interval.get(); | 1023 measurement_interval.get(); | 
| 981 | 1024 | 
| 982 ON_CALL(*measurement_interval, ReadRemoteCharacteristic(_, _)) | 1025 ON_CALL(*measurement_interval, ReadRemoteCharacteristic(_, _)) | 
| 983 .WillByDefault(Invoke([adapter_ptr, device_ptr, measurement_ptr, | 1026 .WillByDefault(Invoke([adapter_ptr, device_ptr, measurement_ptr, | 
| 984 disconnect, succeeds]( | 1027 disconnect, succeeds]( | 
| 985 const BluetoothRemoteGattCharacteristic::ValueCallback& callback, | 1028 const BluetoothRemoteGattCharacteristic::ValueCallback& callback, | 
| 986 const BluetoothRemoteGattCharacteristic::ErrorCallback& | 1029 const BluetoothRemoteGattCharacteristic::ErrorCallback& | 
| 987 error_callback) { | 1030 error_callback) { | 
| 988 base::Closure pending; | 1031 base::Closure pending; | 
| 989 if (succeeds) { | 1032 if (succeeds) { | 
| 990 pending = | 1033 pending = base::Bind(&PerformCharacteristicReadValue, | 
| 991 base::Bind(&PerformReadValue, base::RetainedRef(adapter_ptr), | 1034 base::RetainedRef(adapter_ptr), measurement_ptr, | 
| 992 measurement_ptr, callback, std::vector<uint8_t>({1})); | 1035 callback, std::vector<uint8_t>({1})); | 
| 993 } else { | 1036 } else { | 
| 994 pending = base::Bind(error_callback, | 1037 pending = base::Bind(error_callback, | 
| 995 BluetoothRemoteGattService::GATT_ERROR_FAILED); | 1038 BluetoothRemoteGattService::GATT_ERROR_FAILED); | 
| 996 } | 1039 } | 
| 997 device_ptr->PushPendingCallback(pending); | 1040 device_ptr->PushPendingCallback(pending); | 
| 998 if (disconnect) { | 1041 if (disconnect) { | 
| 999 device_ptr->SetConnected(false); | 1042 device_ptr->SetConnected(false); | 
| 1000 base::ThreadTaskRunnerHandle::Get()->PostTask( | 1043 base::ThreadTaskRunnerHandle::Get()->PostTask( | 
| 1001 FROM_HERE, | 1044 FROM_HERE, | 
| 1002 base::Bind(&NotifyDeviceChanged, base::RetainedRef(adapter_ptr), | 1045 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); | 1087 device_ptr->PushPendingCallback(pending); | 
| 1045 if (disconnect) { | 1088 if (disconnect) { | 
| 1046 device_ptr->SetConnected(false); | 1089 device_ptr->SetConnected(false); | 
| 1047 base::ThreadTaskRunnerHandle::Get()->PostTask( | 1090 base::ThreadTaskRunnerHandle::Get()->PostTask( | 
| 1048 FROM_HERE, | 1091 FROM_HERE, | 
| 1049 base::Bind(&NotifyDeviceChanged, base::RetainedRef(adapter_ptr), | 1092 base::Bind(&NotifyDeviceChanged, base::RetainedRef(adapter_ptr), | 
| 1050 device_ptr)); | 1093 device_ptr)); | 
| 1051 } | 1094 } | 
| 1052 })); | 1095 })); | 
| 1053 | 1096 | 
| 1097 auto user_descriptor = base::MakeUnique<NiceMockBluetoothGattDescriptor>( | |
| 1098 measurement_interval.get(), kCharacteristicUserDescription, | |
| 1099 BluetoothUUID(kUserDescriptionUUID), false, | |
| 1100 device::BluetoothRemoteGattCharacteristic::PROPERTY_READ); | |
| 1101 | |
| 1102 NiceMockBluetoothGattDescriptor* user_descriptor_ptr = user_descriptor.get(); | |
| 1103 ON_CALL(*user_descriptor, ReadRemoteDescriptor(_, _)) | |
| 1104 .WillByDefault(Invoke([adapter_ptr, device_ptr, user_descriptor_ptr, | |
| 1105 disconnect, succeeds]( | |
| 1106 const BluetoothRemoteGattDescriptor::ValueCallback& callback, | |
| 1107 const BluetoothRemoteGattDescriptor::ErrorCallback& error_callback) { | |
| 1108 base::Closure pending; | |
| 1109 if (succeeds) { | |
| 1110 pending = base::Bind( | |
| 1111 &PerformDescriptorReadValue, base::RetainedRef(adapter_ptr), | |
| 1112 user_descriptor_ptr, callback, std::vector<uint8_t>({1})); | |
| 1113 } else { | |
| 1114 pending = base::Bind(error_callback, | |
| 1115 BluetoothRemoteGattService::GATT_ERROR_FAILED); | |
| 1116 } | |
| 1117 device_ptr->PushPendingCallback(pending); | |
| 1118 if (disconnect) { | |
| 1119 device_ptr->SetConnected(false); | |
| 1120 base::ThreadTaskRunnerHandle::Get()->PostTask( | |
| 1121 FROM_HERE, | |
| 1122 base::Bind(&NotifyDeviceChanged, base::RetainedRef(adapter_ptr), | |
| 1123 device_ptr)); | |
| 1124 } | |
| 1125 })); | |
| 1126 | |
| 1127 measurement_interval->AddMockDescriptor(std::move(user_descriptor)); | |
| 1128 | |
| 1054 health_thermometer->AddMockCharacteristic(std::move(measurement_interval)); | 1129 health_thermometer->AddMockCharacteristic(std::move(measurement_interval)); | 
| 1055 device->AddMockService(std::move(health_thermometer)); | 1130 device->AddMockService(std::move(health_thermometer)); | 
| 1056 adapter->AddMockDevice(std::move(device)); | 1131 adapter->AddMockDevice(std::move(device)); | 
| 1057 return adapter; | 1132 return adapter; | 
| 1058 } | 1133 } | 
| 1059 | 1134 | 
| 1060 // static | 1135 // static | 
| 1061 scoped_refptr<NiceMockBluetoothAdapter> LayoutTestBluetoothAdapterProvider:: | 1136 scoped_refptr<NiceMockBluetoothAdapter> LayoutTestBluetoothAdapterProvider:: | 
| 1062 GetStopNotifySessionFinishesAfterReconnectionAdapter(bool disconnect) { | 1137 GetStopNotifySessionFinishesAfterReconnectionAdapter(bool disconnect) { | 
| 1063 scoped_refptr<NiceMockBluetoothAdapter> adapter(GetEmptyAdapter()); | 1138 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)); | 1707 .WillByDefault(RunCallback<1 /* error_callback */>(error_code)); | 
| 1633 | 1708 | 
| 1634 // Write response. | 1709 // Write response. | 
| 1635 ON_CALL(*characteristic, WriteRemoteCharacteristic(_, _, _)) | 1710 ON_CALL(*characteristic, WriteRemoteCharacteristic(_, _, _)) | 
| 1636 .WillByDefault(RunCallback<2 /* error_callback */>(error_code)); | 1711 .WillByDefault(RunCallback<2 /* error_callback */>(error_code)); | 
| 1637 | 1712 | 
| 1638 // StartNotifySession response | 1713 // StartNotifySession response | 
| 1639 ON_CALL(*characteristic, StartNotifySession(_, _)) | 1714 ON_CALL(*characteristic, StartNotifySession(_, _)) | 
| 1640 .WillByDefault(RunCallback<1 /* error_callback */>(error_code)); | 1715 .WillByDefault(RunCallback<1 /* error_callback */>(error_code)); | 
| 1641 | 1716 | 
| 1717 // Add error descriptor to |characteristic| | |
| 1718 auto error_descriptor = base::MakeUnique<NiceMockBluetoothGattDescriptor>( | |
| 1719 characteristic.get(), kCharacteristicUserDescription, | |
| 1720 BluetoothUUID(kUserDescriptionUUID), false, | |
| 1721 device::BluetoothRemoteGattCharacteristic::PROPERTY_READ); | |
| 1722 | |
| 1723 ON_CALL(*error_descriptor, ReadRemoteDescriptor(_, _)) | |
| 1724 .WillByDefault(RunCallback<1 /* error_callback */>(error_code)); | |
| 1725 | |
| 1726 characteristic->AddMockDescriptor(std::move(error_descriptor)); | |
| 1727 | |
| 1642 return characteristic; | 1728 return characteristic; | 
| 1643 } | 1729 } | 
| 1644 | 1730 | 
| 1645 // Notify sessions | 1731 // Notify sessions | 
| 1646 | 1732 | 
| 1647 // static | 1733 // static | 
| 1648 std::unique_ptr<NiceMockBluetoothGattNotifySession> | 1734 std::unique_ptr<NiceMockBluetoothGattNotifySession> | 
| 1649 LayoutTestBluetoothAdapterProvider::GetBaseGATTNotifySession( | 1735 LayoutTestBluetoothAdapterProvider::GetBaseGATTNotifySession( | 
| 1650 base::WeakPtr<device::BluetoothRemoteGattCharacteristic> characteristic) { | 1736 base::WeakPtr<device::BluetoothRemoteGattCharacteristic> characteristic) { | 
| 1651 auto session = | 1737 auto session = | 
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1712 NOTREACHED(); | 1798 NOTREACHED(); | 
| 1713 return BluetoothUUID(); | 1799 return BluetoothUUID(); | 
| 1714 } | 1800 } | 
| 1715 | 1801 | 
| 1716 // static | 1802 // static | 
| 1717 std::string LayoutTestBluetoothAdapterProvider::makeMACAddress(uint64_t addr) { | 1803 std::string LayoutTestBluetoothAdapterProvider::makeMACAddress(uint64_t addr) { | 
| 1718 return BluetoothDevice::CanonicalizeAddress( | 1804 return BluetoothDevice::CanonicalizeAddress( | 
| 1719 base::StringPrintf("%012" PRIx64, addr)); | 1805 base::StringPrintf("%012" PRIx64, addr)); | 
| 1720 } | 1806 } | 
| 1721 | 1807 | 
| 1722 } // namespace content | 1808 } // namespace content | 
| OLD | NEW |