Home | History | Annotate | Download | only in networking_private
      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