1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_EVENT_ROUTER_H_ 6 #define CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_EVENT_ROUTER_H_ 7 8 #include "chrome/browser/extensions/event_router.h" 9 #include "chromeos/network/network_state_handler_observer.h" 10 #include "components/browser_context_keyed_service/browser_context_keyed_service.h" 11 12 class Profile; 13 14 namespace chromeos { 15 16 // This is a factory class used by the BrowserContextDependencyManager 17 // to instantiate the event router that will forward events 18 // from the NetworkStateHandler to the JavaScript Networking API. 19 class NetworkingPrivateEventRouter : public BrowserContextKeyedService, 20 public extensions::EventRouter::Observer, 21 public NetworkStateHandlerObserver { 22 public: 23 explicit NetworkingPrivateEventRouter(Profile* profile); 24 virtual ~NetworkingPrivateEventRouter(); 25 26 protected: 27 // BrowserContextKeyedService overrides: 28 virtual void Shutdown() OVERRIDE; 29 30 // EventRouter::Observer overrides: 31 virtual void OnListenerAdded( 32 const extensions::EventListenerInfo& details) OVERRIDE; 33 virtual void OnListenerRemoved( 34 const extensions::EventListenerInfo& details) OVERRIDE; 35 36 // NetworkStateHandlerObserver overrides: 37 virtual void NetworkListChanged() OVERRIDE; 38 virtual void NetworkPropertiesUpdated(const NetworkState* network) OVERRIDE; 39 40 private: 41 // Decide if we should listen for network changes or not. If there are any 42 // JavaScript listeners registered for the onNetworkChanged event, then we 43 // want to register for change notification from the network state handler. 44 // Otherwise, we want to unregister and not be listening to network changes. 45 void StartOrStopListeningForNetworkChanges(); 46 47 Profile* profile_; 48 bool listening_; 49 50 DISALLOW_COPY_AND_ASSIGN(NetworkingPrivateEventRouter); 51 }; 52 53 } // namespace chromeos 54 55 #endif // CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_EVENT_ROUTER_H_ 56 57