Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chromeos / network / managed_network_configuration_handler_impl.h
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_