Index: chrome/browser/extensions/api/networking_private/networking_private_event_router_chromeos.cc |
diff --git a/chrome/browser/extensions/api/networking_private/networking_private_event_router_chromeos.cc b/chrome/browser/extensions/api/networking_private/networking_private_event_router_chromeos.cc |
index 969983372c020f27957faf31f93150a6d8beff9b..adf110c913dfdc645125a44233b327cc50d996ac 100644 |
--- a/chrome/browser/extensions/api/networking_private/networking_private_event_router_chromeos.cc |
+++ b/chrome/browser/extensions/api/networking_private/networking_private_event_router_chromeos.cc |
@@ -15,19 +15,53 @@ |
#include "chromeos/network/network_event_log.h" |
#include "chromeos/network/network_state.h" |
#include "chromeos/network/network_state_handler.h" |
+#include "chromeos/network/network_state_handler_observer.h" |
#include "chromeos/network/onc/onc_signature.h" |
#include "chromeos/network/onc/onc_translator.h" |
#include "components/browser_context_keyed_service/browser_context_dependency_manager.h" |
#include "components/onc/onc_constants.h" |
#include "third_party/cros_system_api/dbus/service_constants.h" |
-using extensions::EventRouter; |
-using extensions::ExtensionSystem; |
-namespace api = extensions::api::networking_private; |
+using chromeos::NetworkHandler; |
+using chromeos::NetworkState; |
+using chromeos::NetworkStateHandler; |
-namespace chromeos { |
+namespace extensions { |
-NetworkingPrivateEventRouter::NetworkingPrivateEventRouter(Profile* profile) |
+class NetworkingPrivateEventRouterImpl |
+ : public NetworkingPrivateEventRouter, |
+ public chromeos::NetworkStateHandlerObserver { |
+ public: |
+ explicit NetworkingPrivateEventRouterImpl(Profile* profile); |
+ virtual ~NetworkingPrivateEventRouterImpl(); |
+ |
+ protected: |
+ // BrowserContextKeyedService overrides: |
+ virtual void Shutdown() OVERRIDE; |
+ |
+ // EventRouter::Observer overrides: |
+ virtual void OnListenerAdded(const EventListenerInfo& details) OVERRIDE; |
+ virtual void OnListenerRemoved(const EventListenerInfo& details) OVERRIDE; |
+ |
+ // NetworkStateHandlerObserver overrides: |
+ virtual void NetworkListChanged() OVERRIDE; |
+ virtual void NetworkPropertiesUpdated(const NetworkState* network) OVERRIDE; |
+ |
+ private: |
+ // Decide if we should listen for network changes or not. If there are any |
+ // JavaScript listeners registered for the onNetworkChanged event, then we |
+ // want to register for change notification from the network state handler. |
+ // Otherwise, we want to unregister and not be listening to network changes. |
+ void StartOrStopListeningForNetworkChanges(); |
+ |
+ Profile* profile_; |
+ bool listening_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(NetworkingPrivateEventRouterImpl); |
+}; |
+ |
+NetworkingPrivateEventRouterImpl::NetworkingPrivateEventRouterImpl( |
+ Profile* profile) |
: profile_(profile), listening_(false) { |
// Register with the event router so we know when renderers are listening to |
// our events. We first check and see if there *is* an event router, because |
@@ -36,18 +70,18 @@ NetworkingPrivateEventRouter::NetworkingPrivateEventRouter(Profile* profile) |
EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router(); |
if (event_router) { |
event_router->RegisterObserver( |
- this, api::OnNetworksChanged::kEventName); |
+ this, api::networking_private::OnNetworksChanged::kEventName); |
event_router->RegisterObserver( |
- this, api::OnNetworkListChanged::kEventName); |
+ this, api::networking_private::OnNetworkListChanged::kEventName); |
StartOrStopListeningForNetworkChanges(); |
} |
} |
-NetworkingPrivateEventRouter::~NetworkingPrivateEventRouter() { |
+NetworkingPrivateEventRouterImpl::~NetworkingPrivateEventRouterImpl() { |
DCHECK(!listening_); |
} |
-void NetworkingPrivateEventRouter::Shutdown() { |
+void NetworkingPrivateEventRouterImpl::Shutdown() { |
// Unregister with the event router. We first check and see if there *is* an |
// event router, because some unit tests try to shutdown all profile services, |
// but didn't initialize the event router first. |
@@ -62,24 +96,26 @@ void NetworkingPrivateEventRouter::Shutdown() { |
listening_ = false; |
} |
-void NetworkingPrivateEventRouter::OnListenerAdded( |
- const extensions::EventListenerInfo& details) { |
+void NetworkingPrivateEventRouterImpl::OnListenerAdded( |
+ const EventListenerInfo& details) { |
// Start listening to events from the network state handler. |
StartOrStopListeningForNetworkChanges(); |
} |
-void NetworkingPrivateEventRouter::OnListenerRemoved( |
- const extensions::EventListenerInfo& details) { |
+void NetworkingPrivateEventRouterImpl::OnListenerRemoved( |
+ const EventListenerInfo& details) { |
// Stop listening to events from the network state handler if there are no |
// more listeners. |
StartOrStopListeningForNetworkChanges(); |
} |
-void NetworkingPrivateEventRouter::StartOrStopListeningForNetworkChanges() { |
+void NetworkingPrivateEventRouterImpl::StartOrStopListeningForNetworkChanges() { |
EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router(); |
bool should_listen = |
- event_router->HasEventListener(api::OnNetworksChanged::kEventName) || |
- event_router->HasEventListener(api::OnNetworkListChanged::kEventName); |
+ event_router->HasEventListener( |
+ api::networking_private::OnNetworksChanged::kEventName) || |
+ event_router->HasEventListener( |
+ api::networking_private::OnNetworkListChanged::kEventName); |
if (should_listen && !listening_) { |
NetworkHandler::Get()->network_state_handler()->AddObserver( |
@@ -91,11 +127,12 @@ void NetworkingPrivateEventRouter::StartOrStopListeningForNetworkChanges() { |
listening_ = should_listen; |
} |
-void NetworkingPrivateEventRouter::NetworkListChanged() { |
+void NetworkingPrivateEventRouterImpl::NetworkListChanged() { |
EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router(); |
NetworkStateHandler::NetworkStateList networks; |
NetworkHandler::Get()->network_state_handler()->GetNetworkList(&networks); |
- if (!event_router->HasEventListener(api::OnNetworkListChanged::kEventName)) { |
+ if (!event_router->HasEventListener( |
+ api::networking_private::OnNetworkListChanged::kEventName)) { |
// TODO(stevenjb): Remove logging once crbug.com/256881 is fixed |
// (or at least reduce to LOG_DEBUG). Same with NET_LOG events below. |
NET_LOG_EVENT("NetworkingPrivate.NetworkListChanged: No Listeners", ""); |
@@ -106,35 +143,44 @@ void NetworkingPrivateEventRouter::NetworkListChanged() { |
std::vector<std::string> changes; |
for (NetworkStateHandler::NetworkStateList::const_iterator iter = |
- networks.begin(); iter != networks.end(); ++iter) { |
+ networks.begin(); |
+ iter != networks.end(); |
+ ++iter) { |
// TODO(gspencer): Currently the "GUID" is actually the service path. Fix |
// this to be the real GUID once we're using |
// ManagedNetworkConfigurationManager. |
changes.push_back((*iter)->path()); |
} |
- scoped_ptr<base::ListValue> args(api::OnNetworkListChanged::Create(changes)); |
- scoped_ptr<extensions::Event> extension_event(new extensions::Event( |
- api::OnNetworkListChanged::kEventName, args.Pass())); |
+ scoped_ptr<base::ListValue> args( |
+ api::networking_private::OnNetworkListChanged::Create(changes)); |
+ scoped_ptr<Event> extension_event(new Event( |
+ api::networking_private::OnNetworkListChanged::kEventName, args.Pass())); |
event_router->BroadcastEvent(extension_event.Pass()); |
} |
-void NetworkingPrivateEventRouter::NetworkPropertiesUpdated( |
+void NetworkingPrivateEventRouterImpl::NetworkPropertiesUpdated( |
const NetworkState* network) { |
EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router(); |
- if (!event_router->HasEventListener(api::OnNetworksChanged::kEventName)) { |
+ if (!event_router->HasEventListener( |
+ api::networking_private::OnNetworksChanged::kEventName)) { |
NET_LOG_EVENT("NetworkingPrivate.NetworkPropertiesUpdated: No Listeners", |
network->path()); |
return; |
} |
NET_LOG_EVENT("NetworkingPrivate.NetworkPropertiesUpdated", |
network->path()); |
- scoped_ptr<base::ListValue> args(api::OnNetworksChanged::Create( |
- std::vector<std::string>(1, network->path()))); |
- scoped_ptr<extensions::Event> extension_event( |
- new extensions::Event(api::OnNetworksChanged::kEventName, args.Pass())); |
+ scoped_ptr<base::ListValue> args( |
+ api::networking_private::OnNetworksChanged::Create( |
+ std::vector<std::string>(1, network->path()))); |
+ scoped_ptr<Event> extension_event(new Event( |
+ api::networking_private::OnNetworksChanged::kEventName, args.Pass())); |
event_router->BroadcastEvent(extension_event.Pass()); |
} |
-} // namespace chromeos |
+NetworkingPrivateEventRouter* NetworkingPrivateEventRouter::Create( |
+ Profile* profile) { |
+ return new NetworkingPrivateEventRouterImpl(profile); |
+} |
+} // namespace extensions |