managed_network_configuration_handler_impl.h revision 58537e28ecd584eab876aee8be7156509866d23a
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/weak_ptr.h"
14#include "chromeos/chromeos_export.h"
15#include "chromeos/network/managed_network_configuration_handler.h"
16#include "chromeos/network/network_handler_callbacks.h"
17#include "chromeos/network/network_profile_observer.h"
18#include "chromeos/network/policy_applicator.h"
19
20namespace base {
21class DictionaryValue;
22}
23
24namespace chromeos {
25
26class NetworkConfigurationHandler;
27struct NetworkProfile;
28class NetworkProfileHandler;
29class NetworkStateHandler;
30
31class CHROMEOS_EXPORT ManagedNetworkConfigurationHandlerImpl
32    : public ManagedNetworkConfigurationHandler,
33      public NetworkProfileObserver,
34      public PolicyApplicator::ConfigurationHandler {
35 public:
36  typedef std::map<std::string, const base::DictionaryValue*> GuidToPolicyMap;
37  typedef std::map<std::string, GuidToPolicyMap> UserToPoliciesMap;
38
39  virtual ~ManagedNetworkConfigurationHandlerImpl();
40
41  // ManagedNetworkConfigurationHandler overrides
42  virtual void AddObserver(NetworkPolicyObserver* observer) OVERRIDE;
43  virtual void RemoveObserver(NetworkPolicyObserver* observer) OVERRIDE;
44
45  virtual void GetProperties(
46      const std::string& service_path,
47      const network_handler::DictionaryResultCallback& callback,
48      const network_handler::ErrorCallback& error_callback) const OVERRIDE;
49
50  virtual void GetManagedProperties(
51      const std::string& userhash,
52      const std::string& service_path,
53      const network_handler::DictionaryResultCallback& callback,
54      const network_handler::ErrorCallback& error_callback) OVERRIDE;
55
56  virtual void SetProperties(
57      const std::string& service_path,
58      const base::DictionaryValue& user_settings,
59      const base::Closure& callback,
60      const network_handler::ErrorCallback& error_callback) const OVERRIDE;
61
62  virtual void CreateConfiguration(
63      const std::string& userhash,
64      const base::DictionaryValue& properties,
65      const network_handler::StringResultCallback& callback,
66      const network_handler::ErrorCallback& error_callback) const OVERRIDE;
67
68  virtual void RemoveConfiguration(
69      const std::string& service_path,
70      const base::Closure& callback,
71      const network_handler::ErrorCallback& error_callback) const OVERRIDE;
72
73  virtual void SetPolicy(onc::ONCSource onc_source,
74                         const std::string& userhash,
75                         const base::ListValue& network_configs_onc) 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* FindPolicyByGuidAndProfile(
83      const std::string& guid,
84      const std::string& profile_path) const OVERRIDE;
85
86  // NetworkProfileObserver overrides
87  virtual void OnProfileAdded(const NetworkProfile& profile) OVERRIDE;
88  virtual void OnProfileRemoved(const NetworkProfile& profile) OVERRIDE;
89
90  // PolicyApplicator::ConfigurationHandler overrides
91  virtual void CreateConfigurationFromPolicy(
92      const base::DictionaryValue& shill_properties) OVERRIDE;
93
94 private:
95  friend class ClientCertResolverTest;
96  friend class NetworkHandler;
97  friend class ManagedNetworkConfigurationHandlerTest;
98
99  ManagedNetworkConfigurationHandlerImpl();
100
101  void Init(NetworkStateHandler* network_state_handler,
102            NetworkProfileHandler* network_profile_handler,
103            NetworkConfigurationHandler* network_configuration_handler);
104
105  void GetManagedPropertiesCallback(
106      const network_handler::DictionaryResultCallback& callback,
107      const network_handler::ErrorCallback& error_callback,
108      const std::string& service_path,
109      const base::DictionaryValue& shill_properties);
110
111  const GuidToPolicyMap* GetPoliciesForUser(const std::string& userhash) const;
112  const GuidToPolicyMap* GetPoliciesForProfile(
113      const NetworkProfile& profile) const;
114
115  void OnPolicyApplied(const std::string& service_path);
116
117  // The DictionaryValues of the nested maps are owned by this class and are
118  // explicitly deleted where necessary. If present, the empty string maps to
119  // the device policy.
120  UserToPoliciesMap policies_by_user_;
121
122  // Local references to the associated handler instances.
123  NetworkStateHandler* network_state_handler_;
124  NetworkProfileHandler* network_profile_handler_;
125  NetworkConfigurationHandler* network_configuration_handler_;
126
127  ObserverList<NetworkPolicyObserver> observers_;
128
129  // For Shill client callbacks
130  base::WeakPtrFactory<ManagedNetworkConfigurationHandlerImpl>
131      weak_ptr_factory_;
132
133  DISALLOW_COPY_AND_ASSIGN(ManagedNetworkConfigurationHandlerImpl);
134};
135
136}  // namespace chromeos
137
138#endif  // CHROMEOS_NETWORK_MANAGED_NETWORK_CONFIGURATION_HANDLER_IMPL_H_
139