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(
existing_network->guid, std::move(config),
base::BindOnce(&SyncedNetworkUpdaterImpl::OnSetPropertiesResult,
weak_ptr_factory_.GetWeakPtr(), change_guid,
existing_network->guid, id));
existing_network->guid, specifics));
return;
}
......@@ -83,7 +83,7 @@ void SyncedNetworkUpdaterImpl::StartAddOrUpdateOperation(
cros_network_config_->ConfigureNetwork(
std::move(config), /*shared=*/false,
base::BindOnce(&SyncedNetworkUpdaterImpl::OnConfigureNetworkResult,
weak_ptr_factory_.GetWeakPtr(), change_guid, id));
weak_ptr_factory_.GetWeakPtr(), change_guid, specifics));
}
void SyncedNetworkUpdaterImpl::RemoveNetwork(const NetworkIdentifier& id) {
......@@ -144,14 +144,19 @@ void SyncedNetworkUpdaterImpl::OnError(const std::string& change_guid,
void SyncedNetworkUpdaterImpl::OnConfigureNetworkResult(
const std::string& change_guid,
const NetworkIdentifier& id,
const sync_pb::WifiConfigurationSpecifics& proto,
const base::Optional<std::string>& network_guid,
const std::string& error_message) {
auto id = NetworkIdentifier::FromProto(proto);
if (network_guid) {
NET_LOG(EVENT) << "Successfully configured network "
<< NetworkGuidId(*network_guid);
NetworkHandler::Get()->network_metadata_store()->SetIsConfiguredBySync(
*network_guid);
NetworkMetadataStore* metadata_store =
NetworkHandler::Get()->network_metadata_store();
metadata_store->SetIsConfiguredBySync(*network_guid);
metadata_store->SetLastConnectedTimestamp(
*network_guid,
base::TimeDelta::FromMilliseconds(proto.last_connected_timestamp()));
} else {
NET_LOG(ERROR) << "Failed to configure network "
<< NetworkId(NetworkStateFromNetworkIdentifier(id))
......@@ -163,19 +168,24 @@ void SyncedNetworkUpdaterImpl::OnConfigureNetworkResult(
void SyncedNetworkUpdaterImpl::OnSetPropertiesResult(
const std::string& change_guid,
const std::string& network_guid,
const NetworkIdentifier& id,
const sync_pb::WifiConfigurationSpecifics& proto,
bool is_success,
const std::string& error_message) {
if (is_success) {
NET_LOG(EVENT) << "Successfully updated network "
<< NetworkGuidId(network_guid);
NetworkHandler::Get()->network_metadata_store()->SetIsConfiguredBySync(
network_guid);
NetworkMetadataStore* metadata_store =
NetworkHandler::Get()->network_metadata_store();
metadata_store->SetIsConfiguredBySync(network_guid);
metadata_store->SetLastConnectedTimestamp(
network_guid,
base::TimeDelta::FromMilliseconds(proto.last_connected_timestamp()));
} else {
NET_LOG(ERROR) << "Failed to update network "
<< NetworkGuidId(network_guid);
}
HandleShillResult(change_guid, id, is_success);
HandleShillResult(change_guid, NetworkIdentifier::FromProto(proto),
is_success);
}
void SyncedNetworkUpdaterImpl::OnForgetNetworkResult(
......
......@@ -81,13 +81,14 @@ class SyncedNetworkUpdaterImpl
const std::string& error_name);
void OnSetPropertiesResult(const std::string& change_guid,
const std::string& network_guid,
const NetworkIdentifier& id,
const sync_pb::WifiConfigurationSpecifics& proto,
bool success,
const std::string& error_message);
void OnConfigureNetworkResult(const std::string& change_guid,
const NetworkIdentifier& id,
const base::Optional<std::string>& network_guid,
const std::string& error_message);
void OnConfigureNetworkResult(
const std::string& change_guid,
const sync_pb::WifiConfigurationSpecifics& proto,
const base::Optional<std::string>& network_guid,
const std::string& error_message);
void OnForgetNetworkResult(const std::string& change_guid,
const NetworkIdentifier& id,
bool success);
......
......@@ -75,7 +75,8 @@ void NetworkMetadataStore::ConnectSucceeded(const std::string& service_path) {
bool is_first_connection =
GetLastConnectedTimestamp(network->guid()).is_zero();
UpdateLastConnectedTimestamp(network->guid());
SetLastConnectedTimestamp(network->guid(),
base::Time::Now().ToDeltaSinceWindowsEpoch());
if (is_first_connection) {
for (auto& observer : observers_) {
......@@ -135,13 +136,6 @@ void NetworkMetadataStore::RemoveNetworkFromPref(
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(
const std::string& network_guid) {
SetPref(network_guid, kIsFromSync, base::Value(true));
......@@ -159,6 +153,13 @@ base::TimeDelta NetworkMetadataStore::GetLastConnectedTimestamp(
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(
const std::string& network_guid) {
const base::Value* is_from_sync = GetPref(network_guid, kIsFromSync);
......
......@@ -63,9 +63,11 @@ class COMPONENT_EXPORT(CHROMEOS_NETWORK) NetworkMetadataStore
// Records that the network was added by sync.
void SetIsConfiguredBySync(const std::string& network_guid);
// Returns the number of milliseconds since EPOCH when the network was last
// connected to, or -1 if it has never had a successful connection
// Returns the timestamp when the network was last connected to, or 0 if it
// has never had a successful connection.
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.
bool GetIsConfiguredBySync(const std::string& network_guid);
......@@ -84,7 +86,6 @@ class COMPONENT_EXPORT(CHROMEOS_NETWORK) NetworkMetadataStore
private:
void RemoveNetworkFromPref(const std::string& network_guid,
PrefService* pref_service);
void UpdateLastConnectedTimestamp(const std::string& network_guid);
void SetPref(const std::string& network_guid,
const std::string& key,
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