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) const 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 private: 102 friend class ClientCertResolverTest; 103 friend class NetworkHandler; 104 friend class ManagedNetworkConfigurationHandlerTest; 105 106 struct Policies; 107 typedef std::map<std::string, linked_ptr<Policies> > UserToPoliciesMap; 108 109 ManagedNetworkConfigurationHandlerImpl(); 110 111 void Init(NetworkStateHandler* network_state_handler, 112 NetworkProfileHandler* network_profile_handler, 113 NetworkConfigurationHandler* network_configuration_handler); 114 115 void GetManagedPropertiesCallback( 116 const network_handler::DictionaryResultCallback& callback, 117 const network_handler::ErrorCallback& error_callback, 118 const std::string& service_path, 119 const base::DictionaryValue& shill_properties); 120 121 const Policies* GetPoliciesForUser(const std::string& userhash) const; 122 const Policies* GetPoliciesForProfile(const NetworkProfile& profile) const; 123 124 void OnPolicyApplied(const std::string& service_path); 125 126 // If present, the empty string maps to the device policy. 127 UserToPoliciesMap policies_by_user_; 128 129 // Local references to the associated handler instances. 130 NetworkStateHandler* network_state_handler_; 131 NetworkProfileHandler* network_profile_handler_; 132 NetworkConfigurationHandler* network_configuration_handler_; 133 134 ObserverList<NetworkPolicyObserver> observers_; 135 136 // For Shill client callbacks 137 base::WeakPtrFactory<ManagedNetworkConfigurationHandlerImpl> 138 weak_ptr_factory_; 139 140 DISALLOW_COPY_AND_ASSIGN(ManagedNetworkConfigurationHandlerImpl); 141 }; 142 143 } // namespace chromeos 144 145 #endif // CHROMEOS_NETWORK_MANAGED_NETWORK_CONFIGURATION_HANDLER_IMPL_H_ 146