OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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 "chromeos/components/tether/host_scanner_operation.h" | 5 #include "chromeos/components/tether/host_scanner_operation.h" |
6 | 6 |
7 #include "chromeos/components/tether/host_scan_device_prioritizer.h" | 7 #include "chromeos/components/tether/host_scan_device_prioritizer.h" |
8 #include "chromeos/components/tether/message_wrapper.h" | 8 #include "chromeos/components/tether/message_wrapper.h" |
9 #include "chromeos/components/tether/proto/tether.pb.h" | 9 #include "chromeos/components/tether/proto/tether.pb.h" |
| 10 #include "chromeos/components/tether/tether_host_response_recorder.h" |
10 #include "components/proximity_auth/logging/logging.h" | 11 #include "components/proximity_auth/logging/logging.h" |
11 | 12 |
12 namespace chromeos { | 13 namespace chromeos { |
13 | 14 |
14 namespace tether { | 15 namespace tether { |
15 | 16 |
16 namespace { | 17 namespace { |
17 | 18 |
18 std::vector<cryptauth::RemoteDevice> PrioritizeDevices( | 19 std::vector<cryptauth::RemoteDevice> PrioritizeDevices( |
19 const std::vector<cryptauth::RemoteDevice>& devices_to_connect, | 20 const std::vector<cryptauth::RemoteDevice>& devices_to_connect, |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 | 58 |
58 // static | 59 // static |
59 HostScannerOperation::Factory* | 60 HostScannerOperation::Factory* |
60 HostScannerOperation::Factory::factory_instance_ = nullptr; | 61 HostScannerOperation::Factory::factory_instance_ = nullptr; |
61 | 62 |
62 // static | 63 // static |
63 std::unique_ptr<HostScannerOperation> | 64 std::unique_ptr<HostScannerOperation> |
64 HostScannerOperation::Factory::NewInstance( | 65 HostScannerOperation::Factory::NewInstance( |
65 const std::vector<cryptauth::RemoteDevice>& devices_to_connect, | 66 const std::vector<cryptauth::RemoteDevice>& devices_to_connect, |
66 BleConnectionManager* connection_manager, | 67 BleConnectionManager* connection_manager, |
67 HostScanDevicePrioritizer* host_scan_device_prioritizer) { | 68 HostScanDevicePrioritizer* host_scan_device_prioritizer, |
| 69 TetherHostResponseRecorder* tether_host_response_recorder) { |
68 if (!factory_instance_) { | 70 if (!factory_instance_) { |
69 factory_instance_ = new Factory(); | 71 factory_instance_ = new Factory(); |
70 } | 72 } |
71 return factory_instance_->BuildInstance( | 73 return factory_instance_->BuildInstance( |
72 devices_to_connect, connection_manager, host_scan_device_prioritizer); | 74 devices_to_connect, connection_manager, host_scan_device_prioritizer, |
| 75 tether_host_response_recorder); |
73 } | 76 } |
74 | 77 |
75 // static | 78 // static |
76 void HostScannerOperation::Factory::SetInstanceForTesting(Factory* factory) { | 79 void HostScannerOperation::Factory::SetInstanceForTesting(Factory* factory) { |
77 factory_instance_ = factory; | 80 factory_instance_ = factory; |
78 } | 81 } |
79 | 82 |
80 std::unique_ptr<HostScannerOperation> | 83 std::unique_ptr<HostScannerOperation> |
81 HostScannerOperation::Factory::BuildInstance( | 84 HostScannerOperation::Factory::BuildInstance( |
82 const std::vector<cryptauth::RemoteDevice>& devices_to_connect, | 85 const std::vector<cryptauth::RemoteDevice>& devices_to_connect, |
83 BleConnectionManager* connection_manager, | 86 BleConnectionManager* connection_manager, |
84 HostScanDevicePrioritizer* host_scan_device_prioritizer) { | 87 HostScanDevicePrioritizer* host_scan_device_prioritizer, |
| 88 TetherHostResponseRecorder* tether_host_response_recorder) { |
85 return base::MakeUnique<HostScannerOperation>( | 89 return base::MakeUnique<HostScannerOperation>( |
86 devices_to_connect, connection_manager, host_scan_device_prioritizer); | 90 devices_to_connect, connection_manager, host_scan_device_prioritizer, |
| 91 tether_host_response_recorder); |
87 } | 92 } |
88 | 93 |
89 HostScannerOperation::ScannedDeviceInfo::ScannedDeviceInfo( | 94 HostScannerOperation::ScannedDeviceInfo::ScannedDeviceInfo( |
90 const cryptauth::RemoteDevice& remote_device, | 95 const cryptauth::RemoteDevice& remote_device, |
91 const DeviceStatus& device_status, | 96 const DeviceStatus& device_status, |
92 bool set_up_required) | 97 bool set_up_required) |
93 : remote_device(remote_device), | 98 : remote_device(remote_device), |
94 device_status(device_status), | 99 device_status(device_status), |
95 set_up_required(set_up_required) {} | 100 set_up_required(set_up_required) {} |
96 | 101 |
97 HostScannerOperation::ScannedDeviceInfo::~ScannedDeviceInfo() {} | 102 HostScannerOperation::ScannedDeviceInfo::~ScannedDeviceInfo() {} |
98 | 103 |
99 bool operator==(const HostScannerOperation::ScannedDeviceInfo& first, | 104 bool operator==(const HostScannerOperation::ScannedDeviceInfo& first, |
100 const HostScannerOperation::ScannedDeviceInfo& second) { | 105 const HostScannerOperation::ScannedDeviceInfo& second) { |
101 return first.remote_device == second.remote_device && | 106 return first.remote_device == second.remote_device && |
102 first.device_status.SerializeAsString() == | 107 first.device_status.SerializeAsString() == |
103 second.device_status.SerializeAsString() && | 108 second.device_status.SerializeAsString() && |
104 first.set_up_required == second.set_up_required; | 109 first.set_up_required == second.set_up_required; |
105 } | 110 } |
106 | 111 |
107 HostScannerOperation::HostScannerOperation( | 112 HostScannerOperation::HostScannerOperation( |
108 const std::vector<cryptauth::RemoteDevice>& devices_to_connect, | 113 const std::vector<cryptauth::RemoteDevice>& devices_to_connect, |
109 BleConnectionManager* connection_manager, | 114 BleConnectionManager* connection_manager, |
110 HostScanDevicePrioritizer* host_scan_device_prioritizer) | 115 HostScanDevicePrioritizer* host_scan_device_prioritizer, |
| 116 TetherHostResponseRecorder* tether_host_response_recorder) |
111 : MessageTransferOperation( | 117 : MessageTransferOperation( |
112 PrioritizeDevices(devices_to_connect, host_scan_device_prioritizer), | 118 PrioritizeDevices(devices_to_connect, host_scan_device_prioritizer), |
113 connection_manager), | 119 connection_manager), |
114 host_scan_device_prioritizer_(host_scan_device_prioritizer) {} | 120 tether_host_response_recorder_(tether_host_response_recorder) {} |
115 | 121 |
116 HostScannerOperation::~HostScannerOperation() {} | 122 HostScannerOperation::~HostScannerOperation() {} |
117 | 123 |
118 void HostScannerOperation::AddObserver(Observer* observer) { | 124 void HostScannerOperation::AddObserver(Observer* observer) { |
119 observer_list_.AddObserver(observer); | 125 observer_list_.AddObserver(observer); |
120 } | 126 } |
121 | 127 |
122 void HostScannerOperation::RemoveObserver(Observer* observer) { | 128 void HostScannerOperation::RemoveObserver(Observer* observer) { |
123 observer_list_.RemoveObserver(observer); | 129 observer_list_.RemoveObserver(observer); |
124 } | 130 } |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
159 bool set_up_required = | 165 bool set_up_required = |
160 response->response_code() == | 166 response->response_code() == |
161 TetherAvailabilityResponse_ResponseCode:: | 167 TetherAvailabilityResponse_ResponseCode:: |
162 TetherAvailabilityResponse_ResponseCode_SETUP_NEEDED; | 168 TetherAvailabilityResponse_ResponseCode_SETUP_NEEDED; |
163 | 169 |
164 PA_LOG(INFO) << "Received TetherAvailabilityResponse from device with ID " | 170 PA_LOG(INFO) << "Received TetherAvailabilityResponse from device with ID " |
165 << remote_device.GetTruncatedDeviceIdForLogs() << " which " | 171 << remote_device.GetTruncatedDeviceIdForLogs() << " which " |
166 << "indicates that tethering is available. set_up_required = " | 172 << "indicates that tethering is available. set_up_required = " |
167 << set_up_required; | 173 << set_up_required; |
168 | 174 |
169 host_scan_device_prioritizer_->RecordSuccessfulTetherAvailabilityResponse( | 175 tether_host_response_recorder_->RecordSuccessfulTetherAvailabilityResponse( |
170 remote_device); | 176 remote_device); |
171 | 177 |
172 scanned_device_list_so_far_.push_back(ScannedDeviceInfo( | 178 scanned_device_list_so_far_.push_back(ScannedDeviceInfo( |
173 remote_device, response->device_status(), set_up_required)); | 179 remote_device, response->device_status(), set_up_required)); |
174 NotifyObserversOfScannedDeviceList(false /* is_final_scan_result */); | 180 NotifyObserversOfScannedDeviceList(false /* is_final_scan_result */); |
175 } | 181 } |
176 | 182 |
177 // Unregister the device after a TetherAvailabilityResponse has been received. | 183 // Unregister the device after a TetherAvailabilityResponse has been received. |
178 UnregisterDevice(remote_device); | 184 UnregisterDevice(remote_device); |
179 } | 185 } |
(...skipping 10 matching lines...) Expand all Loading... |
190 NotifyObserversOfScannedDeviceList(true /* is_final_scan_result */); | 196 NotifyObserversOfScannedDeviceList(true /* is_final_scan_result */); |
191 } | 197 } |
192 | 198 |
193 MessageType HostScannerOperation::GetMessageTypeForConnection() { | 199 MessageType HostScannerOperation::GetMessageTypeForConnection() { |
194 return MessageType::TETHER_AVAILABILITY_REQUEST; | 200 return MessageType::TETHER_AVAILABILITY_REQUEST; |
195 } | 201 } |
196 | 202 |
197 } // namespace tether | 203 } // namespace tether |
198 | 204 |
199 } // namespace chromeos | 205 } // namespace chromeos |
OLD | NEW |