| // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #ifndef CHROMEOS_NETWORK_NETWORK_CONNECT_H_ | 
 | #define CHROMEOS_NETWORK_NETWORK_CONNECT_H_ | 
 |  | 
 | #include <string> | 
 |  | 
 | #include "base/component_export.h" | 
 | #include "base/macros.h" | 
 | #include "base/strings/string16.h" | 
 |  | 
 | namespace base { | 
 | class DictionaryValue; | 
 | } | 
 |  | 
 | namespace chromeos { | 
 |  | 
 | class NetworkTypePattern; | 
 |  | 
 | // NetworkConnect is a state machine designed to handle the complex UI flows | 
 | // associated with connecting to a network (and related tasks). Any showing | 
 | // of UI is handled by the NetworkConnect::Delegate implementation. | 
 | class COMPONENT_EXPORT(CHROMEOS_NETWORK) NetworkConnect { | 
 |  public: | 
 |   class COMPONENT_EXPORT(CHROMEOS_NETWORK) Delegate { | 
 |    public: | 
 |     // Shows UI to configure or activate the network specified by |network_id|, | 
 |     // which may include showing Payment or Portal UI when appropriate. | 
 |     virtual void ShowNetworkConfigure(const std::string& network_id) = 0; | 
 |  | 
 |     // Shows the settings related to network. If |network_id| is not empty, | 
 |     // show the settings for that network. | 
 |     virtual void ShowNetworkSettings(const std::string& network_id) = 0; | 
 |  | 
 |     // Shows UI to enroll the network specified by |network_id| if appropriate | 
 |     // and returns true, otherwise returns false. | 
 |     virtual bool ShowEnrollNetwork(const std::string& network_id) = 0; | 
 |  | 
 |     // Shows UI to setup a mobile network. | 
 |     virtual void ShowMobileSetupDialog(const std::string& network_id) = 0; | 
 |  | 
 |     // Shows an error notification. |error_name| is an error defined in | 
 |     // NetworkConnectionHandler. |network_id| may be empty. | 
 |     virtual void ShowNetworkConnectError(const std::string& error_name, | 
 |                                          const std::string& network_id) = 0; | 
 |  | 
 |     // Shows an error notification during mobile activation. | 
 |     virtual void ShowMobileActivationError(const std::string& network_id) = 0; | 
 |  | 
 |    protected: | 
 |     virtual ~Delegate() {} | 
 |   }; | 
 |  | 
 |   // Creates the global NetworkConnect object. |delegate| is owned by the | 
 |   // caller. | 
 |   static void Initialize(Delegate* delegate); | 
 |  | 
 |   // Destroys the global NetworkConnect object. | 
 |   static void Shutdown(); | 
 |  | 
 |   // Returns true if the global NetworkConnect object is initialized. | 
 |   static bool IsInitialized(); | 
 |  | 
 |   // Returns the global NetworkConnect object if initialized or null. | 
 |   static NetworkConnect* Get(); | 
 |  | 
 |   virtual ~NetworkConnect(); | 
 |  | 
 |   // Requests a network connection and handles any errors and notifications. | 
 |   virtual void ConnectToNetworkId(const std::string& network_id) = 0; | 
 |  | 
 |   // Requests a network disconnection. Ignores any errors and notifications. | 
 |   virtual void DisconnectFromNetworkId(const std::string& network_id) = 0; | 
 |  | 
 |   // Enables or disables a network technology. If |technology| refers to | 
 |   // cellular and the device cannot be enabled due to a SIM lock, this function | 
 |   // will launch the SIM unlock dialog. | 
 |   virtual void SetTechnologyEnabled( | 
 |       const chromeos::NetworkTypePattern& technology, | 
 |       bool enabled_state) = 0; | 
 |  | 
 |   // Determines whether or not a network requires a connection to activate or | 
 |   // setup and either shows a notification or opens the mobile setup dialog. | 
 |   virtual void ShowMobileSetup(const std::string& network_id) = 0; | 
 |  | 
 |   // Configures a network with a dictionary of Shill properties, then sends a | 
 |   // connect request. The profile is set according to 'shared' if allowed. | 
 |   // TODO(stevenjb): Use ONC properties instead of shill. | 
 |   virtual void ConfigureNetworkIdAndConnect( | 
 |       const std::string& network_id, | 
 |       const base::DictionaryValue& shill_properties, | 
 |       bool shared) = 0; | 
 |  | 
 |   // Requests a new network configuration to be created from a dictionary of | 
 |   // Shill properties and sends a connect request if the configuration succeeds. | 
 |   // The profile used is determined by |shared|. | 
 |   // TODO(stevenjb): Use ONC properties instead of shill. | 
 |   virtual void CreateConfigurationAndConnect( | 
 |       base::DictionaryValue* shill_properties, | 
 |       bool shared) = 0; | 
 |  | 
 |   // Requests a new network configuration to be created from a dictionary of | 
 |   // Shill properties. The profile used is determined by |shared|. | 
 |   virtual void CreateConfiguration(base::DictionaryValue* shill_properties, | 
 |                                    bool shared) = 0; | 
 |  | 
 |  protected: | 
 |   NetworkConnect(); | 
 |  | 
 |  private: | 
 |   DISALLOW_COPY_AND_ASSIGN(NetworkConnect); | 
 | }; | 
 |  | 
 | }  // namespace chromeos | 
 |  | 
 | #endif  // CHROMEOS_NETWORK_NETWORK_CONNECT_H_ |