Index: chrome/browser/chromeos/net/connectivity_state_helper.cc |
diff --git a/chrome/browser/chromeos/net/connectivity_state_helper.cc b/chrome/browser/chromeos/net/connectivity_state_helper.cc |
index 515e985885ff12d64de8846e20df2bbd00410b5a..223c9f5d47c4b60c2441f4f49188119a3c6407a3 100644 |
--- a/chrome/browser/chromeos/net/connectivity_state_helper.cc |
+++ b/chrome/browser/chromeos/net/connectivity_state_helper.cc |
@@ -10,6 +10,7 @@ |
#include "chromeos/chromeos_switches.h" |
#include "chromeos/network/network_state.h" |
#include "chromeos/network/network_state_handler.h" |
+#include "chromeos/network/network_state_handler_observer.h" |
#include "third_party/cros_system_api/dbus/service_constants.h" |
namespace chromeos { |
@@ -19,11 +20,13 @@ static ConnectivityStateHelper* g_connectivity_state_helper = NULL; |
// Implementation of the connectivity state helper that uses the network |
// state handler for fetching connectivity state. |
class ConnectivityStateHelperImpl |
- : public ConnectivityStateHelper { |
+ : public ConnectivityStateHelper, |
+ public NetworkStateHandlerObserver { |
public: |
ConnectivityStateHelperImpl(); |
virtual ~ConnectivityStateHelperImpl(); |
+ // NetworkStateHandler overrides. |
virtual bool IsConnected() OVERRIDE; |
virtual bool IsConnectedType(const std::string& type) OVERRIDE; |
virtual bool IsConnectingType(const std::string& type) OVERRIDE; |
@@ -31,6 +34,9 @@ class ConnectivityStateHelperImpl |
virtual std::string DefaultNetworkName() OVERRIDE; |
virtual bool DefaultNetworkOnline() OVERRIDE; |
+ // NetworkStateHandlerObserver overrides. |
+ virtual void NetworkManagerChanged() OVERRIDE; |
+ |
private: |
NetworkStateHandler* network_state_handler_; |
}; |
@@ -38,11 +44,13 @@ class ConnectivityStateHelperImpl |
// Implementation of the connectivity state helper that uses the network |
// library for fetching connectivity state. |
class ConnectivityStateHelperNetworkLibrary |
- : public ConnectivityStateHelper { |
+ : public ConnectivityStateHelper, |
+ public NetworkLibrary::NetworkManagerObserver { |
public: |
ConnectivityStateHelperNetworkLibrary(); |
virtual ~ConnectivityStateHelperNetworkLibrary(); |
+ // ConnectivityStateHelper overrides. |
virtual bool IsConnected() OVERRIDE; |
virtual bool IsConnectedType(const std::string& type) OVERRIDE; |
virtual bool IsConnectingType(const std::string& type) OVERRIDE; |
@@ -50,6 +58,9 @@ class ConnectivityStateHelperNetworkLibrary |
virtual std::string DefaultNetworkName() OVERRIDE; |
virtual bool DefaultNetworkOnline() OVERRIDE; |
+ // NetworkLibrary::NetworkManagerObserver overrides. |
+ virtual void OnNetworkManagerChanged(NetworkLibrary* network_library); |
+ |
private: |
NetworkLibrary* network_library_; |
}; |
@@ -88,11 +99,24 @@ ConnectivityStateHelper* ConnectivityStateHelper::Get() { |
return g_connectivity_state_helper; |
} |
+void ConnectivityStateHelper::AddNetworkManagerObserver( |
+ ConnectivityStateHelperObserver* observer) { |
+ network_manager_observers_.AddObserver(observer); |
+} |
+ |
+void ConnectivityStateHelper::RemoveNetworkManagerObserver( |
+ ConnectivityStateHelperObserver* observer) { |
+ network_manager_observers_.RemoveObserver(observer); |
+} |
+ |
ConnectivityStateHelperImpl::ConnectivityStateHelperImpl() { |
network_state_handler_ = NetworkStateHandler::Get(); |
+ network_state_handler_->AddObserver(this); |
} |
-ConnectivityStateHelperImpl::~ConnectivityStateHelperImpl() {} |
+ConnectivityStateHelperImpl::~ConnectivityStateHelperImpl() { |
+ network_state_handler_->RemoveObserver(this); |
stevenjb
2013/03/11 23:11:05
nit: Use NetworkStateHandler::Get() here; if we ac
gauravsh
2013/03/12 00:30:25
Good point. Done.
|
+} |
bool ConnectivityStateHelperImpl::IsConnected() { |
return network_state_handler_->ConnectedNetworkByType( |
@@ -135,16 +159,24 @@ bool ConnectivityStateHelperImpl::DefaultNetworkOnline() { |
return true; |
} |
+void ConnectivityStateHelperImpl::NetworkManagerChanged() { |
+ FOR_EACH_OBSERVER(ConnectivityStateHelperObserver, network_manager_observers_, |
+ NetworkManagerChanged()); |
+} |
+ |
//////////////////////////////////////////////////////////////////////////////// |
// NetworkLibrary implementation. |
// |
ConnectivityStateHelperNetworkLibrary::ConnectivityStateHelperNetworkLibrary() { |
network_library_ = CrosLibrary::Get()->GetNetworkLibrary(); |
+ network_library_->AddNetworkManagerObserver(this); |
} |
ConnectivityStateHelperNetworkLibrary::~ConnectivityStateHelperNetworkLibrary() |
-{} |
+{ |
+ network_library_->RemoveNetworkManagerObserver(this); |
+} |
bool ConnectivityStateHelperNetworkLibrary::IsConnected() { |
return network_library_->Connected(); |
@@ -206,4 +238,10 @@ bool ConnectivityStateHelperNetworkLibrary::DefaultNetworkOnline() { |
return true; |
} |
+void ConnectivityStateHelperNetworkLibrary::OnNetworkManagerChanged( |
+ NetworkLibrary* network_library) { |
+ FOR_EACH_OBSERVER(ConnectivityStateHelperObserver, network_manager_observers_, |
+ NetworkManagerChanged()); |
+} |
+ |
} // namespace chromeos |