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.
5 #ifndef CHROMEOS_NETWORK_MANAGED_NETWORK_CONFIGURATION_HANDLER_IMPL_H_
6 #define CHROMEOS_NETWORK_MANAGED_NETWORK_CONFIGURATION_HANDLER_IMPL_H_
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"
22 class DictionaryValue
;
27 class NetworkConfigurationHandler
;
28 struct NetworkProfile
;
29 class NetworkProfileHandler
;
30 class NetworkStateHandler
;
32 class CHROMEOS_EXPORT ManagedNetworkConfigurationHandlerImpl
33 : public ManagedNetworkConfigurationHandler
,
34 public NetworkProfileObserver
,
35 public PolicyApplicator::ConfigurationHandler
{
37 virtual ~ManagedNetworkConfigurationHandlerImpl();
39 // ManagedNetworkConfigurationHandler overrides
40 virtual void AddObserver(NetworkPolicyObserver
* observer
) OVERRIDE
;
41 virtual void RemoveObserver(NetworkPolicyObserver
* observer
) OVERRIDE
;
43 virtual void GetProperties(
44 const std::string
& service_path
,
45 const network_handler::DictionaryResultCallback
& callback
,
46 const network_handler::ErrorCallback
& error_callback
) OVERRIDE
;
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
;
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
;
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
;
66 virtual void RemoveConfiguration(
67 const std::string
& service_path
,
68 const base::Closure
& callback
,
69 const network_handler::ErrorCallback
& error_callback
) const OVERRIDE
;
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
;
77 virtual const base::DictionaryValue
* FindPolicyByGUID(
78 const std::string userhash
,
79 const std::string
& guid
,
80 onc::ONCSource
* onc_source
) const OVERRIDE
;
82 virtual const base::DictionaryValue
* GetGlobalConfigFromPolicy(
83 const std::string userhash
) const OVERRIDE
;
85 virtual const base::DictionaryValue
* FindPolicyByGuidAndProfile(
86 const std::string
& guid
,
87 const std::string
& profile_path
) const OVERRIDE
;
89 // NetworkProfileObserver overrides
90 virtual void OnProfileAdded(const NetworkProfile
& profile
) OVERRIDE
;
91 virtual void OnProfileRemoved(const NetworkProfile
& profile
) OVERRIDE
;
93 // PolicyApplicator::ConfigurationHandler overrides
94 virtual void CreateConfigurationFromPolicy(
95 const base::DictionaryValue
& shill_properties
) OVERRIDE
;
97 virtual void UpdateExistingConfigurationWithPropertiesFromPolicy(
98 const base::DictionaryValue
& existing_properties
,
99 const base::DictionaryValue
& new_properties
) OVERRIDE
;
101 virtual void OnPoliciesApplied() OVERRIDE
;
104 friend class ClientCertResolverTest
;
105 friend class ManagedNetworkConfigurationHandlerTest
;
106 friend class NetworkConnectionHandlerTest
;
107 friend class NetworkHandler
;
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
;
115 ManagedNetworkConfigurationHandlerImpl();
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
);
124 // Sends the response to the caller of GetManagedProperties.
125 void SendManagedProperties(
126 const network_handler::DictionaryResultCallback
& callback
,
127 const network_handler::ErrorCallback
& error_callback
,
128 const std::string
& service_path
,
129 scoped_ptr
<base::DictionaryValue
> shill_properties
);
131 // Sends the response to the caller of GetProperties.
133 const network_handler::DictionaryResultCallback
& callback
,
134 const network_handler::ErrorCallback
& error_callback
,
135 const std::string
& service_path
,
136 scoped_ptr
<base::DictionaryValue
> shill_properties
);
138 const Policies
* GetPoliciesForUser(const std::string
& userhash
) const;
139 const Policies
* GetPoliciesForProfile(const NetworkProfile
& profile
) const;
141 void OnPolicyAppliedToNetwork(const std::string
& service_path
);
143 // Helper method to append associated Device properties to |properties|.
144 void GetDeviceStateProperties(const std::string
& service_path
,
145 base::DictionaryValue
* properties
);
147 // Callback for NetworkConfigurationHandler::GetProperties requests from
148 // Get{Managed}Properties. This callback fills in properties from
149 // DeviceState and may request additional Device properties.
150 // Note: Requesting Device properties requires an additional fetch and
151 // additional copying of data, so we only do it for Cellular networks which
152 // contain a lot of necessary state in the associated Device object.
153 void GetPropertiesCallback(
154 GetDevicePropertiesCallback send_callback
,
155 const std::string
& service_path
,
156 const base::DictionaryValue
& shill_properties
);
158 void GetDevicePropertiesSuccess(
159 const std::string
& service_path
,
160 scoped_ptr
<base::DictionaryValue
> network_properties
,
161 GetDevicePropertiesCallback send_callback
,
162 const std::string
& device_path
,
163 const base::DictionaryValue
& device_properties
);
164 void GetDevicePropertiesFailure(
165 const std::string
& service_path
,
166 scoped_ptr
<base::DictionaryValue
> network_properties
,
167 GetDevicePropertiesCallback send_callback
,
168 const std::string
& error_name
,
169 scoped_ptr
<base::DictionaryValue
> error_data
);
171 // If present, the empty string maps to the device policy.
172 UserToPoliciesMap policies_by_user_
;
174 // Local references to the associated handler instances.
175 NetworkStateHandler
* network_state_handler_
;
176 NetworkProfileHandler
* network_profile_handler_
;
177 NetworkConfigurationHandler
* network_configuration_handler_
;
178 NetworkDeviceHandler
* network_device_handler_
;
180 ObserverList
<NetworkPolicyObserver
> observers_
;
182 // For Shill client callbacks
183 base::WeakPtrFactory
<ManagedNetworkConfigurationHandlerImpl
>
186 DISALLOW_COPY_AND_ASSIGN(ManagedNetworkConfigurationHandlerImpl
);
189 } // namespace chromeos
191 #endif // CHROMEOS_NETWORK_MANAGED_NETWORK_CONFIGURATION_HANDLER_IMPL_H_