OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CHROMEOS_NETWORK_NETWORK_STATE_HANDLER_H_ | 5 #ifndef CHROMEOS_NETWORK_NETWORK_STATE_HANDLER_H_ |
6 #define CHROMEOS_NETWORK_NETWORK_STATE_HANDLER_H_ | 6 #define CHROMEOS_NETWORK_NETWORK_STATE_HANDLER_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <set> | 9 #include <set> |
10 #include <string> | 10 #include <string> |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
129 const NetworkState* ConnectedNetworkByType( | 129 const NetworkState* ConnectedNetworkByType( |
130 const NetworkTypePattern& type) const; | 130 const NetworkTypePattern& type) const; |
131 | 131 |
132 // Like ConnectedNetworkByType() but returns a connecting network or NULL. | 132 // Like ConnectedNetworkByType() but returns a connecting network or NULL. |
133 const NetworkState* ConnectingNetworkByType( | 133 const NetworkState* ConnectingNetworkByType( |
134 const NetworkTypePattern& type) const; | 134 const NetworkTypePattern& type) const; |
135 | 135 |
136 // Like ConnectedNetworkByType() but returns any matching visible network or | 136 // Like ConnectedNetworkByType() but returns any matching visible network or |
137 // NULL. Mostly useful for mobile networks where there is generally only one | 137 // NULL. Mostly useful for mobile networks where there is generally only one |
138 // network. Note: O(N). | 138 // network. Note: O(N). |
139 const NetworkState* FirstNetworkByType(const NetworkTypePattern& type) const; | 139 const NetworkState* FirstNetworkByType(const NetworkTypePattern& type); |
140 | 140 |
141 // Returns the aa:bb formatted hardware (MAC) address for the first connected | 141 // Returns the aa:bb formatted hardware (MAC) address for the first connected |
142 // network matching |type|, or an empty string if none is connected. | 142 // network matching |type|, or an empty string if none is connected. |
143 std::string FormattedHardwareAddressForType( | 143 std::string FormattedHardwareAddressForType( |
144 const NetworkTypePattern& type) const; | 144 const NetworkTypePattern& type) const; |
145 | 145 |
146 // Convenience method to call GetNetworkListByType(visible=true). | 146 // Convenience method to call GetNetworkListByType(visible=true). |
147 void GetVisibleNetworkListByType(const NetworkTypePattern& type, | 147 void GetVisibleNetworkListByType(const NetworkTypePattern& type, |
148 NetworkStateList* list) const; | 148 NetworkStateList* list); |
149 | 149 |
150 // Convenience method for GetVisibleNetworkListByType(Default). | 150 // Convenience method for GetVisibleNetworkListByType(Default). |
151 void GetVisibleNetworkList(NetworkStateList* list) const; | 151 void GetVisibleNetworkList(NetworkStateList* list); |
152 | 152 |
153 // Sets |list| to contain the list of networks with matching |type| and the | 153 // Sets |list| to contain the list of networks with matching |type| and the |
154 // following properties: | 154 // following properties: |
155 // |configured_only| - if true only include networks where IsInProfile is true | 155 // |configured_only| - if true only include networks where IsInProfile is true |
156 // |visible_only| - if true only include networks in the visible Services list | 156 // |visible_only| - if true only include networks in the visible Services list |
157 // |limit| - if > 0 limits the number of results. | 157 // |limit| - if > 0 limits the number of results. |
158 // The returned list contains a copy of NetworkState pointers which should not | 158 // The returned list contains a copy of NetworkState pointers which should not |
159 // be stored or used beyond the scope of the calling function (i.e. they may | 159 // be stored or used beyond the scope of the calling function (i.e. they may |
160 // later become invalid, but only on the UI thread). | 160 // later become invalid, but only on the UI thread). SortNetworkList() will be |
161 // called if necessary to prove the states in the a convenient order (see | |
pneubeck (no reviews)
2014/06/18 09:45:49
prove? or should it be 'provide'?
'the a' -> 'a'
stevenjb
2014/06/18 22:33:26
Done.
| |
162 // SortNetworkList for details). | |
161 void GetNetworkListByType(const NetworkTypePattern& type, | 163 void GetNetworkListByType(const NetworkTypePattern& type, |
162 bool configured_only, | 164 bool configured_only, |
163 bool visible_only, | 165 bool visible_only, |
164 int limit, | 166 int limit, |
165 NetworkStateList* list) const; | 167 NetworkStateList* list); |
166 | 168 |
167 // Finds and returns the NetworkState associated with |service_path| or NULL | 169 // Finds and returns the NetworkState associated with |service_path| or NULL |
168 // if not found. If |configured_only| is true, only returns saved entries | 170 // if not found. If |configured_only| is true, only returns saved entries |
169 // (IsInProfile is true). | 171 // (IsInProfile is true). |
170 const NetworkState* GetNetworkStateFromServicePath( | 172 const NetworkState* GetNetworkStateFromServicePath( |
171 const std::string& service_path, | 173 const std::string& service_path, |
172 bool configured_only) const; | 174 bool configured_only) const; |
173 | 175 |
174 // Finds and returns the NetworkState associated with |guid| or NULL if not | 176 // Finds and returns the NetworkState associated with |guid| or NULL if not |
175 // found. This returns all entries (IsInProfile() may be true or false). | 177 // found. This returns all entries (IsInProfile() may be true or false). |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
213 void SetCheckPortalList(const std::string& check_portal_list); | 215 void SetCheckPortalList(const std::string& check_portal_list); |
214 | 216 |
215 const std::string& GetCheckPortalListForTest() const { | 217 const std::string& GetCheckPortalListForTest() const { |
216 return check_portal_list_; | 218 return check_portal_list_; |
217 } | 219 } |
218 | 220 |
219 // Returns the NetworkState of the EthernetEAP service, which contains the | 221 // Returns the NetworkState of the EthernetEAP service, which contains the |
220 // EAP parameters used by the ethernet with |service_path|. If |service_path| | 222 // EAP parameters used by the ethernet with |service_path|. If |service_path| |
221 // doesn't refer to an ethernet service or if the ethernet service is not | 223 // doesn't refer to an ethernet service or if the ethernet service is not |
222 // connected using EAP, returns NULL. | 224 // connected using EAP, returns NULL. |
223 const NetworkState* GetEAPForEthernet(const std::string& service_path) const; | 225 const NetworkState* GetEAPForEthernet(const std::string& service_path); |
224 | 226 |
225 const std::string& default_network_path() const { | 227 const std::string& default_network_path() const { |
226 return default_network_path_; | 228 return default_network_path_; |
227 } | 229 } |
228 | 230 |
229 // Construct and initialize an instance for testing. | 231 // Construct and initialize an instance for testing. |
230 static NetworkStateHandler* InitializeForTest(); | 232 static NetworkStateHandler* InitializeForTest(); |
231 | 233 |
232 // Default set of comma separated interfaces on which to enable | 234 // Default set of comma separated interfaces on which to enable |
233 // portal checking. | 235 // portal checking. |
234 static const char kDefaultCheckPortalList[]; | 236 static const char kDefaultCheckPortalList[]; |
235 | 237 |
236 protected: | 238 protected: |
237 friend class NetworkHandler; | 239 friend class NetworkHandler; |
238 NetworkStateHandler(); | 240 NetworkStateHandler(); |
239 | 241 |
240 // ShillPropertyHandler::Listener overrides. | 242 // ShillPropertyHandler::Listener overrides. |
241 | 243 |
242 // This adds new entries to |network_list_| or |device_list_| and deletes any | 244 // This adds new entries to |network_list_| or |device_list_| and deletes any |
243 // entries that are no longer in the list. | 245 // entries that are no longer in the list. |
244 virtual void UpdateManagedList(ManagedState::ManagedType type, | 246 virtual void UpdateManagedList(ManagedState::ManagedType type, |
245 const base::ListValue& entries) OVERRIDE; | 247 const base::ListValue& entries) OVERRIDE; |
246 | 248 |
247 // Updates the visibility of entries in |network_list_|. This should not | |
248 // contain entries that are not in |network_list_|. Any such entries will be | |
249 // ignored with an error message. | |
250 virtual void UpdateVisibleNetworks(const base::ListValue& entries) OVERRIDE; | |
251 | |
252 // The list of profiles changed (i.e. a user has logged in). Re-request | 249 // The list of profiles changed (i.e. a user has logged in). Re-request |
253 // properties for all services since they may have changed. | 250 // properties for all services since they may have changed. |
254 virtual void ProfileListChanged() OVERRIDE; | 251 virtual void ProfileListChanged() OVERRIDE; |
255 | 252 |
256 // Parses the properties for the network service or device. Mostly calls | 253 // Parses the properties for the network service or device. Mostly calls |
257 // managed->PropertyChanged(key, value) for each dictionary entry. | 254 // managed->PropertyChanged(key, value) for each dictionary entry. |
258 virtual void UpdateManagedStateProperties( | 255 virtual void UpdateManagedStateProperties( |
259 ManagedState::ManagedType type, | 256 ManagedState::ManagedType type, |
260 const std::string& path, | 257 const std::string& path, |
261 const base::DictionaryValue& properties) OVERRIDE; | 258 const base::DictionaryValue& properties) OVERRIDE; |
(...skipping 21 matching lines...) Expand all Loading... | |
283 // Called by ShillPropertyHandler when the portal check list manager property | 280 // Called by ShillPropertyHandler when the portal check list manager property |
284 // changes. | 281 // changes. |
285 virtual void CheckPortalListChanged( | 282 virtual void CheckPortalListChanged( |
286 const std::string& check_portal_list) OVERRIDE; | 283 const std::string& check_portal_list) OVERRIDE; |
287 | 284 |
288 // Called by ShillPropertyHandler when a technology list changes. | 285 // Called by ShillPropertyHandler when a technology list changes. |
289 virtual void TechnologyListChanged() OVERRIDE; | 286 virtual void TechnologyListChanged() OVERRIDE; |
290 | 287 |
291 // Called by |shill_property_handler_| when the service or device list has | 288 // Called by |shill_property_handler_| when the service or device list has |
292 // changed and all entries have been updated. This updates the list and | 289 // changed and all entries have been updated. This updates the list and |
293 // notifies observers. If |type| == TYPE_NETWORK this also calls | 290 // notifies observers. |
294 // CheckDefaultNetworkChanged(). | |
295 virtual void ManagedStateListChanged( | 291 virtual void ManagedStateListChanged( |
296 ManagedState::ManagedType type) OVERRIDE; | 292 ManagedState::ManagedType type) OVERRIDE; |
297 | 293 |
298 // Called when the default network service changes. Sets default_network_path_ | 294 // Called when the default network service changes. Sets default_network_path_ |
299 // and notifies listeners. | 295 // and notifies listeners. |
300 virtual void DefaultNetworkServiceChanged( | 296 virtual void DefaultNetworkServiceChanged( |
301 const std::string& service_path) OVERRIDE; | 297 const std::string& service_path) OVERRIDE; |
302 | 298 |
303 // Called after construction. Called explicitly by tests after adding | 299 // Called after construction. Called explicitly by tests after adding |
304 // test observers. | 300 // test observers. |
305 void InitShillPropertyHandler(); | 301 void InitShillPropertyHandler(); |
306 | 302 |
307 private: | 303 private: |
308 typedef std::list<base::Closure> ScanCallbackList; | 304 typedef std::list<base::Closure> ScanCallbackList; |
309 typedef std::map<std::string, ScanCallbackList> ScanCompleteCallbackMap; | 305 typedef std::map<std::string, ScanCallbackList> ScanCompleteCallbackMap; |
310 typedef std::map<std::string, std::string> SpecifierGuidMap; | 306 typedef std::map<std::string, std::string> SpecifierGuidMap; |
311 friend class NetworkStateHandlerTest; | 307 friend class NetworkStateHandlerTest; |
312 FRIEND_TEST_ALL_PREFIXES(NetworkStateHandlerTest, NetworkStateHandlerStub); | 308 FRIEND_TEST_ALL_PREFIXES(NetworkStateHandlerTest, NetworkStateHandlerStub); |
313 | 309 |
310 // Sorts the network list. Called when all network updates have been received, | |
311 // or when the network list is requested but the list is in an unsorted state. | |
312 // Networks are sorted as follows, maintaining the existing relative ordering: | |
313 // * Connected or connecting networks (should be listed first by Shill) | |
314 // * Visible non-wifi networks | |
315 // * Visible wifi networks | |
316 // * Hidden (wifi) networks | |
317 void SortNetworkList(); | |
318 | |
319 // Updates UMA stats. Called once after all requested networks are updated. | |
320 void UpdateNetworkStats(); | |
321 | |
314 // NetworkState specific method for UpdateManagedStateProperties which | 322 // NetworkState specific method for UpdateManagedStateProperties which |
315 // notifies observers. | 323 // notifies observers. |
316 void UpdateNetworkStateProperties(NetworkState* network, | 324 void UpdateNetworkStateProperties(NetworkState* network, |
317 const base::DictionaryValue& properties); | 325 const base::DictionaryValue& properties); |
318 | 326 |
319 // Ensure a valid GUID for NetworkState. | 327 // Ensure a valid GUID for NetworkState. |
320 void UpdateGuid(NetworkState* network); | 328 void UpdateGuid(NetworkState* network); |
321 | 329 |
322 // Sends DeviceListChanged() to observers and logs an event. | 330 // Sends DeviceListChanged() to observers and logs an event. |
323 void NotifyDeviceListChanged(); | 331 void NotifyDeviceListChanged(); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
356 | 364 |
357 // Shill property handler instance, owned by this class. | 365 // Shill property handler instance, owned by this class. |
358 scoped_ptr<internal::ShillPropertyHandler> shill_property_handler_; | 366 scoped_ptr<internal::ShillPropertyHandler> shill_property_handler_; |
359 | 367 |
360 // Observer list | 368 // Observer list |
361 ObserverList<NetworkStateHandlerObserver> observers_; | 369 ObserverList<NetworkStateHandlerObserver> observers_; |
362 | 370 |
363 // List of managed network states | 371 // List of managed network states |
364 ManagedStateList network_list_; | 372 ManagedStateList network_list_; |
365 | 373 |
374 // Set to true when the network list is sorted, cleared when network updates | |
375 // arrive. Used to trigger sorting when needed. | |
376 bool network_list_sorted_; | |
377 | |
366 // List of managed device states | 378 // List of managed device states |
367 ManagedStateList device_list_; | 379 ManagedStateList device_list_; |
368 | 380 |
369 // Keeps track of the default network for notifying observers when it changes. | 381 // Keeps track of the default network for notifying observers when it changes. |
370 std::string default_network_path_; | 382 std::string default_network_path_; |
371 | 383 |
372 // List of interfaces on which portal check is enabled. | 384 // List of interfaces on which portal check is enabled. |
373 std::string check_portal_list_; | 385 std::string check_portal_list_; |
374 | 386 |
375 // Callbacks to run when a scan for the technology type completes. | 387 // Callbacks to run when a scan for the technology type completes. |
376 ScanCompleteCallbackMap scan_complete_callbacks_; | 388 ScanCompleteCallbackMap scan_complete_callbacks_; |
377 | 389 |
378 // Map of network specifiers to guids. Contains an entry for each | 390 // Map of network specifiers to guids. Contains an entry for each |
379 // NetworkState that is not saved in a profile. | 391 // NetworkState that is not saved in a profile. |
380 SpecifierGuidMap specifier_guid_map_; | 392 SpecifierGuidMap specifier_guid_map_; |
381 | 393 |
382 DISALLOW_COPY_AND_ASSIGN(NetworkStateHandler); | 394 DISALLOW_COPY_AND_ASSIGN(NetworkStateHandler); |
383 }; | 395 }; |
384 | 396 |
385 } // namespace chromeos | 397 } // namespace chromeos |
386 | 398 |
387 #endif // CHROMEOS_NETWORK_NETWORK_STATE_HANDLER_H_ | 399 #endif // CHROMEOS_NETWORK_NETWORK_STATE_HANDLER_H_ |
OLD | NEW |