Index: chromeos/network/network_change_notifier_chromeos.cc |
diff --git a/chromeos/network/network_change_notifier_chromeos.cc b/chromeos/network/network_change_notifier_chromeos.cc |
index 2510735562d5b098570b174192672c9fb259553d..224930ccb47e3838c46531c3a4c55eda6bf0c8ba 100644 |
--- a/chromeos/network/network_change_notifier_chromeos.cc |
+++ b/chromeos/network/network_change_notifier_chromeos.cc |
@@ -6,6 +6,7 @@ |
#include "base/basictypes.h" |
#include "base/bind.h" |
+#include "base/string_util.h" |
#include "chromeos/dbus/dbus_thread_manager.h" |
#include "chromeos/network/network_change_notifier_chromeos.h" |
#include "chromeos/network/network_state.h" |
@@ -111,21 +112,19 @@ void NetworkChangeNotifierChromeos::UpdateState( |
*connection_type_changed = false; |
*ip_address_changed = false; |
*dns_changed = false; |
- // TODO(gauravsh): DNS changes will be detected once ip config |
- // support is hooked into NetworkStateHandler. For now, |
- // we report a DNS change on changes to the default network (including |
- // loss). |
if (!default_network || !default_network->IsConnectedState()) { |
// If we lost a default network, we must update our state and notify |
- // observers, otherwise we have nothing do. (Under normal circumstances, |
+ // observers, otherwise we have nothing to do. (Under normal circumstances, |
// we should never get duplicate no default network notifications). |
if (connection_type_ != CONNECTION_NONE) { |
+ VLOG(1) << "Lost default network!"; |
*ip_address_changed = true; |
*dns_changed = true; |
*connection_type_changed = true; |
connection_type_ = CONNECTION_NONE; |
service_path_.clear(); |
ip_address_.clear(); |
+ dns_servers_.clear(); |
} |
return; |
} |
@@ -138,20 +137,33 @@ void NetworkChangeNotifierChromeos::UpdateState( |
VLOG(1) << "Connection type changed from " << connection_type_ << " -> " |
<< new_connection_type; |
*connection_type_changed = true; |
- *dns_changed = true; |
} |
- if (default_network->path() != service_path_ || |
- default_network->ip_address() != ip_address_) { |
+ if (default_network->path() != service_path_) { |
VLOG(1) << "Service path changed from " << service_path_ << " -> " |
<< default_network->path(); |
+ // If we had a default network service change, network resources |
+ // must always be invalidated. |
+ *ip_address_changed = true; |
+ *dns_changed = true; |
+ } |
+ if (default_network->ip_address() != ip_address_) { |
VLOG(1) << "IP Address changed from " << ip_address_ << " -> " |
<< default_network->ip_address(); |
*ip_address_changed = true; |
+ } |
+ if (default_network->dns_servers() != dns_servers_) { |
+ VLOG(1) << "DNS servers changed.\n" |
+ << "Old DNS servers were: " |
+ << JoinString(dns_servers_, ",") << "\n" |
+ << "New DNS servers are: " |
+ << JoinString(default_network->dns_servers(), ","); |
*dns_changed = true; |
} |
+ |
connection_type_ = new_connection_type; |
service_path_ = default_network->path(); |
ip_address_ = default_network->ip_address(); |
+ dns_servers_ = default_network->dns_servers(); |
} |
// static |