Index: components/cryptauth/remote_device.cc |
diff --git a/components/cryptauth/remote_device.cc b/components/cryptauth/remote_device.cc |
index 19665df742a95b4edba9531b4c92e17c59265e06..e3d26d0b646355825d2ad568493ec20abcf055ca 100644 |
--- a/components/cryptauth/remote_device.cc |
+++ b/components/cryptauth/remote_device.cc |
@@ -8,6 +8,30 @@ |
namespace cryptauth { |
+namespace { |
+ |
+// Returns true if both vectors are BeaconSeeds are equal. |
+bool AreBeaconSeedsEqual(const std::vector<BeaconSeed> beacon_seeds1, |
+ const std::vector<BeaconSeed> beacon_seeds2) { |
+ if (beacon_seeds1.size() != beacon_seeds2.size()) { |
+ return false; |
+ } |
+ |
+ for (size_t i = 0; i < beacon_seeds1.size(); ++i) { |
+ const BeaconSeed& seed1 = beacon_seeds1[i]; |
+ const BeaconSeed& seed2 = beacon_seeds2[i]; |
+ if (seed1.start_time_millis() != seed2.start_time_millis() || |
+ seed1.end_time_millis() != seed2.end_time_millis() || |
+ seed1.data() != seed2.data()) { |
+ return false; |
+ } |
+ } |
+ |
+ return true; |
+} |
+ |
+} // namespace |
+ |
RemoteDevice::RemoteDevice() {} |
RemoteDevice::RemoteDevice(const std::string& user_id, |
@@ -21,12 +45,19 @@ RemoteDevice::RemoteDevice(const std::string& user_id, |
public_key(public_key), |
bluetooth_address(bluetooth_address), |
persistent_symmetric_key(persistent_symmetric_key), |
- sign_in_challenge(sign_in_challenge) {} |
+ sign_in_challenge(sign_in_challenge), |
+ are_beacon_seeds_loaded(false) {} |
RemoteDevice::RemoteDevice(const RemoteDevice& other) = default; |
RemoteDevice::~RemoteDevice() {} |
+void RemoteDevice::LoadBeaconSeeds( |
+ const std::vector<BeaconSeed>& beacon_seeds) { |
+ this->are_beacon_seeds_loaded = true; |
+ this->beacon_seeds = beacon_seeds; |
+} |
+ |
std::string RemoteDevice::GetDeviceId() const { |
std::string to_return; |
base::Base64Encode(public_key, &to_return); |
@@ -38,12 +69,21 @@ std::string RemoteDevice::GetTruncatedDeviceIdForLogs() const { |
} |
bool RemoteDevice::operator==(const RemoteDevice& other) const { |
- return user_id == other.user_id |
- && name == other.name |
- && public_key == other.public_key |
- && bluetooth_address == other.bluetooth_address |
- && persistent_symmetric_key == other.persistent_symmetric_key |
- && sign_in_challenge == other.sign_in_challenge; |
+ // Only compare |beacon_seeds| if they are loaded. |
+ bool are_beacon_seeds_equal = false; |
+ if (are_beacon_seeds_loaded) { |
+ are_beacon_seeds_equal = |
+ other.are_beacon_seeds_loaded && |
+ AreBeaconSeedsEqual(beacon_seeds, other.beacon_seeds); |
+ } else { |
+ are_beacon_seeds_equal = !other.are_beacon_seeds_loaded; |
+ } |
+ |
+ return user_id == other.user_id && name == other.name && |
+ public_key == other.public_key && |
+ bluetooth_address == other.bluetooth_address && |
+ persistent_symmetric_key == other.persistent_symmetric_key && |
+ sign_in_challenge == other.sign_in_challenge && are_beacon_seeds_equal; |
} |
bool RemoteDevice::operator<(const RemoteDevice& other) const { |