Commit a15486a4 authored by Jon Mann's avatar Jon Mann Committed by Commit Bot

[Wi-Fi Sync] Store the synced timestamp in local networks metadata.

Previously, the timestamp was only tracking if a network had been
connected to on the local device.  This prevented us from syncing user
updates that were performed before connecting which would be confusing
for users.

Bug: 966270
Change-Id: I90da43383813c4c1e503b22813a84d1ff4ecf7b5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2149693Reviewed-by: default avatarAzeem Arshad <azeemarshad@chromium.org>
Commit-Queue: Jon Mann <jonmann@chromium.org>
Cr-Commit-Position: refs/heads/master@{#759409}
parent 7babd547
...@@ -75,7 +75,7 @@ void SyncedNetworkUpdaterImpl::StartAddOrUpdateOperation( ...@@ -75,7 +75,7 @@ void SyncedNetworkUpdaterImpl::StartAddOrUpdateOperation(
existing_network->guid, std::move(config), existing_network->guid, std::move(config),
base::BindOnce(&SyncedNetworkUpdaterImpl::OnSetPropertiesResult, base::BindOnce(&SyncedNetworkUpdaterImpl::OnSetPropertiesResult,
weak_ptr_factory_.GetWeakPtr(), change_guid, weak_ptr_factory_.GetWeakPtr(), change_guid,
existing_network->guid, id)); existing_network->guid, specifics));
return; return;
} }
...@@ -83,7 +83,7 @@ void SyncedNetworkUpdaterImpl::StartAddOrUpdateOperation( ...@@ -83,7 +83,7 @@ void SyncedNetworkUpdaterImpl::StartAddOrUpdateOperation(
cros_network_config_->ConfigureNetwork( cros_network_config_->ConfigureNetwork(
std::move(config), /*shared=*/false, std::move(config), /*shared=*/false,
base::BindOnce(&SyncedNetworkUpdaterImpl::OnConfigureNetworkResult, base::BindOnce(&SyncedNetworkUpdaterImpl::OnConfigureNetworkResult,
weak_ptr_factory_.GetWeakPtr(), change_guid, id)); weak_ptr_factory_.GetWeakPtr(), change_guid, specifics));
} }
void SyncedNetworkUpdaterImpl::RemoveNetwork(const NetworkIdentifier& id) { void SyncedNetworkUpdaterImpl::RemoveNetwork(const NetworkIdentifier& id) {
...@@ -144,14 +144,19 @@ void SyncedNetworkUpdaterImpl::OnError(const std::string& change_guid, ...@@ -144,14 +144,19 @@ void SyncedNetworkUpdaterImpl::OnError(const std::string& change_guid,
void SyncedNetworkUpdaterImpl::OnConfigureNetworkResult( void SyncedNetworkUpdaterImpl::OnConfigureNetworkResult(
const std::string& change_guid, const std::string& change_guid,
const NetworkIdentifier& id, const sync_pb::WifiConfigurationSpecifics& proto,
const base::Optional<std::string>& network_guid, const base::Optional<std::string>& network_guid,
const std::string& error_message) { const std::string& error_message) {
auto id = NetworkIdentifier::FromProto(proto);
if (network_guid) { if (network_guid) {
NET_LOG(EVENT) << "Successfully configured network " NET_LOG(EVENT) << "Successfully configured network "
<< NetworkGuidId(*network_guid); << NetworkGuidId(*network_guid);
NetworkHandler::Get()->network_metadata_store()->SetIsConfiguredBySync( NetworkMetadataStore* metadata_store =
*network_guid); NetworkHandler::Get()->network_metadata_store();
metadata_store->SetIsConfiguredBySync(*network_guid);
metadata_store->SetLastConnectedTimestamp(
*network_guid,
base::TimeDelta::FromMilliseconds(proto.last_connected_timestamp()));
} else { } else {
NET_LOG(ERROR) << "Failed to configure network " NET_LOG(ERROR) << "Failed to configure network "
<< NetworkId(NetworkStateFromNetworkIdentifier(id)) << NetworkId(NetworkStateFromNetworkIdentifier(id))
...@@ -163,19 +168,24 @@ void SyncedNetworkUpdaterImpl::OnConfigureNetworkResult( ...@@ -163,19 +168,24 @@ void SyncedNetworkUpdaterImpl::OnConfigureNetworkResult(
void SyncedNetworkUpdaterImpl::OnSetPropertiesResult( void SyncedNetworkUpdaterImpl::OnSetPropertiesResult(
const std::string& change_guid, const std::string& change_guid,
const std::string& network_guid, const std::string& network_guid,
const NetworkIdentifier& id, const sync_pb::WifiConfigurationSpecifics& proto,
bool is_success, bool is_success,
const std::string& error_message) { const std::string& error_message) {
if (is_success) { if (is_success) {
NET_LOG(EVENT) << "Successfully updated network " NET_LOG(EVENT) << "Successfully updated network "
<< NetworkGuidId(network_guid); << NetworkGuidId(network_guid);
NetworkHandler::Get()->network_metadata_store()->SetIsConfiguredBySync( NetworkMetadataStore* metadata_store =
network_guid); NetworkHandler::Get()->network_metadata_store();
metadata_store->SetIsConfiguredBySync(network_guid);
metadata_store->SetLastConnectedTimestamp(
network_guid,
base::TimeDelta::FromMilliseconds(proto.last_connected_timestamp()));
} else { } else {
NET_LOG(ERROR) << "Failed to update network " NET_LOG(ERROR) << "Failed to update network "
<< NetworkGuidId(network_guid); << NetworkGuidId(network_guid);
} }
HandleShillResult(change_guid, id, is_success); HandleShillResult(change_guid, NetworkIdentifier::FromProto(proto),
is_success);
} }
void SyncedNetworkUpdaterImpl::OnForgetNetworkResult( void SyncedNetworkUpdaterImpl::OnForgetNetworkResult(
......
...@@ -81,11 +81,12 @@ class SyncedNetworkUpdaterImpl ...@@ -81,11 +81,12 @@ class SyncedNetworkUpdaterImpl
const std::string& error_name); const std::string& error_name);
void OnSetPropertiesResult(const std::string& change_guid, void OnSetPropertiesResult(const std::string& change_guid,
const std::string& network_guid, const std::string& network_guid,
const NetworkIdentifier& id, const sync_pb::WifiConfigurationSpecifics& proto,
bool success, bool success,
const std::string& error_message); const std::string& error_message);
void OnConfigureNetworkResult(const std::string& change_guid, void OnConfigureNetworkResult(
const NetworkIdentifier& id, const std::string& change_guid,
const sync_pb::WifiConfigurationSpecifics& proto,
const base::Optional<std::string>& network_guid, const base::Optional<std::string>& network_guid,
const std::string& error_message); const std::string& error_message);
void OnForgetNetworkResult(const std::string& change_guid, void OnForgetNetworkResult(const std::string& change_guid,
......
...@@ -75,7 +75,8 @@ void NetworkMetadataStore::ConnectSucceeded(const std::string& service_path) { ...@@ -75,7 +75,8 @@ void NetworkMetadataStore::ConnectSucceeded(const std::string& service_path) {
bool is_first_connection = bool is_first_connection =
GetLastConnectedTimestamp(network->guid()).is_zero(); GetLastConnectedTimestamp(network->guid()).is_zero();
UpdateLastConnectedTimestamp(network->guid()); SetLastConnectedTimestamp(network->guid(),
base::Time::Now().ToDeltaSinceWindowsEpoch());
if (is_first_connection) { if (is_first_connection) {
for (auto& observer : observers_) { for (auto& observer : observers_) {
...@@ -135,13 +136,6 @@ void NetworkMetadataStore::RemoveNetworkFromPref( ...@@ -135,13 +136,6 @@ void NetworkMetadataStore::RemoveNetworkFromPref(
pref_service->Set(kNetworkMetadataPref, writeable_dict); pref_service->Set(kNetworkMetadataPref, writeable_dict);
} }
void NetworkMetadataStore::UpdateLastConnectedTimestamp(
const std::string& network_guid) {
double timestamp =
base::Time::Now().ToDeltaSinceWindowsEpoch().InMillisecondsF();
SetPref(network_guid, kLastConnectedTimestampPref, base::Value(timestamp));
}
void NetworkMetadataStore::SetIsConfiguredBySync( void NetworkMetadataStore::SetIsConfiguredBySync(
const std::string& network_guid) { const std::string& network_guid) {
SetPref(network_guid, kIsFromSync, base::Value(true)); SetPref(network_guid, kIsFromSync, base::Value(true));
...@@ -159,6 +153,13 @@ base::TimeDelta NetworkMetadataStore::GetLastConnectedTimestamp( ...@@ -159,6 +153,13 @@ base::TimeDelta NetworkMetadataStore::GetLastConnectedTimestamp(
return base::TimeDelta::FromMillisecondsD(timestamp->GetDouble()); return base::TimeDelta::FromMillisecondsD(timestamp->GetDouble());
} }
void NetworkMetadataStore::SetLastConnectedTimestamp(
const std::string& network_guid,
const base::TimeDelta& timestamp) {
double timestamp_f = timestamp.InMillisecondsF();
SetPref(network_guid, kLastConnectedTimestampPref, base::Value(timestamp_f));
}
bool NetworkMetadataStore::GetIsConfiguredBySync( bool NetworkMetadataStore::GetIsConfiguredBySync(
const std::string& network_guid) { const std::string& network_guid) {
const base::Value* is_from_sync = GetPref(network_guid, kIsFromSync); const base::Value* is_from_sync = GetPref(network_guid, kIsFromSync);
......
...@@ -63,9 +63,11 @@ class COMPONENT_EXPORT(CHROMEOS_NETWORK) NetworkMetadataStore ...@@ -63,9 +63,11 @@ class COMPONENT_EXPORT(CHROMEOS_NETWORK) NetworkMetadataStore
// Records that the network was added by sync. // Records that the network was added by sync.
void SetIsConfiguredBySync(const std::string& network_guid); void SetIsConfiguredBySync(const std::string& network_guid);
// Returns the number of milliseconds since EPOCH when the network was last // Returns the timestamp when the network was last connected to, or 0 if it
// connected to, or -1 if it has never had a successful connection // has never had a successful connection.
base::TimeDelta GetLastConnectedTimestamp(const std::string& network_guid); base::TimeDelta GetLastConnectedTimestamp(const std::string& network_guid);
void SetLastConnectedTimestamp(const std::string& network_guid,
const base::TimeDelta& timestamp);
// Networks which were added directly from sync data will return true. // Networks which were added directly from sync data will return true.
bool GetIsConfiguredBySync(const std::string& network_guid); bool GetIsConfiguredBySync(const std::string& network_guid);
...@@ -84,7 +86,6 @@ class COMPONENT_EXPORT(CHROMEOS_NETWORK) NetworkMetadataStore ...@@ -84,7 +86,6 @@ class COMPONENT_EXPORT(CHROMEOS_NETWORK) NetworkMetadataStore
private: private:
void RemoveNetworkFromPref(const std::string& network_guid, void RemoveNetworkFromPref(const std::string& network_guid,
PrefService* pref_service); PrefService* pref_service);
void UpdateLastConnectedTimestamp(const std::string& network_guid);
void SetPref(const std::string& network_guid, void SetPref(const std::string& network_guid,
const std::string& key, const std::string& key,
base::Value value); base::Value value);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment