OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2012 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_NETWORK_STATE_HANDLER_H_ | |
6 #define CHROMEOS_NETWORK_NETWORK_STATE_HANDLER_H_ | |
7 | |
8 #include <map> | |
9 #include <set> | |
10 #include <string> | |
11 #include <vector> | |
12 | |
13 #include "base/gtest_prod_util.h" | |
14 #include "base/memory/scoped_ptr.h" | |
15 #include "base/observer_list.h" | |
16 #include "chromeos/chromeos_export.h" | |
17 #include "chromeos/network/managed_state.h" | |
18 #include "chromeos/network/shill_property_handler.h" | |
19 | |
20 namespace base { | |
21 class DictionaryValue; | |
22 class ListValue; | |
23 class Value; | |
24 } | |
25 | |
26 namespace chromeos { | |
27 | |
28 class DeviceState; | |
29 class NetworkState; | |
30 class NetworkStateHandlerObserver; | |
31 | |
32 // Class for tracking the list of visible networks and their state. | |
33 // | |
34 // This class maps essential state from the connection manager (Shill) for | |
35 // each visible network. It is not used to change the state of services or | |
36 // devices, only global (manager) state. | |
37 // | |
38 // All getters return the currently cached state. This class is expected to | |
39 // keep states up to date by managing the appropriate Shill observers. | |
40 // It will invoke its own more specific observer methods when the specified | |
41 // changes occur. | |
42 class CHROMEOS_EXPORT NetworkStateHandler | |
43 : public internal::ShillPropertyHandler::Delegate { | |
44 public: | |
45 typedef std::vector<ManagedState*> ManagedStateList; | |
46 typedef std::vector<const NetworkState*> NetworkStateList; | |
47 | |
48 NetworkStateHandler(); | |
49 virtual ~NetworkStateHandler(); | |
50 | |
51 // Initialize ShillPropertyHandler. | |
52 void Init(); | |
53 | |
54 // Add/remove observers. | |
55 void AddObserver(NetworkStateHandlerObserver* observer); | |
56 void RemoveObserver(NetworkStateHandlerObserver* observer); | |
57 | |
58 // Returns true if |technology| is enabled / available. | |
59 bool TechnologyAvailable(const std::string& technology) const; | |
60 bool TechnologyEnabled(const std::string& technology) const; | |
61 | |
62 // Asynchronously sets the enabled state for |technology|. | |
63 // Note: Modifes Manager state. TODO(stevenjb): Add a completion callback. | |
64 void SetTechnologyEnabled(const std::string& technology, bool enabled); | |
65 | |
66 // Finds and returns a device state by |device_path| or NULL if not found. | |
67 const DeviceState* GetDeviceState(const std::string& device_path) const; | |
68 | |
69 // Finds and returns a device state by |type|. Returns NULL if not found. | |
70 const DeviceState* GetDeviceStateByType(const std::string& type) const; | |
71 | |
72 // Finds and returns a network state by |service_path| or NULL if not found. | |
73 // Note: NetworkState is frequently updated asynchronously, i.e. properties | |
74 // are not always updated all at once. This will contain the most recent | |
75 // value for each state. To receive notifications when the state changes, | |
76 // observer this class and implement NetworkServiceChanged(). | |
77 const NetworkState* GetNetworkState(const std::string& service_path) const; | |
78 | |
79 // Returns the "active" network (first network in the list if connected), | |
80 // NULL if none. | |
81 const NetworkState* ActiveNetwork() const; | |
82 | |
83 // Returns the first connected network of type |type|, otherwise NULL. | |
84 const NetworkState* ConnectedNetworkByType(const std::string& type) const; | |
85 | |
86 // Returns the first connecting network of type |type|, otherwise NULL. | |
87 // An empty type will return any connecting non-ethernet network. | |
88 const NetworkState* ConnectingNetworkByType(const std::string& type) const; | |
89 | |
90 // Returns the hardware (MAC) address for the first connected network | |
91 // matching |type|, or an empty string if none. | |
92 std::string HardwareAddressForType(const std::string& type) const; | |
gauravsh
2012/11/06 01:56:59
There is nothing in the method name that indicates
stevenjb
2012/11/06 03:17:03
That strikes me as the kind of detail that is bett
| |
93 // Same as above but in aa:bb format. | |
94 std::string FormattedHardwareAddressForType(const std::string& type) const; | |
95 | |
96 // Sets |list| to contain the list of networks. The returned list contains | |
97 // a copy of NetworkState pointers which should not be stored or used beyond | |
98 // the scope of the calling function (i.e. they may later become invalid, but | |
99 // only on the UI thread). This also sends a scan request to Shill which may | |
100 // trigger updates to the networks (which will trigger the appropriate | |
101 // observer calls). | |
102 void GetNetworkList(NetworkStateList* list) const; | |
103 | |
104 // ShillPropertyHandler::Delegate overrides. | |
105 | |
106 // This adds new entries to the managed list specified by |type| and deletes | |
107 // any entries that are no longer in the list. | |
108 virtual void UpdateManagedList(ManagedState::ManagedType type, | |
109 const base::ListValue& entries) OVERRIDE; | |
110 | |
111 // Sets |available_technologies_| to contain only entries in |technologies|. | |
112 virtual void UpdateAvailableTechnologies( | |
113 const base::ListValue& technologies) OVERRIDE; | |
114 | |
115 // Sets |enabled_technologies_| to contain only entries in |technologies|. | |
116 virtual void UpdateEnabledTechnologies( | |
117 const base::ListValue& technologies) OVERRIDE; | |
118 | |
119 // Parses the properties for the network service or device. Mostly calls | |
120 // managed->PropertyChanged(key, value) for each dictionary entry. | |
121 virtual void UpdateManagedStateProperties( | |
122 ManagedState::ManagedType type, | |
123 const std::string& path, | |
124 const base::DictionaryValue& properties) OVERRIDE; | |
125 | |
126 // Called by ShillPropertyHandler when a watched service property changes. | |
127 // Calls ParseNetworkServiceProperty() and signals observers. | |
128 virtual void UpdateNetworkServiceProperty( | |
129 const std::string& service_path, | |
130 const std::string& key, | |
131 const base::Value& value) OVERRIDE; | |
132 | |
133 // Sets the IP Address for the network associated with |service_path|. | |
134 virtual void UpdateNetworkServiceIPAddress( | |
135 const std::string& service_path, | |
136 const std::string& ip_address) OVERRIDE; | |
137 | |
138 // Sends NetworkManagerChanged() to observers. | |
139 virtual void ManagerPropertyChanged() OVERRIDE; | |
140 | |
141 // Called by |shill_property_handler_| when the service or device list has | |
142 // changed and all entries have been updated. If |type| == TYPE_NETWORK, | |
143 // this notifies observers that the network list has changed, and if the | |
144 // active network has changed sends that notification also. | |
145 virtual void ManagedStateListChanged( | |
146 ManagedState::ManagedType type) OVERRIDE; | |
147 | |
148 private: | |
149 FRIEND_TEST_ALL_PREFIXES(NetworkStateHandlerTest, NetworkStateHandlerStub); | |
150 | |
151 // Non-const getters for managed entries. These are const so that they can | |
152 // be called by Get[Network|Device]State, even though they return non-const | |
153 // pointers. | |
154 DeviceState* GetModifiableDeviceState(const std::string& device_path) const; | |
155 NetworkState* GetModifiableNetworkState( | |
156 const std::string& service_path) const; | |
157 ManagedState* GetModifiableManagedState(const ManagedStateList* managed_list, | |
158 const std::string& path) const; | |
159 | |
160 // Casts the list specified by |type| to a list of base ManagedState pointers. | |
gauravsh
2012/11/06 01:56:59
This comment is no longer valid - this now just re
stevenjb
2012/11/06 03:17:03
Done.
| |
161 ManagedStateList* GetManagedList(ManagedState::ManagedType type); | |
162 | |
163 // Helper function called to parse |network| properties. | |
164 bool ParseNetworkServiceProperty(NetworkState* network, | |
165 const std::string& key, | |
166 const base::Value& value); | |
167 | |
168 // Shill property handler instance, owned by this class. | |
169 scoped_ptr<internal::ShillPropertyHandler> shill_property_handler_; | |
170 | |
171 // Observer list | |
172 ObserverList<NetworkStateHandlerObserver> observers_; | |
173 | |
174 // Lists of managed states | |
175 ManagedStateList network_list_; | |
176 ManagedStateList device_list_; | |
177 | |
178 // Lists of available / enabled technologies | |
179 std::set<std::string> available_technologies_; | |
180 std::set<std::string> enabled_technologies_; | |
181 | |
182 // Keeps track of the active network for notifying observers when it changes. | |
183 std::string active_network_path_; | |
184 | |
185 DISALLOW_COPY_AND_ASSIGN(NetworkStateHandler); | |
186 }; | |
187 | |
188 } // namespace chromeos | |
189 | |
190 #endif // CHROMEOS_NETWORK_NETWORK_STATE_HANDLER_H_ | |
OLD | NEW |