Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(474)

Side by Side Diff: content/shell/browser/layout_test/layout_test_bluetooth_adapter_provider.cc

Issue 2637343002: Implement WebBluetooth descriptor.readValue() (Closed)
Patch Set: #4 Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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>(
dcheng 2017/01/24 10:21:02 FWIW, I think this would be more clearly written w
dougt 2017/01/24 16:14:29 I agree. There is a plan to move these tests to We
scheib 2017/01/24 17:43:57 I've been happy with GMOCK, it's much less code to
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698