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 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
123 return result; | 123 return result; |
124 } | 124 } |
125 | 125 |
126 // Notifies the adapter's observers that the services have been discovered. | 126 // Notifies the adapter's observers that the services have been discovered. |
127 void NotifyServicesDiscovered(MockBluetoothAdapter* adapter, | 127 void NotifyServicesDiscovered(MockBluetoothAdapter* adapter, |
128 MockBluetoothDevice* device) { | 128 MockBluetoothDevice* device) { |
129 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, adapter->GetObservers(), | 129 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, adapter->GetObservers(), |
130 GattServicesDiscovered(adapter, device)); | 130 GattServicesDiscovered(adapter, device)); |
131 } | 131 } |
132 | 132 |
133 // Notifies the adapter's observers that a device has changed. | |
134 void NotifyDeviceChanged(MockBluetoothAdapter* adapter, | |
135 MockBluetoothDevice* device) { | |
136 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, adapter->GetObservers(), | |
137 DeviceChanged(adapter, device)); | |
138 } | |
139 | |
133 } // namespace | 140 } // namespace |
134 | 141 |
135 namespace content { | 142 namespace content { |
136 | 143 |
137 // static | 144 // static |
138 scoped_refptr<BluetoothAdapter> | 145 scoped_refptr<BluetoothAdapter> |
139 LayoutTestBluetoothAdapterProvider::GetBluetoothAdapter( | 146 LayoutTestBluetoothAdapterProvider::GetBluetoothAdapter( |
140 const std::string& fake_adapter_name) { | 147 const std::string& fake_adapter_name) { |
141 if (fake_adapter_name == "BaseAdapter") | 148 if (fake_adapter_name == "BaseAdapter") |
142 return GetBaseAdapter(); | 149 return GetBaseAdapter(); |
(...skipping 14 matching lines...) Expand all Loading... | |
157 if (fake_adapter_name == "MissingServiceHeartRateAdapter") | 164 if (fake_adapter_name == "MissingServiceHeartRateAdapter") |
158 return GetMissingServiceHeartRateAdapter(); | 165 return GetMissingServiceHeartRateAdapter(); |
159 if (fake_adapter_name == "MissingCharacteristicHeartRateAdapter") | 166 if (fake_adapter_name == "MissingCharacteristicHeartRateAdapter") |
160 return GetMissingCharacteristicHeartRateAdapter(); | 167 return GetMissingCharacteristicHeartRateAdapter(); |
161 if (fake_adapter_name == "HeartRateAdapter") | 168 if (fake_adapter_name == "HeartRateAdapter") |
162 return GetHeartRateAdapter(); | 169 return GetHeartRateAdapter(); |
163 if (fake_adapter_name == "TwoHeartRateServicesAdapter") | 170 if (fake_adapter_name == "TwoHeartRateServicesAdapter") |
164 return GetTwoHeartRateServicesAdapter(); | 171 return GetTwoHeartRateServicesAdapter(); |
165 if (fake_adapter_name == "DisconnectingHeartRateAdapter") | 172 if (fake_adapter_name == "DisconnectingHeartRateAdapter") |
166 return GetDisconnectingHeartRateAdapter(); | 173 return GetDisconnectingHeartRateAdapter(); |
174 if (fake_adapter_name == "DisconnectingDuringServiceRetrievalAdapter") | |
175 return GetServicesDiscoveredAfterReconnectionAdapter(true /* disconnect */); | |
176 if (fake_adapter_name == "ServicesDiscoveredAfterReconnectionAdapter") | |
177 return GetServicesDiscoveredAfterReconnectionAdapter( | |
178 false /* disconnect */); | |
167 if (fake_adapter_name == "BlacklistTestAdapter") | 179 if (fake_adapter_name == "BlacklistTestAdapter") |
168 return GetBlacklistTestAdapter(); | 180 return GetBlacklistTestAdapter(); |
169 if (fake_adapter_name == "FailingConnectionsAdapter") | 181 if (fake_adapter_name == "FailingConnectionsAdapter") |
170 return GetFailingConnectionsAdapter(); | 182 return GetFailingConnectionsAdapter(); |
171 if (fake_adapter_name == "FailingGATTOperationsAdapter") | 183 if (fake_adapter_name == "FailingGATTOperationsAdapter") |
172 return GetFailingGATTOperationsAdapter(); | 184 return GetFailingGATTOperationsAdapter(); |
173 if (fake_adapter_name == "SecondDiscoveryFindsHeartRateAdapter") | 185 if (fake_adapter_name == "SecondDiscoveryFindsHeartRateAdapter") |
174 return GetSecondDiscoveryFindsHeartRateAdapter(); | 186 return GetSecondDiscoveryFindsHeartRateAdapter(); |
175 if (fake_adapter_name == "DelayedServicesDiscoveryAdapter") | 187 if (fake_adapter_name == "DelayedServicesDiscoveryAdapter") |
176 return GetDelayedServicesDiscoveryAdapter(); | 188 return GetDelayedServicesDiscoveryAdapter(); |
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
530 | 542 |
531 disconnection_service->AddMockCharacteristic( | 543 disconnection_service->AddMockCharacteristic( |
532 std::move(disconnection_characteristic)); | 544 std::move(disconnection_characteristic)); |
533 device->AddMockService(std::move(disconnection_service)); | 545 device->AddMockService(std::move(disconnection_service)); |
534 adapter->AddMockDevice(std::move(device)); | 546 adapter->AddMockDevice(std::move(device)); |
535 | 547 |
536 return adapter; | 548 return adapter; |
537 } | 549 } |
538 | 550 |
539 // static | 551 // static |
552 scoped_refptr<NiceMockBluetoothAdapter> LayoutTestBluetoothAdapterProvider:: | |
553 GetServicesDiscoveredAfterReconnectionAdapter(bool disconnect) { | |
554 scoped_refptr<NiceMockBluetoothAdapter> adapter(GetEmptyAdapter()); | |
555 NiceMockBluetoothAdapter* adapter_ptr = adapter.get(); | |
556 std::unique_ptr<NiceMockBluetoothDevice> device( | |
557 GetHeartRateDevice(adapter.get())); | |
558 NiceMockBluetoothDevice* device_ptr = device.get(); | |
559 | |
560 // When called before IsGattDiscoveryComplete, run success callback with a new | |
561 // Gatt connection. When called after after IsGattDiscoveryComplete runs | |
562 // success callback with a new Gatt connection and notifies of services | |
563 // discovered. | |
564 ON_CALL(*device, CreateGattConnection(_, _)) | |
565 .WillByDefault(RunCallbackWithResult<0 /* success_callback */>( | |
566 [adapter_ptr, device_ptr]() { | |
567 std::vector<BluetoothRemoteGattService*> services = | |
568 device_ptr->GetMockServices(); | |
569 | |
570 if (services.size() != 0) { | |
571 base::ThreadTaskRunnerHandle::Get()->PostTask( | |
572 FROM_HERE, | |
573 base::Bind(&NotifyServicesDiscovered, | |
574 base::RetainedRef(adapter_ptr), device_ptr)); | |
575 } | |
576 | |
577 return base::MakeUnique<NiceMockBluetoothGattConnection>( | |
578 adapter_ptr, device_ptr->GetAddress()); | |
579 })); | |
580 | |
581 // The first time this function is called we: | |
582 // 1. Add a service (This indicates that this function has been called) | |
583 // 2. Disconnect the device. | |
Jeffrey Yasskin
2016/07/29 18:17:24
*If |disconnect| is true,
ortuno
2016/07/29 19:06:14
Done.
| |
584 // 3. Return false. | |
585 // The second time this function is called we just return true. | |
586 ON_CALL(*device, IsGattServicesDiscoveryComplete()) | |
587 .WillByDefault(Invoke([adapter_ptr, device_ptr, disconnect] { | |
588 std::vector<BluetoothRemoteGattService*> services = | |
589 device_ptr->GetMockServices(); | |
590 if (services.size() == 0) { | |
591 std::unique_ptr<NiceMockBluetoothGattService> heart_rate( | |
592 GetBaseGATTService("Heart Rate", device_ptr, | |
593 kHeartRateServiceUUID)); | |
594 | |
595 device_ptr->AddMockService(GetGenericAccessService(device_ptr)); | |
596 device_ptr->AddMockService( | |
597 GetHeartRateService(adapter_ptr, device_ptr)); | |
598 | |
599 if (disconnect) { | |
600 device_ptr->SetConnected(false); | |
601 base::ThreadTaskRunnerHandle::Get()->PostTask( | |
602 FROM_HERE, | |
603 base::Bind(&NotifyDeviceChanged, base::RetainedRef(adapter_ptr), | |
604 device_ptr)); | |
605 } | |
606 DCHECK(services.size() == 0); | |
607 return false; | |
608 } | |
609 | |
610 return true; | |
611 })); | |
612 adapter->AddMockDevice(std::move(device)); | |
613 | |
614 return adapter; | |
615 } | |
616 | |
617 // static | |
540 scoped_refptr<NiceMockBluetoothAdapter> | 618 scoped_refptr<NiceMockBluetoothAdapter> |
541 LayoutTestBluetoothAdapterProvider::GetBlacklistTestAdapter() { | 619 LayoutTestBluetoothAdapterProvider::GetBlacklistTestAdapter() { |
542 scoped_refptr<NiceMockBluetoothAdapter> adapter(GetEmptyAdapter()); | 620 scoped_refptr<NiceMockBluetoothAdapter> adapter(GetEmptyAdapter()); |
543 | 621 |
544 BluetoothDevice::UUIDList uuids; | 622 BluetoothDevice::UUIDList uuids; |
545 uuids.push_back(BluetoothUUID(kBlacklistTestServiceUUID)); | 623 uuids.push_back(BluetoothUUID(kBlacklistTestServiceUUID)); |
546 uuids.push_back(BluetoothUUID(kDeviceInformationServiceUUID)); | 624 uuids.push_back(BluetoothUUID(kDeviceInformationServiceUUID)); |
547 uuids.push_back(BluetoothUUID(kGenericAccessServiceUUID)); | 625 uuids.push_back(BluetoothUUID(kGenericAccessServiceUUID)); |
548 uuids.push_back(BluetoothUUID(kHeartRateServiceUUID)); | 626 uuids.push_back(BluetoothUUID(kHeartRateServiceUUID)); |
549 uuids.push_back(BluetoothUUID(kHumanInterfaceDeviceServiceUUID)); | 627 uuids.push_back(BluetoothUUID(kHumanInterfaceDeviceServiceUUID)); |
(...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1074 return BluetoothUUID(); | 1152 return BluetoothUUID(); |
1075 } | 1153 } |
1076 | 1154 |
1077 // static | 1155 // static |
1078 std::string LayoutTestBluetoothAdapterProvider::makeMACAddress(uint64_t addr) { | 1156 std::string LayoutTestBluetoothAdapterProvider::makeMACAddress(uint64_t addr) { |
1079 return BluetoothDevice::CanonicalizeAddress( | 1157 return BluetoothDevice::CanonicalizeAddress( |
1080 base::StringPrintf("%012" PRIx64, addr)); | 1158 base::StringPrintf("%012" PRIx64, addr)); |
1081 } | 1159 } |
1082 | 1160 |
1083 } // namespace content | 1161 } // namespace content |
OLD | NEW |