network_handler.h revision 2385ea399aae016c0806a4f9ef3c9cfe3d2a39df
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Copyright 2013 The Chromium Authors. All rights reserved.
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Use of this source code is governed by a BSD-style license that can be
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// found in the LICENSE file.
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef CHROMEOS_NETWORK_NETWORK_HANDLER_H_
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define CHROMEOS_NETWORK_NETWORK_HANDLER_H_
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "base/basictypes.h"
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "base/memory/scoped_ptr.h"
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "chromeos/chromeos_export.h"
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace chromeos {
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass GeolocationHandler;
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass ManagedNetworkConfigurationHandler;
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass NetworkConfigurationHandler;
17a30baf5b257c7a62c5888679e7c1ac8eb47ca6d7Jim Inghamclass NetworkConnectionHandler;
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass NetworkDeviceHandler;
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass NetworkProfileHandler;
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass NetworkStateHandler;
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass NetworkSmsHandler;
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Class for handling initialization and access to chromeos network handlers.
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This class should NOT be used in unit tests. Instead, construct individual
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// classes independently.
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass CHROMEOS_EXPORT NetworkHandler {
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public:
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  // Sets the global instance. Must be called before any calls to Get().
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  static void Initialize();
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  // Destroys the global instance.
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  static void Shutdown();
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  // Gets the global instance. Initialize() must be called first.
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  static NetworkHandler* Get();
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  // Returns true if the global instance has been initialized.
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  static bool IsInitialized();
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  // Do not use these accessors within this module; all dependencies should be
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  // explicit so that classes can be constructed explicitly in tests without
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  // NetworkHandler.
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  NetworkStateHandler* network_state_handler();
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  NetworkDeviceHandler* network_device_handler();
45a30baf5b257c7a62c5888679e7c1ac8eb47ca6d7Jim Ingham  NetworkProfileHandler* network_profile_handler();
46a30baf5b257c7a62c5888679e7c1ac8eb47ca6d7Jim Ingham  NetworkConfigurationHandler* network_configuration_handler();
47a30baf5b257c7a62c5888679e7c1ac8eb47ca6d7Jim Ingham  ManagedNetworkConfigurationHandler* managed_network_configuration_handler();
48a30baf5b257c7a62c5888679e7c1ac8eb47ca6d7Jim Ingham  NetworkConnectionHandler* network_connection_handler();
49a30baf5b257c7a62c5888679e7c1ac8eb47ca6d7Jim Ingham  NetworkSmsHandler* network_sms_handler();
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  GeolocationHandler* geolocation_handler();
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner private:
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  NetworkHandler();
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner  virtual ~NetworkHandler();
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
56a30baf5b257c7a62c5888679e7c1ac8eb47ca6d7Jim Ingham  void Init();
57a30baf5b257c7a62c5888679e7c1ac8eb47ca6d7Jim Ingham
58a30baf5b257c7a62c5888679e7c1ac8eb47ca6d7Jim Ingham  // The order of these determines the (inverse) destruction order.
59a30baf5b257c7a62c5888679e7c1ac8eb47ca6d7Jim Ingham  scoped_ptr<NetworkStateHandler> network_state_handler_;
60a30baf5b257c7a62c5888679e7c1ac8eb47ca6d7Jim Ingham  scoped_ptr<NetworkDeviceHandler> network_device_handler_;
6154e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton  scoped_ptr<NetworkProfileHandler> network_profile_handler_;
62a30baf5b257c7a62c5888679e7c1ac8eb47ca6d7Jim Ingham  scoped_ptr<NetworkConfigurationHandler> network_configuration_handler_;
63a30baf5b257c7a62c5888679e7c1ac8eb47ca6d7Jim Ingham  scoped_ptr<ManagedNetworkConfigurationHandler>
64a30baf5b257c7a62c5888679e7c1ac8eb47ca6d7Jim Ingham      managed_network_configuration_handler_;
65a30baf5b257c7a62c5888679e7c1ac8eb47ca6d7Jim Ingham  scoped_ptr<NetworkConnectionHandler> network_connection_handler_;
66a30baf5b257c7a62c5888679e7c1ac8eb47ca6d7Jim Ingham  scoped_ptr<NetworkSmsHandler> network_sms_handler_;
67a30baf5b257c7a62c5888679e7c1ac8eb47ca6d7Jim Ingham  scoped_ptr<GeolocationHandler> geolocation_handler_;
68a30baf5b257c7a62c5888679e7c1ac8eb47ca6d7Jim Ingham
69b1a9862ba1ceb219b6042ff3f8c6ff591867ae26Greg Clayton  DISALLOW_COPY_AND_ASSIGN(NetworkHandler);
70a30baf5b257c7a62c5888679e7c1ac8eb47ca6d7Jim Ingham};
71a30baf5b257c7a62c5888679e7c1ac8eb47ca6d7Jim Ingham
72a30baf5b257c7a62c5888679e7c1ac8eb47ca6d7Jim Ingham}  // namespace chromeos
7354e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton
74a30baf5b257c7a62c5888679e7c1ac8eb47ca6d7Jim Ingham#endif  // CHROMEOS_NETWORK_NETWORK_HANDLER_H_
75a30baf5b257c7a62c5888679e7c1ac8eb47ca6d7Jim Ingham