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

Side by Side Diff: net/base/network_change_notifier.h

Issue 298023005: Infer network connection type from network interface type. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add tests Created 6 years, 6 months 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
« no previous file with comments | « no previous file | net/base/network_change_notifier.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 NET_BASE_NETWORK_CHANGE_NOTIFIER_H_ 5 #ifndef NET_BASE_NETWORK_CHANGE_NOTIFIER_H_
6 #define NET_BASE_NETWORK_CHANGE_NOTIFIER_H_ 6 #define NET_BASE_NETWORK_CHANGE_NOTIFIER_H_
7 7
8 #include <vector>
9
8 #include "base/basictypes.h" 10 #include "base/basictypes.h"
11 #include "base/gtest_prod_util.h"
9 #include "base/observer_list_threadsafe.h" 12 #include "base/observer_list_threadsafe.h"
10 #include "base/time/time.h" 13 #include "base/time/time.h"
11 #include "net/base/net_export.h" 14 #include "net/base/net_export.h"
pauljensen 2014/06/20 05:58:53 Sadly I cannot include net_util.h here because it
12 15
13 class GURL; 16 class GURL;
14 17
15 namespace net { 18 namespace net {
16 19
17 struct DnsConfig; 20 struct DnsConfig;
18 class HistogramWatcher; 21 class HistogramWatcher;
19 class NetworkChangeNotifierFactory; 22 class NetworkChangeNotifierFactory;
23 struct NetworkInterface;
24 typedef std::vector<NetworkInterface> NetworkInterfaceList;
pauljensen 2014/06/20 05:58:53 This is sadly necessary because net_util.h include
mmenke 2014/06/20 15:18:57 Ugly, but fine for now. I'd argue it may make sen
20 class URLRequest; 25 class URLRequest;
21 26
22 #if defined(OS_LINUX) 27 #if defined(OS_LINUX)
23 namespace internal { 28 namespace internal {
24 class AddressTrackerLinux; 29 class AddressTrackerLinux;
25 } 30 }
26 #endif 31 #endif
27 32
28 // NetworkChangeNotifier monitors the system for network changes, and notifies 33 // NetworkChangeNotifier monitors the system for network changes, and notifies
29 // registered observers of those events. Observers may register on any thread, 34 // registered observers of those events. Observers may register on any thread,
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 // happens asynchronously, even for observers on the current thread, even in 298 // happens asynchronously, even for observers on the current thread, even in
294 // tests. 299 // tests.
295 static void NotifyObserversOfIPAddressChange(); 300 static void NotifyObserversOfIPAddressChange();
296 static void NotifyObserversOfConnectionTypeChange(); 301 static void NotifyObserversOfConnectionTypeChange();
297 static void NotifyObserversOfDNSChange(); 302 static void NotifyObserversOfDNSChange();
298 static void NotifyObserversOfNetworkChange(ConnectionType type); 303 static void NotifyObserversOfNetworkChange(ConnectionType type);
299 304
300 // Stores |config| in NetworkState and notifies observers. 305 // Stores |config| in NetworkState and notifies observers.
301 static void SetDnsConfig(const DnsConfig& config); 306 static void SetDnsConfig(const DnsConfig& config);
302 307
308 // Infer connection type from |GetNetworkList|. If all network interfaces have
309 // the same type, return it, otherwise return CONNECTION_UNKNOWN.
310 static ConnectionType ConnectionTypeFromInterfaces();
311
303 private: 312 private:
304 friend class HostResolverImplDnsTest; 313 friend class HostResolverImplDnsTest;
305 friend class NetworkChangeNotifierAndroidTest; 314 friend class NetworkChangeNotifierAndroidTest;
306 friend class NetworkChangeNotifierLinuxTest; 315 friend class NetworkChangeNotifierLinuxTest;
307 friend class NetworkChangeNotifierWinTest; 316 friend class NetworkChangeNotifierWinTest;
317 FRIEND_TEST_ALL_PREFIXES(NetworkChangeNotifierTest,
318 InterfacesToConnectionType);
308 319
309 class NetworkState; 320 class NetworkState;
310 class NetworkChangeCalculator; 321 class NetworkChangeCalculator;
311 322
323 // Infer connection type from |list|. If all network interfaces have
324 // the same type, return it, otherwise return CONNECTION_UNKNOWN.
325 static ConnectionType ConnectionTypeFromInterfaceList(
326 const NetworkInterfaceList& interfaces);
327
312 const scoped_refptr<ObserverListThreadSafe<IPAddressObserver> > 328 const scoped_refptr<ObserverListThreadSafe<IPAddressObserver> >
313 ip_address_observer_list_; 329 ip_address_observer_list_;
314 const scoped_refptr<ObserverListThreadSafe<ConnectionTypeObserver> > 330 const scoped_refptr<ObserverListThreadSafe<ConnectionTypeObserver> >
315 connection_type_observer_list_; 331 connection_type_observer_list_;
316 const scoped_refptr<ObserverListThreadSafe<DNSObserver> > 332 const scoped_refptr<ObserverListThreadSafe<DNSObserver> >
317 resolver_state_observer_list_; 333 resolver_state_observer_list_;
318 const scoped_refptr<ObserverListThreadSafe<NetworkChangeObserver> > 334 const scoped_refptr<ObserverListThreadSafe<NetworkChangeObserver> >
319 network_change_observer_list_; 335 network_change_observer_list_;
320 336
321 // The current network state. Hosts DnsConfig, exposed via GetDnsConfig. 337 // The current network state. Hosts DnsConfig, exposed via GetDnsConfig.
322 scoped_ptr<NetworkState> network_state_; 338 scoped_ptr<NetworkState> network_state_;
323 339
324 // A little-piggy-back observer that simply logs UMA histogram data. 340 // A little-piggy-back observer that simply logs UMA histogram data.
325 scoped_ptr<HistogramWatcher> histogram_watcher_; 341 scoped_ptr<HistogramWatcher> histogram_watcher_;
326 342
327 // Computes NetworkChange signal from IPAddress and ConnectionType signals. 343 // Computes NetworkChange signal from IPAddress and ConnectionType signals.
328 scoped_ptr<NetworkChangeCalculator> network_change_calculator_; 344 scoped_ptr<NetworkChangeCalculator> network_change_calculator_;
329 345
330 DISALLOW_COPY_AND_ASSIGN(NetworkChangeNotifier); 346 DISALLOW_COPY_AND_ASSIGN(NetworkChangeNotifier);
331 }; 347 };
332 348
333 } // namespace net 349 } // namespace net
334 350
335 #endif // NET_BASE_NETWORK_CHANGE_NOTIFIER_H_ 351 #endif // NET_BASE_NETWORK_CHANGE_NOTIFIER_H_
OLDNEW
« no previous file with comments | « no previous file | net/base/network_change_notifier.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698