Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(989)

Side by Side Diff: chromeos/network/network_state_handler.h

Issue 11192024: Add chromeos::NetworkStateManager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Respond to feedback Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(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 <list>
9 #include <map>
10 #include <set>
11 #include <string>
12
13 #include "base/gtest_prod_util.h"
14 #include "base/memory/weak_ptr.h"
15 #include "base/observer_list.h"
16 #include "chromeos/chromeos_export.h"
17 #include "chromeos/dbus/dbus_method_call_status.h"
18 #include "chromeos/dbus/shill_property_changed_observer.h"
19 #include "chromeos/network/managed_state.h"
20
21 namespace base {
22 class DictionaryValue;
23 class ListValue;
24 class Value;
25 }
26
27 namespace chromeos {
28
29 class DeviceState;
30 class NetworkState;
31 class NetworkStateHandlerObserver;
32 class NetworkServiceObserver;
33 class ShillManagerClient;
34
35 // Class for tracking the list of visible networks and their state.
36 //
37 // This class maps essential state from the connection manager (Shill) for
38 // each visible network. It is not used to change the state of services or
39 // devices, only global (manager) state.
40 //
41 // All getters return the currently cached state. This class is expected to
42 // keep states up to date by managing the appropriate Shill observers.
43 // It will send invoke its own more specific observer methods when the
44 // specified changes occur.
45 //
46 // This class must not outlive the ShillManagerClient instance.
47 class CHROMEOS_EXPORT NetworkStateHandler
48 : public ShillPropertyChangedObserver {
pneubeck (no reviews) 2012/10/25 14:42:17 If you want to make the public interface cleaner,
stevenjb 2012/10/25 22:05:22 Agreed, will do that in a followup.
49 public:
50 typedef std::vector<ManagedState*> ManagedStateList;
pneubeck (no reviews) 2012/10/25 14:42:17 Why is scoped_vector<> high overhead? According to
stevenjb 2012/10/25 22:05:22 Yes, you're right, I was thinking of vector<scoped
pneubeck (no reviews) 2012/10/26 08:17:46 I added comments for the two changes that are nece
51 typedef std::vector<NetworkState*> NetworkStateList;
52 typedef std::vector<DeviceState*> DeviceStateList;
53
54 NetworkStateHandler();
55 ~NetworkStateHandler();
56
57 // Initialize NetworkStateHandler. Sends an initial property request.
58 void Init();
59
60 // Add remove observers.
61 void AddObserver(NetworkStateHandlerObserver* observer);
62 void RemoveObserver(NetworkStateHandlerObserver* observer);
63
64 // Returns true if |technology| is enabled / available.
65 bool TechnologyAvailable(const std::string& technology) const;
66 bool TechnologyEnabled(const std::string& technology) const;
67
68 // Asynchronously sets the enabled state for |technology|.
69 // Note: Modifes Manager state. TODO(stevenjb): Add a completion callback.
70 void SetTechnologyEnabled(const std::string& technology, bool enabled);
71
72 // Finds and returns a device by |path|. Returns NULL if not found.
73 const DeviceState* GetDeviceState(const std::string& path) const;
74
75 // Finds and returns a device by |type|. Returns NULL if not found.
76 const DeviceState* GetDeviceStateByType(const std::string& type) const;
77
78 // Finds and returns a network by |path|. Returns NULL if not found.
79 const NetworkState* GetNetworkState(const std::string& path) const;
80
81 // Returns the "active" network (first network in the list if connected).
82 const NetworkState* ActiveNetwork() const;
83
84 // Returns the first connected network of type |type|, otherwise NULL.
85 // An empty type will return any connected non-ethernet network.
86 const NetworkState* ConnectedNetworkByType(const std::string& type) const;
87
88 // Returns the first connecting network of type |type|, otherwise NULL.
89 // An empty type will return any connecting non-ethernet network.
90 const NetworkState* ConnectingNetworkByType(const std::string& type) const;
91
92 // Returns the hardware (MAC) address for the first connected network
93 // matching |type|, or an empty string if none.
94 std::string HardwareAddress(const std::string& type) const;
95 // Same as above but in aa:bb format.
96 std::string HardwareAddressFormatted(const std::string& type) const;
97
98 // Returns the list of networks. This also sends a scan request to Shill.
99 const NetworkStateList& GetNetworkList() const;
100
101 // ShillPropertyChangedObserver overrides.
102 virtual void OnPropertyChanged(const std::string& key,
103 const base::Value& value) OVERRIDE;
104
105 private:
106 FRIEND_TEST_ALL_PREFIXES(NetworkStateHandlerTest, NetworkStateHandlerStub);
107
108 typedef std::map<std::string, NetworkServiceObserver*>
109 NetworkServiceObserverMap;
110
111 // Non-const getters for managed entries.
112 DeviceState* GetModifiableDeviceState(const std::string& path);
113 NetworkState* GetModifiableNetworkState(const std::string& path);
114
115 // Callback for dbus method fetching properties.
116 void ManagerPropertiesCallback(DBusMethodCallStatus call_status,
117 const base::DictionaryValue& properties);
118 // Called form OnPropertyChanged() and ManagerPropertiesCallback().
119 // Returns true if observers should be notified.
120 bool ManagerPropertyChanged(const std::string& key, const base::Value& value);
121
122 // Casts the list specified by |type| to a list of base ManagedState pointers.
123 ManagedStateList* GetManagedList(ManagedState::ManagedType type);
124
125 // Adds new entries to the managed list specified by |type| and deletes any
126 // entries that are no longer in the list.
127 void UpdateManagedList(ManagedState::ManagedType type,
128 const base::ListValue& entries);
129
130 // Updates the Shill service property observers to observe any connected
131 // or connecting networks.
132 void UpdateObservedNetworkServices();
133
134 // Sets |available_technologies_| to contain only entries in |technologies|.
135 void UpdateAvailableTechnologies(const base::ListValue& technologies);
136
137 // Sets |enabled_technologies_| to contain only entries in |technologies|.
138 void UpdateEnabledTechnologies(const base::ListValue& technologies);
139
140 // Requests all properties for the service or device (called for new items).
141 void RequestProperties(ManagedState::ManagedType type,
142 const std::string& path);
143
144 // Called when Shill returns the properties for a service or device.
145 void GetPropertiesCallback(ManagedState::ManagedType type,
146 const std::string& path,
147 DBusMethodCallStatus call_status,
148 const base::DictionaryValue& properties);
149
150 // Parses the properties for the service or device. Mostly calls
151 // managed->PropertyChanged(key, value) for each dictionary entry.
152 void ParseProperties(ManagedState* managed,
153 const base::DictionaryValue& properties);
154
155 // Callback invoked when a watched service property changes. Calls
156 // network->PropertyChanged(key, value) and signals observers.
157 void NetworkServicePropertyChanged(const std::string& path,
158 const std::string& key,
159 const base::Value& value);
160
161 // Callback for getting the IPConfig property of a Network. Handled here
162 // instead of in NetworkState so that all asynchronous requests are done
163 // in a single place (also simplifies NetworkState considerably).
164 void GetIPConfigCallback(const std::string& path,
165 DBusMethodCallStatus call_status,
166 const base::DictionaryValue& properties);
167
168 // Request an immediate network scan.
169 void RequestScan() const;
170
171 // Test accessors
172 int NumObservedNetworksForTest() const { return observed_networks_.size(); }
173
174 // Convenience pointer for ShillManagerClient
175 ShillManagerClient* shill_manager_;
176
177 // Observer list
178 ObserverList<NetworkStateHandlerObserver> observers_;
179
180 // Lists of managed states
181 NetworkStateList network_list_;
182 DeviceStateList device_list_;
183
184 // Pending update count for each managed state type
185 std::map<ManagedState::ManagedType, int> pending_updates_;
186
187 // Lists of available / enabled technologies
188 std::set<std::string> available_technologies_;
189 std::set<std::string> enabled_technologies_;
190
191 // List of network services with Shill property changed observers
192 NetworkServiceObserverMap observed_networks_;
193
194 // Keep track of the active network for notifying observers when it changes.
195 std::string active_network_path_;
196
197 // For Shill client callbacks
198 base::WeakPtrFactory<NetworkStateHandler> weak_ptr_factory_;
199
200 DISALLOW_COPY_AND_ASSIGN(NetworkStateHandler);
201 };
202
203 } // namespace chromeos
204
205 #endif // CHROMEOS_NETWORK_NETWORK_STATE_HANDLER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698