Home | History | Annotate | Download | only in network
      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 CHROMEOS_NETWORK_MANAGED_NETWORK_CONFIGURATION_HANDLER_IMPL_H_
      6 #define CHROMEOS_NETWORK_MANAGED_NETWORK_CONFIGURATION_HANDLER_IMPL_H_
      7 
      8 #include <map>
      9 #include <string>
     10 
     11 #include "base/basictypes.h"
     12 #include "base/compiler_specific.h"
     13 #include "base/memory/linked_ptr.h"
     14 #include "base/memory/weak_ptr.h"
     15 #include "chromeos/chromeos_export.h"
     16 #include "chromeos/network/managed_network_configuration_handler.h"
     17 #include "chromeos/network/network_handler_callbacks.h"
     18 #include "chromeos/network/network_profile_observer.h"
     19 #include "chromeos/network/policy_applicator.h"
     20 
     21 namespace base {
     22 class DictionaryValue;
     23 }
     24 
     25 namespace chromeos {
     26 
     27 class NetworkConfigurationHandler;
     28 struct NetworkProfile;
     29 class NetworkProfileHandler;
     30 class NetworkStateHandler;
     31 
     32 class CHROMEOS_EXPORT ManagedNetworkConfigurationHandlerImpl
     33     : public ManagedNetworkConfigurationHandler,
     34       public NetworkProfileObserver,
     35       public PolicyApplicator::ConfigurationHandler {
     36  public:
     37   virtual ~ManagedNetworkConfigurationHandlerImpl();
     38 
     39   // ManagedNetworkConfigurationHandler overrides
     40   virtual void AddObserver(NetworkPolicyObserver* observer) OVERRIDE;
     41   virtual void RemoveObserver(NetworkPolicyObserver* observer) OVERRIDE;
     42 
     43   virtual void GetProperties(
     44       const std::string& service_path,
     45       const network_handler::DictionaryResultCallback& callback,
     46       const network_handler::ErrorCallback& error_callback) OVERRIDE;
     47 
     48   virtual void GetManagedProperties(
     49       const std::string& userhash,
     50       const std::string& service_path,
     51       const network_handler::DictionaryResultCallback& callback,
     52       const network_handler::ErrorCallback& error_callback) OVERRIDE;
     53 
     54   virtual void SetProperties(
     55       const std::string& service_path,
     56       const base::DictionaryValue& user_settings,
     57       const base::Closure& callback,
     58       const network_handler::ErrorCallback& error_callback) const OVERRIDE;
     59 
     60   virtual void CreateConfiguration(
     61       const std::string& userhash,
     62       const base::DictionaryValue& properties,
     63       const network_handler::StringResultCallback& callback,
     64       const network_handler::ErrorCallback& error_callback) const OVERRIDE;
     65 
     66   virtual void RemoveConfiguration(
     67       const std::string& service_path,
     68       const base::Closure& callback,
     69       const network_handler::ErrorCallback& error_callback) const OVERRIDE;
     70 
     71   virtual void SetPolicy(
     72       onc::ONCSource onc_source,
     73       const std::string& userhash,
     74       const base::ListValue& network_configs_onc,
     75       const base::DictionaryValue& global_network_config) OVERRIDE;
     76 
     77   virtual const base::DictionaryValue* FindPolicyByGUID(
     78       const std::string userhash,
     79       const std::string& guid,
     80       onc::ONCSource* onc_source) const OVERRIDE;
     81 
     82   virtual const base::DictionaryValue* GetGlobalConfigFromPolicy(
     83       const std::string userhash) const OVERRIDE;
     84 
     85   virtual const base::DictionaryValue* FindPolicyByGuidAndProfile(
     86       const std::string& guid,
     87       const std::string& profile_path) const OVERRIDE;
     88 
     89   // NetworkProfileObserver overrides
     90   virtual void OnProfileAdded(const NetworkProfile& profile) OVERRIDE;
     91   virtual void OnProfileRemoved(const NetworkProfile& profile) OVERRIDE;
     92 
     93   // PolicyApplicator::ConfigurationHandler overrides
     94   virtual void CreateConfigurationFromPolicy(
     95       const base::DictionaryValue& shill_properties) OVERRIDE;
     96 
     97   virtual void UpdateExistingConfigurationWithPropertiesFromPolicy(
     98       const base::DictionaryValue& existing_properties,
     99       const base::DictionaryValue& new_properties) OVERRIDE;
    100 
    101   virtual void OnPoliciesApplied() OVERRIDE;
    102 
    103  private:
    104   friend class ClientCertResolverTest;
    105   friend class ManagedNetworkConfigurationHandlerTest;
    106   friend class NetworkConnectionHandlerTest;
    107   friend class NetworkHandler;
    108 
    109   struct Policies;
    110   typedef std::map<std::string, linked_ptr<Policies> > UserToPoliciesMap;
    111   typedef base::Callback<void(const std::string& service_path,
    112                               scoped_ptr<base::DictionaryValue> properties)>
    113       GetDevicePropertiesCallback;
    114 
    115   ManagedNetworkConfigurationHandlerImpl();
    116 
    117   // Handlers may be NULL in tests so long as they do not execute any paths
    118   // that require the handlers.
    119   void Init(NetworkStateHandler* network_state_handler,
    120             NetworkProfileHandler* network_profile_handler,
    121             NetworkConfigurationHandler* network_configuration_handler,
    122             NetworkDeviceHandler* network_device_handler);
    123 
    124   // Sends the response to the caller of GetManagedProperties.
    125   void SendManagedProperties(
    126       const std::string& userhash,
    127       const network_handler::DictionaryResultCallback& callback,
    128       const network_handler::ErrorCallback& error_callback,
    129       const std::string& service_path,
    130       scoped_ptr<base::DictionaryValue> shill_properties);
    131 
    132   // Sends the response to the caller of GetProperties.
    133   void SendProperties(
    134       const network_handler::DictionaryResultCallback& callback,
    135       const network_handler::ErrorCallback& error_callback,
    136       const std::string& service_path,
    137       scoped_ptr<base::DictionaryValue> shill_properties);
    138 
    139   const Policies* GetPoliciesForUser(const std::string& userhash) const;
    140   const Policies* GetPoliciesForProfile(const NetworkProfile& profile) const;
    141 
    142   void OnPolicyAppliedToNetwork(const std::string& service_path);
    143 
    144   // Helper method to append associated Device properties to |properties|.
    145   void GetDeviceStateProperties(const std::string& service_path,
    146                                 base::DictionaryValue* properties);
    147 
    148   // Callback for NetworkConfigurationHandler::GetProperties requests from
    149   // Get{Managed}Properties. This callback fills in properties from
    150   // DeviceState and may request additional Device properties.
    151   // Note: Requesting Device properties requires an additional fetch and
    152   // additional copying of data, so we only do it for Cellular networks which
    153   // contain a lot of necessary state in the associated Device object.
    154   void GetPropertiesCallback(
    155       GetDevicePropertiesCallback send_callback,
    156       const std::string& service_path,
    157       const base::DictionaryValue& shill_properties);
    158 
    159   void GetDevicePropertiesSuccess(
    160       const std::string& service_path,
    161       scoped_ptr<base::DictionaryValue> network_properties,
    162       GetDevicePropertiesCallback send_callback,
    163       const std::string& device_path,
    164       const base::DictionaryValue& device_properties);
    165   void GetDevicePropertiesFailure(
    166       const std::string& service_path,
    167       scoped_ptr<base::DictionaryValue> network_properties,
    168       GetDevicePropertiesCallback send_callback,
    169       const std::string& error_name,
    170       scoped_ptr<base::DictionaryValue> error_data);
    171 
    172   // If present, the empty string maps to the device policy.
    173   UserToPoliciesMap policies_by_user_;
    174 
    175   // Local references to the associated handler instances.
    176   NetworkStateHandler* network_state_handler_;
    177   NetworkProfileHandler* network_profile_handler_;
    178   NetworkConfigurationHandler* network_configuration_handler_;
    179   NetworkDeviceHandler* network_device_handler_;
    180 
    181   ObserverList<NetworkPolicyObserver> observers_;
    182 
    183   // For Shill client callbacks
    184   base::WeakPtrFactory<ManagedNetworkConfigurationHandlerImpl>
    185       weak_ptr_factory_;
    186 
    187   DISALLOW_COPY_AND_ASSIGN(ManagedNetworkConfigurationHandlerImpl);
    188 };
    189 
    190 }  // namespace chromeos
    191 
    192 #endif  // CHROMEOS_NETWORK_MANAGED_NETWORK_CONFIGURATION_HANDLER_IMPL_H_
    193