summaryrefslogtreecommitdiffstats
path: root/chromeos/network/network_state.cc
diff options
context:
space:
mode:
authorgauravsh@chromium.org <gauravsh@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-02 23:24:28 +0000
committergauravsh@chromium.org <gauravsh@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-02 23:24:28 +0000
commit362fb225a9ad9e27a4f04b11893c0f0b0fb4865d (patch)
tree16da62d553439fa2123ce5d41e1cd0ebfe8a3194 /chromeos/network/network_state.cc
parent5b2c5f170fd5677a3ad640c390fb24c75873fa3d (diff)
downloadchromium_src-362fb225a9ad9e27a4f04b11893c0f0b0fb4865d.zip
chromium_src-362fb225a9ad9e27a4f04b11893c0f0b0fb4865d.tar.gz
chromium_src-362fb225a9ad9e27a4f04b11893c0f0b0fb4865d.tar.bz2
NetworkChangeNotifierChromeos: Handle IPConfig property changes on the default network
BUG=164501 TEST=verify that dns refreshes while in connected state result in a dns change. Review URL: https://chromiumcodereview.appspot.com/12634019 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@191929 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chromeos/network/network_state.cc')
-rw-r--r--chromeos/network/network_state.cc39
1 files changed, 39 insertions, 0 deletions
diff --git a/chromeos/network/network_state.cc b/chromeos/network/network_state.cc
index bac4c60..8355028 100644
--- a/chromeos/network/network_state.cc
+++ b/chromeos/network/network_state.cc
@@ -4,9 +4,25 @@
#include "chromeos/network/network_state.h"
+#include "base/stringprintf.h"
#include "base/values.h"
#include "third_party/cros_system_api/dbus/service_constants.h"
+namespace {
+
+bool ConvertListValueToStringVector(const base::ListValue& string_list,
+ std::vector<std::string>* result) {
+ for (size_t i = 0; i < string_list.GetSize(); ++i) {
+ std::string str;
+ if (!string_list.GetString(i, &str))
+ return false;
+ result->push_back(str);
+ }
+ return true;
+}
+
+} // namespace
+
namespace chromeos {
NetworkState::NetworkState(const std::string& path)
@@ -33,6 +49,14 @@ bool NetworkState::PropertyChanged(const std::string& key,
return GetStringValue(key, value, &connection_state_);
} else if (key == flimflam::kErrorProperty) {
return GetStringValue(key, value, &error_);
+ } else if (key == IPConfigProperty(flimflam::kAddressProperty)) {
+ return GetStringValue(key, value, &ip_address_);
+ } else if (key == IPConfigProperty(flimflam::kNameServersProperty)) {
+ dns_servers_.clear();
+ const base::ListValue* dns_servers;
+ if (value.GetAsList(&dns_servers) &&
+ ConvertListValueToStringVector(*dns_servers, &dns_servers_))
+ return true;
} else if (key == flimflam::kActivationStateProperty) {
return GetStringValue(key, value, &activation_state_);
} else if (key == flimflam::kRoamingStateProperty) {
@@ -69,6 +93,16 @@ void NetworkState::GetProperties(base::DictionaryValue* dictionary) const {
connection_state());
dictionary->SetStringWithoutPathExpansion(flimflam::kErrorProperty,
error());
+ base::DictionaryValue* ipconfig_properties = new DictionaryValue;
+ ipconfig_properties->SetStringWithoutPathExpansion(flimflam::kAddressProperty,
+ ip_address());
+ base::ListValue* name_servers = new ListValue;
+ name_servers->AppendStrings(dns_servers());
+ ipconfig_properties->SetWithoutPathExpansion(flimflam::kNameServersProperty,
+ name_servers);
+ dictionary->SetWithoutPathExpansion(shill::kIPConfigProperty,
+ ipconfig_properties);
+
dictionary->SetStringWithoutPathExpansion(flimflam::kActivationStateProperty,
activation_state());
dictionary->SetStringWithoutPathExpansion(flimflam::kRoamingStateProperty,
@@ -116,4 +150,9 @@ bool NetworkState::StateIsConnecting(const std::string& connection_state) {
connection_state == flimflam::kStateCarrier);
}
+// static
+std::string NetworkState::IPConfigProperty(const char* key) {
+ return base::StringPrintf("%s.%s", shill::kIPConfigProperty, key);
+}
+
} // namespace chromeos