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..0ded77b4aa2d28da0d729149dceaa38e31d0d9a3 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,17 +20,23 @@ 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; |
virtual std::string NetworkNameForType(const std::string& type) OVERRIDE; |
virtual std::string DefaultNetworkName() OVERRIDE; |
virtual bool DefaultNetworkOnline() OVERRIDE; |
+ virtual void RequestScan() const OVERRIDE; |
+ |
+ // NetworkStateHandlerObserver overrides. |
+ virtual void NetworkManagerChanged() OVERRIDE; |
private: |
NetworkStateHandler* network_state_handler_; |
@@ -38,22 +45,34 @@ 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; |
virtual std::string NetworkNameForType(const std::string& type) OVERRIDE; |
virtual std::string DefaultNetworkName() OVERRIDE; |
virtual bool DefaultNetworkOnline() OVERRIDE; |
+ virtual void RequestScan() const OVERRIDE; |
+ |
+ // NetworkLibrary::NetworkManagerObserver overrides. |
+ virtual void OnNetworkManagerChanged(NetworkLibrary* network_library); |
private: |
NetworkLibrary* network_library_; |
}; |
+ConnectivityStateHelper::ConnectivityStateHelper() { |
+} |
+ |
+ConnectivityStateHelper::~ConnectivityStateHelper() { |
+} |
+ |
// static |
void ConnectivityStateHelper::Initialize() { |
CHECK(!g_connectivity_state_helper); |
@@ -75,6 +94,11 @@ void ConnectivityStateHelper::InitializeForTesting( |
} |
// static |
+bool ConnectivityStateHelper::IsInitialized() { |
+ return g_connectivity_state_helper != NULL; |
+} |
+ |
+// static |
void ConnectivityStateHelper::Shutdown() { |
CHECK(g_connectivity_state_helper); |
delete g_connectivity_state_helper; |
@@ -88,11 +112,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() { |
+ NetworkStateHandler::Get()->RemoveObserver(this); |
+} |
bool ConnectivityStateHelperImpl::IsConnected() { |
return network_state_handler_->ConnectedNetworkByType( |
@@ -135,16 +172,28 @@ bool ConnectivityStateHelperImpl::DefaultNetworkOnline() { |
return true; |
} |
+void ConnectivityStateHelperImpl::RequestScan() const { |
+ network_state_handler_->RequestScan(); |
+} |
+ |
+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 +255,14 @@ bool ConnectivityStateHelperNetworkLibrary::DefaultNetworkOnline() { |
return true; |
} |
+void ConnectivityStateHelperNetworkLibrary::RequestScan() const { |
+ network_library_->RequestNetworkScan(); |
+} |
+ |
+void ConnectivityStateHelperNetworkLibrary::OnNetworkManagerChanged( |
+ NetworkLibrary* network_library) { |
+ FOR_EACH_OBSERVER(ConnectivityStateHelperObserver, network_manager_observers_, |
+ NetworkManagerChanged()); |
+} |
+ |
} // namespace chromeos |