- add sources.
[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) 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_