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

Add OnNetworkUpdate to NetworkMetadataObserver.

Allows observers of the NetworkMetadataStore
to watch for updates.

Bug: 966270
Change-Id: Ibc4df7bd28a0222e30445453c1298d26e0c0c5a6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2151173Reviewed-by: default avatarJames Vecore <vecore@google.com>
Reviewed-by: default avatarAzeem Arshad <azeemarshad@chromium.org>
Commit-Queue: Jon Mann <jonmann@chromium.org>
Cr-Commit-Position: refs/heads/master@{#759924}
parent 9626a1dd
......@@ -93,6 +93,7 @@ component("network") {
"network_handler_callbacks.h",
"network_ip_config.cc",
"network_ip_config.h",
"network_metadata_observer.cc",
"network_metadata_observer.h",
"network_metadata_store.cc",
"network_metadata_store.h",
......
// Copyright (c) 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chromeos/network/network_metadata_observer.h"
namespace chromeos {
NetworkMetadataObserver::NetworkMetadataObserver() = default;
NetworkMetadataObserver::~NetworkMetadataObserver() = default;
void NetworkMetadataObserver::OnFirstConnectionToNetwork(
const std::string& guid) {}
void NetworkMetadataObserver::OnNetworkUpdate(
const std::string& guid,
base::DictionaryValue* set_properties) {}
} // namespace chromeos
......@@ -9,6 +9,7 @@
#include "base/component_export.h"
#include "base/observer_list_types.h"
#include "base/values.h"
namespace chromeos {
......@@ -18,11 +19,16 @@ class COMPONENT_EXPORT(CHROMEOS_NETWORK) NetworkMetadataObserver
: public base::CheckedObserver {
public:
// Called the first time that a network is successfully connected to.
virtual void OnFirstConnectionToNetwork(const std::string& guid) = 0;
virtual void OnFirstConnectionToNetwork(const std::string& guid);
// Called after a network configuration and associated metadata has been
// updated.
virtual void OnNetworkUpdate(const std::string& guid,
base::DictionaryValue* set_properties);
protected:
NetworkMetadataObserver() = default;
~NetworkMetadataObserver() override = default;
NetworkMetadataObserver();
~NetworkMetadataObserver() override;
};
} // namespace chromeos
......
......@@ -106,6 +106,10 @@ void NetworkMetadataStore::OnConfigurationModified(
if (set_properties->HasKey(shill::kPassphraseProperty)) {
SetPref(guid, kLastConnectedTimestampPref, base::Value(0));
}
for (auto& observer : observers_) {
observer.OnNetworkUpdate(guid, set_properties);
}
}
void NetworkMetadataStore::OnConfigurationRemoved(
......
......@@ -35,13 +35,29 @@ class TestNetworkMetadataObserver : public NetworkMetadataObserver {
void OnFirstConnectionToNetwork(const std::string& guid) override {
connections_.insert(guid);
}
void OnNetworkUpdate(const std::string& guid,
base::DictionaryValue* set_properties) override {
if (!updates_.contains(guid)) {
updates_[guid] = 1;
} else {
updates_[guid]++;
}
}
bool HasConnected(const std::string& guid) {
return connections_.count(guid) != 0;
}
int GetNumberOfUpdates(const std::string& guid) {
if (!updates_.contains(guid)) {
return 0;
}
return updates_[guid];
}
private:
std::set<std::string> connections_;
base::flat_map<std::string, int> updates_;
};
class NetworkMetadataStoreTest : public ::testing::Test {
......@@ -154,6 +170,7 @@ TEST_F(NetworkMetadataStoreTest, ConfigurationUpdated) {
metadata_store()->SetIsConfiguredBySync(kGuid);
ASSERT_FALSE(metadata_store()->GetLastConnectedTimestamp(kGuid).is_zero());
ASSERT_TRUE(metadata_store()->GetIsConfiguredBySync(kGuid));
ASSERT_EQ(0, metadata_observer()->GetNumberOfUpdates(kGuid));
base::DictionaryValue properties;
properties.SetKey(shill::kSecurityProperty, base::Value(shill::kSecurityPsk));
......@@ -165,6 +182,7 @@ TEST_F(NetworkMetadataStoreTest, ConfigurationUpdated) {
ASSERT_TRUE(metadata_store()->GetLastConnectedTimestamp(kGuid).is_zero());
ASSERT_FALSE(metadata_store()->GetIsConfiguredBySync(kGuid));
ASSERT_EQ(1, metadata_observer()->GetNumberOfUpdates(kGuid));
}
TEST_F(NetworkMetadataStoreTest, ConfigurationRemoved) {
......
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