| 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 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> | 8 #include <vector> | 
| 9 | 9 | 
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" | 
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 179    protected: | 179    protected: | 
| 180     NetworkChangeObserver() {} | 180     NetworkChangeObserver() {} | 
| 181     virtual ~NetworkChangeObserver() {} | 181     virtual ~NetworkChangeObserver() {} | 
| 182 | 182 | 
| 183    private: | 183    private: | 
| 184     DISALLOW_COPY_AND_ASSIGN(NetworkChangeObserver); | 184     DISALLOW_COPY_AND_ASSIGN(NetworkChangeObserver); | 
| 185   }; | 185   }; | 
| 186 | 186 | 
| 187   class NET_EXPORT MaxBandwidthObserver { | 187   class NET_EXPORT MaxBandwidthObserver { | 
| 188    public: | 188    public: | 
| 189     // Will be called when a change occurs to the network's maximum bandwidth as | 189     // Called when a change occurs to the network's maximum bandwidth as | 
| 190     // defined in http://w3c.github.io/netinfo/. Generally this will only be | 190     // defined in http://w3c.github.io/netinfo/. Also called on type change, | 
| 191     // called on bandwidth changing network connection/disconnection events. | 191     // even if the maximum bandwidth doesn't change. See the documentation of | 
| 192     // Some platforms may call it more frequently, such as when WiFi signal | 192     // GetMaxBanwidthAndConnectionType for what to expect for the values of | 
| 193     // strength changes. | 193     // |max_bandwidth_mbps|. | 
| 194     // TODO(jkarlin): This is currently only implemented for Android. Implement | 194     virtual void OnMaxBandwidthChanged(double max_bandwidth_mbps, | 
| 195     // on every platform. | 195                                        ConnectionType type) = 0; | 
| 196     virtual void OnMaxBandwidthChanged(double max_bandwidth_mbps) = 0; |  | 
| 197 | 196 | 
| 198    protected: | 197    protected: | 
| 199     MaxBandwidthObserver() {} | 198     MaxBandwidthObserver() {} | 
| 200     virtual ~MaxBandwidthObserver() {} | 199     virtual ~MaxBandwidthObserver() {} | 
| 201 | 200 | 
| 202    private: | 201    private: | 
| 203     DISALLOW_COPY_AND_ASSIGN(MaxBandwidthObserver); | 202     DISALLOW_COPY_AND_ASSIGN(MaxBandwidthObserver); | 
| 204   }; | 203   }; | 
| 205 | 204 | 
| 206   virtual ~NetworkChangeNotifier(); | 205   virtual ~NetworkChangeNotifier(); | 
| (...skipping 20 matching lines...) Expand all  Loading... | 
| 227   // user won't be able to connect to remote sites. However, another return | 226   // user won't be able to connect to remote sites. However, another return | 
| 228   // value doesn't imply that the user will be able to connect to remote sites; | 227   // value doesn't imply that the user will be able to connect to remote sites; | 
| 229   // even if some link is up, it is uncertain whether a particular connection | 228   // even if some link is up, it is uncertain whether a particular connection | 
| 230   // attempt to a particular remote site will be successful. | 229   // attempt to a particular remote site will be successful. | 
| 231   // The returned value only describes the connection currently used by the | 230   // The returned value only describes the connection currently used by the | 
| 232   // device, and does not take into account other machines on the network. For | 231   // device, and does not take into account other machines on the network. For | 
| 233   // example, if the device is connected using Wifi to a 3G gateway to access | 232   // example, if the device is connected using Wifi to a 3G gateway to access | 
| 234   // the internet, the connection type is CONNECTION_WIFI. | 233   // the internet, the connection type is CONNECTION_WIFI. | 
| 235   static ConnectionType GetConnectionType(); | 234   static ConnectionType GetConnectionType(); | 
| 236 | 235 | 
| 237   // Returns a theoretical upper limit on download bandwidth, potentially based | 236   // Sets |max_bandwidth_mbps| to a theoretical upper limit on download | 
| 238   // on underlying connection type, signal strength, or some other signal. The | 237   // bandwidth, potentially based on underlying connection type, signal | 
| 239   // default mapping of connection type to maximum bandwidth is provided in the | 238   // strength, or some other signal. If the network subtype is unknown then | 
| 240   // NetInfo spec: http://w3c.github.io/netinfo/. Host-specific application | 239   // |max_bandwidth_mbps| is set to +Infinity and if there is no network | 
| 241   // permissions may be required, please see host-specific declaration for more | 240   // connection then it is set to 0.0. The circumstances in which a more | 
| 242   // information. | 241   // specific value is given are: when an Android device is connected to a | 
| 243   static double GetMaxBandwidth(); | 242   // cellular or WiFi network, and when a ChromeOS device is connected to a | 
|  | 243   // cellular network. See the NetInfo spec for the mapping of | 
|  | 244   // specific subtypes to bandwidth values: http://w3c.github.io/netinfo/. | 
|  | 245   // |connection_type| is set to the current active default network's connection | 
|  | 246   // type. | 
|  | 247   static void GetMaxBandwidthAndConnectionType(double* max_bandwidth_mbps, | 
|  | 248                                                ConnectionType* connection_type); | 
| 244 | 249 | 
| 245   // Retrieve the last read DnsConfig. This could be expensive if the system has | 250   // Retrieve the last read DnsConfig. This could be expensive if the system has | 
| 246   // a large HOSTS file. | 251   // a large HOSTS file. | 
| 247   static void GetDnsConfig(DnsConfig* config); | 252   static void GetDnsConfig(DnsConfig* config); | 
| 248 | 253 | 
| 249 #if defined(OS_LINUX) | 254 #if defined(OS_LINUX) | 
| 250   // Returns the AddressTrackerLinux if present. | 255   // Returns the AddressTrackerLinux if present. | 
| 251   static const internal::AddressTrackerLinux* GetAddressTracker(); | 256   static const internal::AddressTrackerLinux* GetAddressTracker(); | 
| 252 #endif | 257 #endif | 
| 253 | 258 | 
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 302   static void RemoveDNSObserver(DNSObserver* observer); | 307   static void RemoveDNSObserver(DNSObserver* observer); | 
| 303   static void RemoveNetworkChangeObserver(NetworkChangeObserver* observer); | 308   static void RemoveNetworkChangeObserver(NetworkChangeObserver* observer); | 
| 304   static void RemoveMaxBandwidthObserver(MaxBandwidthObserver* observer); | 309   static void RemoveMaxBandwidthObserver(MaxBandwidthObserver* observer); | 
| 305 | 310 | 
| 306   // Allow unit tests to trigger notifications. | 311   // Allow unit tests to trigger notifications. | 
| 307   static void NotifyObserversOfIPAddressChangeForTests(); | 312   static void NotifyObserversOfIPAddressChangeForTests(); | 
| 308   static void NotifyObserversOfConnectionTypeChangeForTests( | 313   static void NotifyObserversOfConnectionTypeChangeForTests( | 
| 309       ConnectionType type); | 314       ConnectionType type); | 
| 310   static void NotifyObserversOfNetworkChangeForTests(ConnectionType type); | 315   static void NotifyObserversOfNetworkChangeForTests(ConnectionType type); | 
| 311   static void NotifyObserversOfInitialDNSConfigReadForTests(); | 316   static void NotifyObserversOfInitialDNSConfigReadForTests(); | 
|  | 317   static void NotifyObserversOfMaxBandwidthChangeForTests( | 
|  | 318       double max_bandwidth_mbps, | 
|  | 319       ConnectionType type); | 
| 312 | 320 | 
| 313   // Enable or disable notifications from the host. After setting to true, be | 321   // Enable or disable notifications from the host. After setting to true, be | 
| 314   // sure to pump the RunLoop until idle to finish any preexisting | 322   // sure to pump the RunLoop until idle to finish any preexisting | 
| 315   // notifications. To use this, it must must be called before a | 323   // notifications. To use this, it must must be called before a | 
| 316   // NetworkChangeNotifier is created. | 324   // NetworkChangeNotifier is created. | 
| 317   static void SetTestNotificationsOnly(bool test_only); | 325   static void SetTestNotificationsOnly(bool test_only); | 
| 318 | 326 | 
| 319   // Return a string equivalent to |type|. | 327   // Return a string equivalent to |type|. | 
| 320   static const char* ConnectionTypeToString(ConnectionType type); | 328   static const char* ConnectionTypeToString(ConnectionType type); | 
| 321 | 329 | 
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 385 #if defined(OS_LINUX) | 393 #if defined(OS_LINUX) | 
| 386   // Returns the AddressTrackerLinux if present. | 394   // Returns the AddressTrackerLinux if present. | 
| 387   // TODO(szym): Retrieve AddressMap from NetworkState. http://crbug.com/144212 | 395   // TODO(szym): Retrieve AddressMap from NetworkState. http://crbug.com/144212 | 
| 388   virtual const internal::AddressTrackerLinux* | 396   virtual const internal::AddressTrackerLinux* | 
| 389       GetAddressTrackerInternal() const; | 397       GetAddressTrackerInternal() const; | 
| 390 #endif | 398 #endif | 
| 391 | 399 | 
| 392   // See the description of NetworkChangeNotifier::GetMaxBandwidth(). | 400   // See the description of NetworkChangeNotifier::GetMaxBandwidth(). | 
| 393   // Implementations must be thread-safe. Implementations must also be | 401   // Implementations must be thread-safe. Implementations must also be | 
| 394   // cheap as it is called often. | 402   // cheap as it is called often. | 
| 395   virtual double GetCurrentMaxBandwidth() const; | 403   virtual void GetCurrentMaxBandwidthAndConnectionType( | 
|  | 404       double* max_bandwidth_mbps, | 
|  | 405       ConnectionType* connection_type) const; | 
| 396 | 406 | 
| 397   // Returns a theoretical upper limit on download bandwidth given a connection | 407   // Returns a theoretical upper limit on download bandwidth given a connection | 
| 398   // subtype. The mapping of connection type to maximum bandwidth is provided in | 408   // subtype. The mapping of connection type to maximum bandwidth is provided in | 
| 399   // the NetInfo spec: http://w3c.github.io/netinfo/. | 409   // the NetInfo spec: http://w3c.github.io/netinfo/. | 
| 400   static double GetMaxBandwidthForConnectionSubtype(ConnectionSubtype subtype); | 410   static double GetMaxBandwidthForConnectionSubtype(ConnectionSubtype subtype); | 
| 401 | 411 | 
| 402   // Broadcasts a notification to all registered observers.  Note that this | 412   // Broadcasts a notification to all registered observers.  Note that this | 
| 403   // happens asynchronously, even for observers on the current thread, even in | 413   // happens asynchronously, even for observers on the current thread, even in | 
| 404   // tests. | 414   // tests. | 
| 405   static void NotifyObserversOfIPAddressChange(); | 415   static void NotifyObserversOfIPAddressChange(); | 
| 406   static void NotifyObserversOfConnectionTypeChange(); | 416   static void NotifyObserversOfConnectionTypeChange(); | 
| 407   static void NotifyObserversOfDNSChange(); | 417   static void NotifyObserversOfDNSChange(); | 
| 408   static void NotifyObserversOfInitialDNSConfigRead(); | 418   static void NotifyObserversOfInitialDNSConfigRead(); | 
| 409   static void NotifyObserversOfNetworkChange(ConnectionType type); | 419   static void NotifyObserversOfNetworkChange(ConnectionType type); | 
| 410   static void NotifyObserversOfMaxBandwidthChange(double max_bandwidth_mbps); | 420   static void NotifyObserversOfMaxBandwidthChange(double max_bandwidth_mbps, | 
|  | 421                                                   ConnectionType type); | 
| 411 | 422 | 
| 412   // Stores |config| in NetworkState and notifies OnDNSChanged observers. | 423   // Stores |config| in NetworkState and notifies OnDNSChanged observers. | 
| 413   static void SetDnsConfig(const DnsConfig& config); | 424   static void SetDnsConfig(const DnsConfig& config); | 
| 414   // Stores |config| in NetworkState and notifies OnInitialDNSConfigRead | 425   // Stores |config| in NetworkState and notifies OnInitialDNSConfigRead | 
| 415   // observers. | 426   // observers. | 
| 416   static void SetInitialDnsConfig(const DnsConfig& config); | 427   static void SetInitialDnsConfig(const DnsConfig& config); | 
| 417 | 428 | 
| 418  private: | 429  private: | 
| 419   friend class HostResolverImplDnsTest; | 430   friend class HostResolverImplDnsTest; | 
| 420   friend class NetworkChangeNotifierAndroidTest; | 431   friend class NetworkChangeNotifierAndroidTest; | 
| 421   friend class NetworkChangeNotifierLinuxTest; | 432   friend class NetworkChangeNotifierLinuxTest; | 
| 422   friend class NetworkChangeNotifierWinTest; | 433   friend class NetworkChangeNotifierWinTest; | 
| 423 | 434 | 
| 424   class NetworkState; | 435   class NetworkState; | 
| 425   class NetworkChangeCalculator; | 436   class NetworkChangeCalculator; | 
| 426 | 437 | 
| 427   void NotifyObserversOfIPAddressChangeImpl(); | 438   void NotifyObserversOfIPAddressChangeImpl(); | 
| 428   void NotifyObserversOfConnectionTypeChangeImpl(ConnectionType type); | 439   void NotifyObserversOfConnectionTypeChangeImpl(ConnectionType type); | 
| 429   void NotifyObserversOfDNSChangeImpl(); | 440   void NotifyObserversOfDNSChangeImpl(); | 
| 430   void NotifyObserversOfInitialDNSConfigReadImpl(); | 441   void NotifyObserversOfInitialDNSConfigReadImpl(); | 
| 431   void NotifyObserversOfNetworkChangeImpl(ConnectionType type); | 442   void NotifyObserversOfNetworkChangeImpl(ConnectionType type); | 
| 432   void NotifyObserversOfMaxBandwidthChangeImpl(double max_bandwidth_mbps); | 443   void NotifyObserversOfMaxBandwidthChangeImpl(double max_bandwidth_mbps, | 
|  | 444                                                ConnectionType type); | 
| 433 | 445 | 
| 434   const scoped_refptr<base::ObserverListThreadSafe<IPAddressObserver>> | 446   const scoped_refptr<base::ObserverListThreadSafe<IPAddressObserver>> | 
| 435       ip_address_observer_list_; | 447       ip_address_observer_list_; | 
| 436   const scoped_refptr<base::ObserverListThreadSafe<ConnectionTypeObserver>> | 448   const scoped_refptr<base::ObserverListThreadSafe<ConnectionTypeObserver>> | 
| 437       connection_type_observer_list_; | 449       connection_type_observer_list_; | 
| 438   const scoped_refptr<base::ObserverListThreadSafe<DNSObserver>> | 450   const scoped_refptr<base::ObserverListThreadSafe<DNSObserver>> | 
| 439       resolver_state_observer_list_; | 451       resolver_state_observer_list_; | 
| 440   const scoped_refptr<base::ObserverListThreadSafe<NetworkChangeObserver>> | 452   const scoped_refptr<base::ObserverListThreadSafe<NetworkChangeObserver>> | 
| 441       network_change_observer_list_; | 453       network_change_observer_list_; | 
| 442   const scoped_refptr<base::ObserverListThreadSafe<MaxBandwidthObserver>> | 454   const scoped_refptr<base::ObserverListThreadSafe<MaxBandwidthObserver>> | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
| 453 | 465 | 
| 454   // Set true to disable non-test notifications (to prevent flakes in tests). | 466   // Set true to disable non-test notifications (to prevent flakes in tests). | 
| 455   static bool test_notifications_only_; | 467   static bool test_notifications_only_; | 
| 456 | 468 | 
| 457   DISALLOW_COPY_AND_ASSIGN(NetworkChangeNotifier); | 469   DISALLOW_COPY_AND_ASSIGN(NetworkChangeNotifier); | 
| 458 }; | 470 }; | 
| 459 | 471 | 
| 460 }  // namespace net | 472 }  // namespace net | 
| 461 | 473 | 
| 462 #endif  // NET_BASE_NETWORK_CHANGE_NOTIFIER_H_ | 474 #endif  // NET_BASE_NETWORK_CHANGE_NOTIFIER_H_ | 
| OLD | NEW | 
|---|